Tycoon/알고리즘의 이해(2): C언어편 (完)

[알고리즘의 이해(2): C언어편] 연습문제 7장

nyamnmm 2025. 1. 2. 23:46
『 1~100을 이용한 알고리즘의 이해 2: C언어편 』
저자: 김득수
사용 프로그램: Visual Studio 2019
※ 본 게시글에 작성된 문제는 책 본문과 일치하지 않는 부분이 존재하며, 풀이 또한 정확하지 않습니다.

 


 

7-1. 다음 프로그램의 출력 결과는 무엇인가?
#include <stdio.h>
#include <string.h>

void main() {
	int a1 = 1234;
	int a2 = 1.23;
	int L, inta;
	char str[20] = "A 한글123";
    
	L = strlen(str);
	printf("%d \n", L);

	inta = atoi(str + 6) + 1;
	printf("%d \n", inta);

	L = sizeof(a1);
	printf("%d \n", L);

	L = sizeof(a2);
	printf("%d \n", L);

	strcat(str, "bcd");
	printf("%s \n", str);
}

 

문제풀이
#include <stdio.h>
#include <string.h>

// atoi 오류 발생 시 추가
#include <stdlib.h>

void main() {
	int a1 = 1234;
	int a2 = 1.23;
	int L, inta;
	char str[20] = "A 한글123";

	L = strlen(str);
	printf("%d \n", L);

	inta = atoi(str + 6) + 1;
	printf("%d \n", inta);

	L = sizeof(a1);
	printf("%d \n", L);

	L = sizeof(a2);
	printf("%d \n", L);

	// 오류 발생시 strcat_s 사용
	strcat(str, "bcd");
	printf("%s \n", str);
}

 

실행결과
9
124
4
4
A 한글123bcd

 


 

7-2.
입력된 문자 "ABCDEFG"를 역순으로 출력하는 순서도를 완성하고 프로그램의 출력 결과는 무엇인가?
문제풀이
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main() {
	// 입력된 문자가 char가 아닌 int로 저장되어있다는 전제로 형변환 연습
	int inta[8] = { 65, 66, 67, 68, 69, 70, 71 };
	char strb[8] = "";
	int L, i;
	char stra[8];

	for (i = 0; i < 8; i++) {
		stra[i] = (char)inta[i];
	}

	L = strlen(stra);

	for (i = L - 1; i >= 0; i--) {
		strb[(L - 1) - i] = stra[i];
	}

	printf("%s", strb);
}

 

int to char

1. 암시적인 형변환

int i = 97;
char ch = i;

 

2. 명시적인 형변환

int i = 97;
char ch = (char)i;

 

3. static_cast<char>

int i = 97;
char ch = static_cast<char>(i);

 

* 0 ~ 9 사이의 정수

int a = 1;
char ch = a + '0';

 

* 숫자 '0'의 ASCI 값 : 48

 

실행결과
GFEDCBA

 


 

7-3.
입력된 문자열 "ABCDEabcde"에서 "C"이면 3, ab이면 "67"로 변경하는 순서도를 완성하고,
프로그램의 출력 결과는 무엇인가?

 

문제풀이
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main() {
	char stra[11] = "ABCDEabcde";
	char strb[11] = "", strc[11] = "";
	int L, i;

	// 오류 발생 시 strcpy_s 사용
	strcpy(strb, stra);
	strcpy(strc, stra);

	L = strlen(stra);

	for (i = 0; i<= L - 1; i++) {
		if (stra[i] == 'c')
			strb[i] = '3';
	}

	for (i = 0; i<= L - 2; i++) {
		if (stra[i] == 'a' && stra[i + 1] == 'b')
			strc[i] = '6', strc[i + 1] = '7';
	}

	printf("%s \n%s \n%s", stra, strb, strc);
}

 

실행결과
ABCDEabcde
ABCDEab3de
ABCDE67cde

 


 

7-4.
입력된 문자열 "12345*ABCED"에서 "*"를 중심으로 "ABCED"는 문자열 strb에 입력하고,
inta에는 "12345"를 수치화하여 +1 하여 입력하는 순서도를 완성하고, 프로그램의 출력 결과는 무엇인가?

 

문제풀이
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main() {
	char stra[12] = "12345*ABCDE";
	char strb[6] = "";
	int inta, L, m, i;

	L = strlen(stra);
    
	for (i = 0; i <= L - 1; i++) {
		if (stra[i] == '*')
			break;
	}

	m = i;

	for (i = m + 1; i <= L - 1; i++) {
		strb[i - m - 1] = stra[i];
	}

	inta = atoi(stra) + 1;	// atoi 는 문자부분을 인식X

	printf("stra : %s \n", stra);
	printf("strb : %s \n", strb);
	printf("inta : %d", inta);
}

 

실행결과
stra : 12345*ABCDE
strb : ABCDE
inta : 12346