『IT CookBook, C언어 for Beginner(개정판)』 연습문제 해답 초안작성: 2014.08.16 한빛아카데미㈜ [1장 연습문제] 1. (1) 코딩 (2) 컴파일 (3) 링크 (4) 빌드 (5) 실행 (6) *.c , *.cpp 2. 3. #include <stdio.h> int main() { printf ("%d \n\n\n", 100-99); } [2장 연습문제] 1. 500,400,900 2. scanf_s(), & 3. a, b, result 4. 1 + 2 + 3 = 6 5. 6. #include <stdio.h> int main() { int a, b, c, d; int result; printf("첫 번째 계산할 scanf_s("%d", &a); printf("두 번째 계산할 scanf_s("%d", &b); printf("세 번째 계산할 scanf_s("%d", &c); printf("네 번째 계산할 scanf_s("%d", &d); 값을 입력하세요 ==> "); 값을 입력하세요 ==> "); 값을 입력하세요 ==> "); 값을 입력하세요 ==> "); result = a + b - c * d; printf(" %d + %d - %d * %d } = %d \n", a, b, c, d, result); [3장 연습문제] 1. (1) 정수, 실수 (2) %d, %x, %o 2. %d, %d, %f 3. (1) 291 (2) 4A (3) char a[6]; 4. (1) \a (2) \b (3) \n (4) \r (5) \t 5. (1) f111, 111+222, 333 (2) 0123.450 (3) 123.00 6. 123.0 7. ③ ④ 8. #include <stdio.h> int main() { int data; printf("16진수를 입력하세요 : "); scanf_s("%X", &data); printf("입력한 16진수는 10진수로 %d 입니다.\n", data); } 9. (1) (2) [4장 연습문제] 1. % 2. 23 3. +=, -=, *=, /=, %= 4. (1) 괄호 (2) 캐스트, (float), (int) (3) ++, -(4) ( a > 10 ) && ( a < 20 ) (5) 곱한, 나눈 5. 6. (1) 2 (2) 0 (3) 0100 (4) 1101 (5) 0000 7. (1) 100 (2) 0, 1, 0, 1, 0, 20 8. #include <stdio.h> int main() { int time; int hour, min , sec; printf(" ## 계산할 초는 ? "); scanf_s("%d", &time); hour = time / (60 * 60); // 1시간 = 1분(60초) * 60 time = time % (60 * 60); min = time / 60; // 1분 = 60초 sec = time % 60; printf("\n 시간은 ==> %d 시간 \n", hour); printf(" 분은 ==> %d 분 \n", min); printf(" 초는 ==> %d 초 \n", sec); } 9. 10. 10행 수정 if (a = 100) if (a == 100) [5장 연습문제] 1. (1) 아무것도 출력 안됨 (2) if문 수행2if문 수행3 2. (1) if, else (2) 블록({}) (3) switch, case 3. (1) O (2) X (3) X 4. (1) 2다 (2) 1이다. 2다. 3이다. 5. #include <stdio.h> int main() { int a; printf("처리할 수를 입력하세요 : "); scanf_s("%d", &a); if( a > 0 ) printf else if (a < printf else printf } 6. ("입력한 수는 + 입니다.\n"); 0) ("입력한 수는 - 입니다.\n"); ("입력한 수는 0 입니다.\n"); #include <stdio.h> int main() { int a=100; if (a < 200) { printf(" a가 200보다 "); printf(" 작습니다.\n"); } else printf (" a가 200보다 큽니다."); } [6장 연습문제] 1. 초깃값, 조건식, 증감식, 반복할 문장 2. (1) 10회 (2) 11회 (3) 0회 (4) 10회 (5) 11회 3. (1) 15 회 (2) 24 회 4. (1) X (2) X (3) O 5. (1) X (2) X (3) O (4) O (5) O (6) O (7) O 6. for( ; ; ) 7. (1) i<=9 또는 i<10 (2) i++ 또는 ++i 또는 i=i+1 8. 6행 : int odd_hap = 0; 7행 : int even_hap = 0; 9. i%3==0 || i%7==0 [7장 연습문제] 1. 조건식, 초기값, 증감식 2. (1) X (2) X (3) X (4) X (5) X (6) X 3. (1) goto (2) break (3) return (4) continue 4. (1) i=0 (2) i<10 (3) i++ 5. 12번 6. i%5==0 || i%8==0 [8장 연습문제] 1. bb[0], bb[1], bb[2], bb[3] 2. 1000, 0, 999 3. ① ④ 4. ④ 5. (1) 바 (2) 다 (3) 가 (4) 나 (5) 라 6. (1) X (2) X (3) X (4) O (5) X (6) X 7. 50개 8. int cc[5][9][10]; 9. (6) 마 (7) 사 #include <stdio.h> int main() { int aa[4]; int hap=0, kop=1; int i; i=0; while (i<=3 ) { printf("%d번째 숫자를 입력하세요 : ", i+1 ); scanf_s("%d", &aa[i]); i++; } i=0; while (i<=3 ) { hap = hap + aa[i]; kop = kop * aa[i]; i++; } printf(" 합계 ==> %d \n", hap); printf(" 곱셈 ==> %d \n", kop); } 10. 원래 코드 13~16행 for (i=0 ; i<4 ; i++) printf("bb[%d]==>%d\t", i, bb[i] ); printf("\n"); aa[2]는 0으로 초기화, bb[3]은 예상할 수 없는 값 11. (1) cc (2) int 또는 cc[0] 12. (1) gets_s (2) gets_s (3) strcat_s (4) strcat_s (5) strlen (6) strlen (7) strcmp 13. #include <stdio.h> int main() { int aa[3][4]; int i, k; int val=1; i=0; while(i<3) { k=0; while(k<4){ aa[i][k] = val; val++; k++; } i++; } } [9장 연습문제] 1. (1) 스택(Stack) (2) 증가, 감소 (3) 10, 0 2. (1) 1byte (2) 4byte (3) 4byte (4) 4byte 3. (1) 1개 (2) 1개 (3) 3개 4. (1) X (2) O (3) O (4) X (5) X (6) X (7) X (8) X (9) O 5. 104번지 6. (1)과 (4), (2)와 (3) 7. 문자형 포인터에 정수형 변수의 주소를 넣었다. 8. 24행을 if ( *(p+i) < *(p+k) )로 수정 9. #include <stdio.h> int main() { int s[10] ; int tmp; int i, k; int *p; p = s; for(i=0; i<10; i++) { printf("s[%d] 데이터: ", i); scanf_s("%d", (p+i)); } printf("정렬 전 배열 s ==> "); -- 이후로는 동일함--- 10. case 2 부분에 한 줄 추가 case 2: if (top <= 0) { printf("빠져나갈 자동차가 없음\n"); } else{ top --; printf(" %c 자동차가 터널에서 빠짐\n", stack[top]); stack[top] = ' '; carName-- ; } break; 11. 각각 4byte 씩 동일하게 할당됨 12. 10행 : q = *p; q = p; 13. #include <stdio.h> #include <string.h> int main() { char s[20]; char *p=s; int i; printf("글자를 입력(20자 미만) : "); scanf_s("%s",p, 20); for( i=strlen(s)-1 ; i>=0 ; i--) printf("%c", *(p+i)); printf("\n"); } [10장 연습문제] 1. 프로토타입 2. ① v1의 데이터 형식이 없음 ② 함수는 int인데 return 값은 char임 3. (1) 다 (2) 나 (3) 가 4. (1) 나 (2) 가 (3) 다 5. 200 6. 110 7. #include <stdio.h> int diff(char a, char b) { if (a > b) return a - b; else return b - a; } int main() { char ch1, ch2; printf("두 문자를 입력 : "); scanf_s("%c %c", &ch1,1, &ch2, 1); printf("두 문자의 차이 ==> %d\n", diff(ch1, ch2)); } 8. diff(&ch1,&ch2) 9. int swap(char *a, char *b) { char imsi; imsi = *a; *a = *b; *b = imsi; } 10. void func1(int); [11장 연습문제] 1. scanf_s(), printf() 2. (1) 다 (2) 라 (3) 사 (4) 가 (5) 아 (6) 마 (7) 바 (8) 나 3. 10, a, 12 4. (1) ) getch(), getche(), getchar() (2) fscanf_s(), fprintf() 5. 1 3 4 2 6. (1) 나 (2) 다 (3) 가 (4) 라 7. (1) ch = getche(); (2) break; (3) s[i] 8. (1) pass1[i] = getch(); (2) pass2[i] = getch(); (3) strncmp(pass1, pass2, 4) 9. #include <stdio.h> void main() { char str[200]; FILE *rfp; FILE *wfp; int i; fopen_s(&rfp, "c:\\windows\\win.ini", "r"); fopen_s(&wfp, "c:\\temp\\win2.ini", "w"); for(i=1; ;i++) { fgets(str,200,rfp); if (feof(rfp)) break; fprintf(wfp,"%3d행 : %s",i,str); } fclose(rfp); fclose(wfp); } [12장 연습문제] 1. (1) X (2) O (3) X (4) O (5) X (6) O 2. (2) 3. (1) 1000 (2) 1004 (3) 1000 (4) 1004 4. (1) malloc(), calloc(), realloc() (2) 포인터배열 5. (3) 6. #include <stdio.h> #include <malloc.h> int main() { float* p; int i; float hap=0, kop=1; int cnt; printf(" 입력할 개수는 ? "); scanf_s("%d", &cnt); p = (float*) malloc(sizeof(float) * cnt); for(i=0 ; i<cnt ; i++) { printf(" %d 번째 숫자 : ", i+1); scanf_s("%f", p+i); } for(i=0 ; i<cnt ; i++) { hap = hap + *(p+i); kop = kop * *(p+i); } printf("입력숫자 합 ==> %f\n", hap); printf("입력숫자 곱 ==> %f\n", kop); free(p); } 7. 8행 : p = (char) calloc(sizeof(char) * 3 ); p = (char*) calloc(sizeof(char) * 3 ); 8. (1) p[i] = (char*) malloc( (sizeof(char) * size) + 1 ); (2) printf(" %d 행 :%d 글자\n", i+1, strlen(p[i])); [13장 연습문제] 1. (1) 가 (2) 나 (3) 다 2. (1) X (2) X (3) X (4) X 3. s[1].jumsu 4. p->jumsu 5. union, struct, enum 6. struct student { char name[10]; int age; char tel[13]; float salary; }; 7. sun : -5 , mon : -4, tue : -3, wed : -2, thu : -1, fri : 0, sat : 10 8. (1) p = &s (2) p->name (3) &p->avg 9. (1) (2) [14장 연습문제] 1. void 또는 int main(int argc, char* argv[]) 2. 2 3. (1) 헤더파일 (2) <>, "" 4. (1) 나 (2) 가 (3) 라 (4) 다 5. #include <stdio.h> void gugu() { static int dan=0; int i; dan++; for (i=2; i<=9; i++) { printf("%2dx%2d=%2d ", i, dan, dan*i ); } printf("\n"); } int main() { int i; for(i=2; i<10 ; i++) printf("**%d 단** ",i); printf("\n"); for(i=0; i<8 ; i++) gugu(); } 6. main.c 소스의 int a=100;을 main() 함수의 밖으로 빼야 한다. 7. 2행 : #define 3.14 PI 6행~ 7행 : 한 줄로 표현 const int a; a = 100; const int a=100; #include<stdio.h> #define PI 3.14 int main() { const int a=100; } #define PI 3.14