CHAPTER 1 중간점검문제 p.22 1. 계산기는 수행하는 작업이 고정되어 있으므로 컴퓨터라고 할 수 없다. 2. 이진수로 되어 있는 기계어 3. 고급 프로그래밍 언어를 기계어로 번역한다. p.25 1. FORTRAN 2. PASCAL 3. C++ 4. COBOL 5. JAVA 6. C++, JAVA p.28 1. 임베디드 시스템(embedded system)은 일종의 컴퓨터 시스템으로 한 가지 기능만 수행되 도록 설계되었으며 하드웨어에 내장하여 특수한 기능만을 수행한다. 임베디드 시스템은 오 늘날 일상 생활에 쓰이는 많은 장치들을 제어하고 있다. 2. 장점: 간결하고 효율적이며 이식이이 뛰어나다. 단점: 배우기 어렵다. 객체 지향 프로그래밍이 힘들다. p.32 1. 수화기를 든다. -> 상대방의 전화번호를 누른다. -> 통화를 한다 -> 통화가 끝나면 수화 기를 내려 놓는다. 2. 세탁기의 전원을 켠다. -> 세탁기의 뚜껑을 연다. -> 옷과 세제를 넣는다. ->세탁기의 뚜 겅을 닫는다. ->실행 버튼을 누른다. -> 완료되었으면 전원을 차단한다.
p.39 1. 요구사항분석->알고리즘 작성->소스 작성->컴파일과 링크->프로그램 실행과 디버깅 2. 올바르지 않다. 확장자로.c를 붙여야 한다. 3. 소스 파일: 프로그래밍 언어로 작성한 원본 파일 오브젝트 파일: 소스 파일을 기계어로 컴파일한 파일 실행파일: 오브젝트 파일들을 모아서 시동 코드와 라이브러리 코드를 붙인 파일 4. 오브젝트 파일: test.obj 실행파일: test.exe 5. 소스 파일은 반드시 보관하여야 한다. 오브젝트 파일은 삭제하여도 된다. 6. 원하는 실행 결과가 나오지 않는 경우에 소스 수정->컴파일->링크->실행 의 단계를 다 시 거치는 오류 수정 작업 7. 오류가 남아있을 수도 있고 사용자의 요구조건이 변경될 수 있다. p.43 1. 2. 와 같은 입력하여서 실행하여 본다. 조건부실행 과 변수 에서는 변수 생성이 필요하다. 변수는 아직 학습하지 않았지만 값을 저장하고 있는 박스라고 생각할 수 있다. 변수는 에서 Make a variable"을 클릭한다. CHAPTER 2 중간점검문제
p.43 1. 통합 개발 환경 2. [파일]->[새로만들기]->[프로젝트] 3. [빌드]->[솔루션빌드] 4. 구별한다. 5. sample.obj와 sample.exe 6. 사용하여도 된다. 메모장으로 소스 파일을 생성한 후에 [소스파일] 위에서 마우스 오른쪽 버튼을 눌러서 [추가]->[기존항목]을 선택한다. p.64 1. 세미콜론(;) 2. 주석(comment) 3. 화면에 주어진 문자열을 출력한다. p.66 1. \n 2. #include <stdio.h> int main(void) { printf("사과 \n"); printf("오렌지 \n"); printf("포도 \n"); return 0; } 3. #include <stdio.h> int main(void) { printf("3 X 1 = 3 \n"); printf("3 X 2 = 6 \n"); printf("3 X 3 = 9 \n"); printf("3 X 4 = 12 \n"); printf("3 X 5 = 15 \n"); printf("3 X 6 = 18 \n"); printf("3 X 7 = 21 \n"); printf("3 X 8 = 24 \n"); printf("3 X 9 = 27 \n"); return 0;
} p.66 1. 소스 파일을 수정하고 다시 컴파일하여서 실행하는 디버깅(debugging)을 하여야 한다. 2. 경고(warning) CHAPTER 3 중간점검문제 p.84 1. /* /*... */ */와 같이 중첩할 수 없다. 2. /*... */ 형태의 주석은 한줄 이상으로 할 수 있다. 3. 코드를 작성한 의도를 적는 것이 좋다. 4. 전혀 영향을 끼치지 않는다. p.85 1. stdio.h 2. 현재의 위치에 헤더파일을 읽어서 포함시키라는 의미이다. p.88 1. main() 2. {와 }이다. 3. ; p.91 1. int i; 2. double f; 3. 함수의 첫 부분에서(즉 일반 문장을 작성하기 전에) p.93 1. product = a * b; 2. quotient = a / b;
p.96 1. %f 2. printf("k=%d \n", k); p.100 1. double value; scanf("%lf", &value); CHAPTER 4 중간점검문제 p.112 1. 변수는 실행 도중에 값을 변경할 수 있는 공간이다. 상수는 실행 도중에 값을 변경할 수 없는 공간이다. 2. 메모리(기억장치) p.116 1. 알파벳, 숫자, _으로 구성된다. 중간에 공백이 들어갈 수 없다. 대문자와 소문자는 구별 된다. 키워드는 식별자로 사용할 수 없다. 2. 알파벳, _ 3. 키워드(예약어) p.120 1. 변수는 반드시 함수의 처음에서 선언되어야 한다. 2. int x=1, y=0; p.128 1. short, int, long 2. 이해하기 쉽고 값의 변경이 쉬어진다. 3. 메모리를 절약하기 위하여
4. 음수를 양수로 해석한다. 5. -32768이 된다. p.132 1. 근본적인 이유는 뺄셈 연산을 덧셈으로 하려는 것이다. 즉 3-4 = 3+(-4)와 같이 하려는 것이다. 덧셈 회로만 있으면 덧셈과 뺄셈을 할 수 있으므로 CPU 안의 회로가 간단해진다. 2. 10111101 p.139 1. float형은 4바이트이고 double형은 8바이트이다. 2. 1.0e25 3. 가수와 지수를 저장하는 공간이 제한되어 있기 때문이다. p.146 1. 문자도 정수를 이용해서 나타낸다. 2. char 3. printf("\a"); CHAPTER 5 중간점검문제 p.156 1. 수식은 연산자와 피연산자의 조합이다. 2. 상수도 하나의 수식이다. 3. 10과 20은 피연산자이고 +는 연산자이다. 4. 피연산자의 개수 p.162 1. x = x + 1; 2. x++은 x의 값을 먼저 사용하고 나중에 값을 증가한다. ++x은 증가를 먼저하고 증가된 값 을 수식에 사용한다.
3. 13 p.165 1. 변수, 즉 값을 저장할 수 있는 공간이다. 2. 수학에서는 같다는 의미이지만 프로그래밍에서는 저장하라는 의미가 된다. 3. x = x * y를 줄여서 쓴 것이다. 4. 10을 6으로 나누어서 얻은 나머지 4가 수식의 값이 된다. 5. 10과 6이 모두 정수이므로 결과값은 1이 된다. 6. x+=y는 x=x+y와 동일하다. x=+y는 단순히 x = +y와 같다. 즉 x = y와 같다. p.170 1.내림 변환은 낮은 등급으로 변환되는 것이고 올림 변환은 높은 등급으로 변환되는 것이 다. 2. (double)x 3. 정수가 부동소수점수로 형변환되어서 계산이 이루어진다. p.173 1. 참(1)과 거짓(0) 2. 1+5가 되어서 6이 된다. p.178 1. (age >= 25 && salary >= 3500) 2. 0이 아니면 참으로 취급한다. 따라서 상수 10은 참이다. 3.!3의 값은 0이 된다. 4. (persons >= 3 ) && (++count <= 10) 위의 식에서 persons가 3보다 작으면 ++count는 실행되지 않는다. p.180 1. (x%2==0)? printf("짝수\n") : printf("홀수\n"); p.186 1. << 2. ~ 3. 왼 4. 오른 p.193 1.,(콤마 연산자) 2. &&
3. 단항연산자 4. 산술연산자 CHAPTER 6 중간 점검 문제 p.208 1. 복합문(블록) 2. 기본적으로 참은 1, 거짓은 0로 표시된다. 3. 관계 수식이나 논리 수식 4. if문 다음에 있는 문장이 실행된다. if (...) {... } 여기 있는 문장이 실행된다. 5. 문장들을 중괄호로 묶어서 복합문으로 만든다. p.214 1. if( n >= 100 ) printf("large\n"); else printf("small\n"); p.221 1. n의 값이 -1인 경우-> C n의 값이 0인 경우-> A n의 값이 5인 경우-> B 2.
if( n < 100 ) printf("small\n"); else if( n < 200 ) printf("medium\n"); else printf("large\n"); p.228 1. 다음 case절의 문장들을 연속하여서 실행한다. 2. fruit의 값이 1인 경우-> 사과 fruit의 값이 2인 경우-> 배 바나나 fruit의 값이 5인 경우-> 과일 CHAPTER 7 중간점검문제 p 242 1. 반복하여 처리하는 작업이 많기 때문이다. 2. while 문, for 문 p.255 1. if문은 조건이 만족되면 한번만 실행한다. while문은 조건이 만족되는 동안 반복하여 실 행된다. 2. while(1) { //... } 3.
10 7 4 1 p.260 1. 0 1 2 p.268 1. 2 4 6 8 계속하려면 아무 키나 누르십시오... 2. Student10 Student8 Student6 Student4 Student2 p.272 1. 0 곱하기 0은 0 0 곱하기 1은 0 0 곱하기 2은 0 1 곱하기 0은 0 1 곱하기 1은 1 1 곱하기 2은 2 2 곱하기 0은 0 2 곱하기 1은 2 2 곱하기 2은 4 계속하려면 아무 키나 누르십시오...
p.276 1. continue 2. break 3. 1 2 4. 1 2 4 5 7 8 CHAPTER 8 중간점검문제 p.294 1. 가장 중요한 이유는 소스 코드의 중복성을 없애 주기 때문이다. 2. 함수는 프로그램을 이루는 모듈 역할을 한다. 3. 라이브러리 함수 p.297 1. void 2. return (x+y+z); 3. double fabs(double f) p.307 1. 인수의 값이 매개 변수로 복사된다. 2. 정수가 실수로 형변환된 후에 반환된다. p.311 1. 반환형, 함수의 이름, 매개 변수--- 함수 헤더라고 한다. 2. 1개
3. void 4. 함수 원형은 컴파일러에게 정보를 주기 위하여 함수 헤더만을 표시한다. 함수 정의에는 반드시 함수 몸체가 있어야 한다. 5. 프로그램의 가독성을 높이기 위하여 6. 함수 pow()는 두 개의 double형 매개 변수를 가지며 반환형은 double형이다. p.320 1. sin(90.0* (3.141592/180.0)); 2. 0에서 9 CHAPTER 9 중간점검문제 p.344 1. 변수가 선언되는 위치 2. 크게 나누어서 지역 변수와 전역 변수가 있다. 3. 전역 변수 4. 지역 변수 5. 없다. 6. 가능하다. 7. 지역 변수는 자동으로 소멸된다. 8. 알 수 없다. 쓰레기값이 들어 있다. 9. 그렇다. 10. 전역 변수는 함수의 외부에 정의될 수 있다. 11. 전역 변수는 프로그램이 실행되는 동안 계속하여서 유지된다. 초기값은 0이다. 12. 지역 변수가 우선시된다. p.348 1. auto, static, extern. resiter 등이 있다. 2. static 3. register 4. extern
5. 함수(블록)가 종료되어도 소멸되지 않는 변수를 생성하라는 것을 의미한다. CHAPTER 10 중간점검 문제 p.383 1. 관리하기 쉽고 반복이 가능하다. 2. 0 3. n-1 4. 인덱스(첨자) 5. 다른 프로그램의 메모리를 건드릴 수 있다. 6. 사용할 수 없다. 상수만 가능하다. p.388 1. 배열을 선언하면서 초기화한다면 다음과 같다. int a[6] = { 1, 2, 3, 4, 5, 6 }; 만약 선언되어 있는 상태이면 다음과 같은 문장으로 초기화가 가능하다. int i; for(i=1;i<=6;i++) a[i] = i; 2. 초기값의 개수가 적으면 나머지 원소들은 0으로 초기화된다. 초기값의 개수가 많은 경우에는 컴파일 오류가 발생한다. 3.가능하다. 4. 비교할 수 없다. 5. 대입할 수 없다. p.400 1. 배열은 원본이 전달된다고 생각할 수 있다. 2. 앞에 const를 추가한다.
p.414 1. 3*2*10 개의 원소가 존재한다. 2. int a[3][2][10] = { 0 }; CHAPTER 11 중간점검문제 p.435 1. 바이트(byte) 2. (a) 1 (b) 2 (c) 4 (d) 4 (e) 4 (f) 8 3. 포인터도 변수의 일종이다. 따라서 저장하고 있는 값의 변경이 가능하다. 4. & 연산자 5. p = &x; 6. *p = 25; p.443 1. * 연산자, ++, --, +, - 연산자 2. 84 번지를 가리킨다. 3. *p++ : p가 가리키는 값을 사용한 후에 p를 증가 (*p)++ : p가 가리키는 값을 증가 4. *(p+3)은 p가 가리키는 위치로부터 3번째에 있는 객체 p.447 1. (1) A (2) &A[0] 2. 첫 번째 원소의 값 3. 대입할 수 없다. 배열의 이름은 포인터 상수라고 생각하면 된다. 즉 변경이 불가능하다. 4. 참조할 수 있다. 5. 사용할 수 있다. p[0], p[1],.. 등의 표현이 가능하다. p.457
1. 값에 의한 호출(call by value) 2. 참조에 의한 호출(call by reference) 3. 배열은 복사되지 않고 원본이 전달된다. CHAPTER 12 증간점검문제 p.478 1. 문자 배열로 표현된다. 2. 문자열의 끝을 표현한다. 3. 0 4. 시스템이 문자열의 끝을 알 수 없어서 이상한 글자들이 출력된다. 5. B는 변수의 이름으로 생각한다. B 는 하나의 문자이다. B 는 문자 B로만 이루어진 문 자열을 의미한다. 6. 메모리의 데이터 세그먼트에 저장된다. 7. NULL 문자를 저장하기 위하여 8. (a) char s[6] = Hello ; (b) char s[6] = { H, e, l, l, o, \0 }; p.481 1. getchar()는 버퍼를 사용하므로 엔터키가 눌려져야만이 입력을 가져간다. 반면에 _getch()는 버퍼를 사용하지 않고 글자가 입력되는 대로 전달한다. 2. (1) getchar() 또는 getch() 사용 (2) scanf("%c", &ch); p.483 1. char line[100]; gets(line); 2. char word[100]; scanf("%s", word);
p.487 1. ctype.h 2. getchar()는 버퍼를 사용하므로 엔터키가 눌려져야만이 입력을 가져간다. 반면에 _getch()는 버퍼를 사용하지 않고 글자가 입력되는 대로 전달한다. 3. 16 4. 'A p.495 1. strcpy(s2, s1); 2. 크기가 7이상인 char 배열 필요 3. strcmp() 4. strncpy()에서는 복사하는 문자열의 크기를 제한할 수 있다. 5. strcat(s2, s2); 6. 0 p.498 1. 실수 3.141592가 차지하는 공간은 8바이트가 된다. (double형 상수) 반면에 3.141592 가 차지하는 공간은 9바이트가 된다. (NULL 문자 포함) 2. atof(), 또는 sscanf() 3. s가 붙으면 문자열에 출력한다. p.502 1. (1) char s[5][10] = { "C", "JAVA", "C++", "BASIC" }; (2) char* s2[] = { "C", "JAVA", "C++", "BASIC" }; 2. printf("%s\n", s[0]); CHAPTER 13 증간점검문제
p.517 1. 구조체는 서로 타입이 다른 변수들을 묶는 것이다. 배열은 타입이 같은 변수들을 묶는 것이다. 2. // x값과 y값으로 이루어지는 화면의 좌표 struct point { int x; // x 좌표 int y; // y 좌표 }; // 복소수 struct complex { double real; double imag; }; // 실수부 // 허수부 // 날짜 struct date { int month; int day; int year; }; // 사각형 struct rect { int x; int y; int width; int height; }; p.528 1. = 연산자 2. 구조체 태그는 구조체의 정의를 나타낸다. 따라서 구조체 태그에는 메모리 공간이 할당 되지 않는다. 반면에 구조체 변수에는 실제로 메모리 공간이 할당된다. 3. 가능하다. 4. 가능하다. p.531 1. struct product {
int number; char name[100]; int price; }; struct product parray[5]; p.541 1. 구조체는 복사본이 전달된다. 2. 매개 변수 선언시에 const를 붙인다. p.546 1. union 2. 가장 큰 멤버의 크기와 같다. p.549 1. enum 2. 어떤 변수가 정해진 값만을 갖는 경우에 선언한다. 3. 0부터 시작되는 정수값이 할당된다. p.553 1. 사용자가 새로운 타입을 선언할 수 있게 한다. 2. 이식성을 높이고 문서화의 역할도 하며 컴파일러가 점검할 수 있도록 한다. 3. // 직원 typedef struct { char name[20]; // 이름 int age; // 나이 int gender; // 성별 int salary; // 월급 } employee; CHAPTER 14
중간점검문제 p.569 1. double **dp; 2. **dp는 변수 c를 가리킨다. p.572 1. double *p[10]; 2. 2차원 배열에서는 사용하지 않는 공간이 낭비될 수 있다. 래그드 배열에서는 낭비되는 공간이 없다. p.581 1. int (*pf)(double); 2. pf(3.0); p.586 1. m[0]은 2차원 배열 m에서 0번째 행을 가리킨다. 2. (m+1)은 1번째 행을 가리킨다. p.588 1. void *vp; int *ip; ip = (int *)vp; p.592 1. main 2. 4 CHAPTER 15
중간점검문제 p.606 1. #define KEY 1234 2. #define INPUT scanf p.614 1. 함수 매크로가 함수 호출 오버헤드가 없어서 빠르게 실행된다. 2. #define CUBING(x) ((x)*(x)*(x)) p.618 1. #ifdef TEST printf("test\n"); #endif p.621 1. #if DEBUG==2 printf("debug\n"); #endif 2. #if (DEBUG==2) && (LEVEL == 3) printf("debug\n"); #endif p.631 1. 여러 소스 파일로 만드는 편이 소스를 유지, 보수, 관리하기가 편리하다. 2. // factorial.h #ifndef FACTORIAL_H #define FACTORIAL_H int factorial(int x);
#endif // factorial.c #include "factorial.h" int factorial(int x) { int result = 1; int i; for(i = x;i >= 1; i--) result *= i; return result; } 3. // point.h #ifndef POINT_H #define POINT_H struct point { int x; int y; }; #endif p.633 1. 비트 필드 구조체 2. unsigned 형이나 unsigned int형 CHAPTER 16
중간점검문제 p.646 1. 스트림 2. 바이트 3. 장치 독립성 4. stdin, 키보드 5. stdout, 콘솔 화면 p.650 1. 형식 제어 문자열 2. 오른쪽 3. %d, %i 4. %o, %d, %x 5. %e 6. 6 7. 10.6 8. - 9. 6 p.655 1. %lf 2. 공백 문자 p.662 1. 바이트 2. 텍스트, 이진 3. fopen() 4. FILE p.669 1. int 2. fgets() 3. fprintf() 4. fscanf()
p.677 1. 이진 2. fopen() 3. "rb" p.681 1. 순차접근 2. 임의접근 3. 파일 위치 표시자 4. ftell() CHAPTER 17 중간점검 문제 p.699 1. 동적 메모리 할당 2. malloc() 3. free() 4. stdlib.h p.704 1. calloc() 2. realloc() 3. 바이트 4. void * p.715 1. 포인터 2. 데이터, 링크 3. 자기 참조 구조체 4.
배열(array): 크기가 고정되어 있다. 연결 리스트(linked list): 동적으로 크기를 늘릴 수 있다. 감사합니다. END