15장 이해점검 풀이1.다음 괄호 부분을 채우시오.a.문자열의 마지막에는 항상 (‘ ’(NULL)) 문자가 있어야 한다.b.표준입력장치를 의미하는 기호상수는 (stdin) 이고 표준출력장치를 의미하는 기호상수는 (stdout) 이다.c.함수 (strcmp())는 문자열을 비교하는데 이용되는 함수이며, 이 함수를 이용하려면 헤더파일 (string.h)를 포함해야 한다.d.함수 (getch())는 표준입력으로 문자 하나를 입력하는 함수인데, 버퍼링을 하지 않고, 키보드의 입력이 보이지 않는 특성을 갖는다.e.함수 (strtok())는 문자열에서 구분자로 분리되는 토큰을 추출해 내는 함수이다.f.C 언어에서 콘솔 프로그램의 명령어 줄 전달인자를 받으려면 프로그램 main() 함수에서 인자를 (int argc, char *argv[])라고 기술한다.====================================================================2.다음 소스에서 에러를 찾아보고 수정하시오.a.char a[] = {‘c’, ‘a’, ‘r’};printf(“%sn”, a);문자 배열을 이용하여 문자열 표현을 하고자 하는 경우는 명시적으로 문자열 마지막에 ‘ ’ 문자를 삽입한다.char a[] = {‘c’, ‘a’, ‘r’, ‘ ’};printf(“%sn”, a);b.char a[] = “car”;printf(“%cn”, toupper(a));함수 toupper()의 인자는 문자이다. 인자로 문자열을 받아 모두 대문자로 반환하는 함수는 strupr() 함수이다.char a[] = “car”;printf(“%sn”, strupr(a));c.char str[] = “double float”;strncpy(str, “long”, 4);printf(“%sn”, str);함수 strncpy()를 이용하는 경우, 문자열을 복사하기 위해서는 문자 ‘ ’까지의 길이를 인자로 이용해야한다. 그러므로 5를 이용한다.char str[] = “double float”;strncpy(str, “long”, 4);printf(“%sn”, str);d.char s[] = {“Visual C++”, “Turbo C”, “Eclipse”};printf(“%s”, s[0]);여러 문자열을 저장하기 위한 구조는 문자열 포인터의 배열을 이용한다. 그러므로 다음으로 기술한다.char s[] = {“Visual C++”, “Turbo C”, “Eclipse”};printf(“%s”, s[0]);e.if (!strcmp(str1, str2))printf(“두 문자열 %s와 %s는 같지 않습니다.”, str1, str2);함수 strcmp()는 인자인 두 문자열이 같으면 0을 반환한다. 두 문자열이 같지 않다는 메시지를 출력하려면 다음 문장이 맞는 문장이다.if (strcmp(str1, str2))printf(“두 문자열 %s와 %s는 같지 않습니다.”, str1, str2);====================================================================3.다음 문장을 완성하시오.a.문자열 “procedural programming”을 저장하는 배열 pl 선언char pl[] = “procedural programming”;b.위 배열 pl에서 문자열을 출력printf(“%sn”, pl);c.위 배열에서 세 번째 문자 o를 출력printf(“%cn”, *(pl+2);d.문자열 “사과”, “배”, “수박”, “복숭아”를 저장하는 문자 포인터 배열 flute 선언char *fruit[] = {“사과”, “배”, “수박”, “복숭아”};e.위 배열에서 수박을 출력printf(“%sn”, *(fruit + 2);====================================================================1.본인의 이름과 학과이름을 변수에 저장하여 출력하는 프로그램을 작성하시오.#include int main(void){char *name[] = {"홍길동", "인터넷 비지니스과"};printf("이름 : %sn", name[0]);printf("학과 : %sn", name[1]);return 0;}* 실행 결과 *========================================================2.한 줄의 문장을 표준입력으로 입력 받아 각각의 단어를 구성하는 문자를 역순으로 출력하는 프로그램을 작성하시오.#include #include void reverse(char *line);int main(void){char line[81];char *delimiter = " ";char *pword;printf("한 줄의 문장을 입력하세요. -> n");gets(line);printf("n");printf("입력한 각각의 단어를 반대로 출력합니다. -> n");pword = strtok(line, delimiter);while( pword != NULL ) {reverse(pword);putchar(' ');pword = strtok(NULL, delimiter);}printf("n");return 0;}void reverse(char *line) {char ch = *line;if (ch) {reverse(++line);printf("%c",ch);}}* 실행 결과 *========================================================3.문자를 하나 입력 받아 아스키 코드 값을 출력하는 프로그램을 작성하시오.#include int main(void){char ch;printf("문자를 하나 입력하세요 -> ");ch = getchar();printf("n%c의 아스키 코드 값은 십진수로 %d입니다.n", ch, ch);return 0;}* 실행 결과 *========================================================4.한 줄의 문자열을 표준입력으로 입력 받아 단어의 문자를 역순으로 출력하는 프로그램을 작성하시오.#include #define LINENUM 81void reverse(char *line);int main(void){char line[81];printf("한 줄의 문장을 입력하세요. -> n");fgets(line, LINENUM , stdin);printf("n");printf("입력한 문장을 반대로 출력합니다.");reverse(line);printf("n");return 0;}void reverse(char *line) {char ch = *line;if (ch) {reverse(++line);printf("%c",ch);}}* 실행 결과 *========================================================5.여러 줄의 문자열을 표준입력으로 입력 받아 구두점의 수를 모두 세는 프로그램을 작성하시오.#include #include #define LINENUM 81int main(void){char line[10][LINENUM];int i = 0, j = 0, maxline = 0;int count = 0;printf("여러 줄에 원하는 문장을 입력하세요.");printf("입력이 다 되었으면 n");printf("새로운 줄 처음에 ctrl+Z, 그리고 Enter를 입력하세요.nn");while (gets(line[i])) {line[i++];maxline++;}printf("n");for(i = 0; i < maxline; i++) {printf("< %d줄에 입력한 문자열에서 구두점 출력 >> n", i+1);j = 0;while ( line[i][j] ) {if ( ispunct(line[i][j]) ) {printf("구두점 %d : %cn", ++count, line[i][j]);}j++;}}printf("n구두점의 수는 모두 %d개 입니다.n", count);return 0;}* 실행 결과 *========================================================6.정수 형태의 문자열을 정수로 바꾸는 함수를 만드시오.”4356”은 정수 4356#include
14장 이해점검 풀이1.다음 괄호 부분을 채우시오.a.일반 변수와는 다르게 다른 변수의 주소 값을 저장하는 변수를 (포인터) 라 한다.b.변수의 주소 값을 16진수로 출력하려면 변환명세에 (%p) 라고 기술한다.c.함수 호출의 한 종류로 형식인자에 해당하는 변수에 실인자 값의 주소 값을 복사한다는 의미의 원어를 (call by address)라 한다.d.포인터를 선언할 때 특정한 초기 값이 없는 경우, 포인터 값이 없다는 의미의 값 (NULL)을 대입할 수 있다.e.일차원 배열에서 배열의 한 원소 값 a[3]과 같은 배열 이름 a를 이용한 참조 방법은 (*(a + 3))이다.====================================================================2.다음 소스에서 에러를 찾아보고 수정하시오.a.int 형 포인터 변수 p1, p2, p3를 한번에 선언하는 구문int *p1, p2, p3;int *p1, *p2, *p3;위와 같이 모든 변수 앞에 *을 넣어야 한다.b.double d = 3.59;int *pi = &d;포인터도 자료형이 같은 포인터 변수에 저장이 가능하다. 그러므로 다음과 같이 기술해야 한다.double *pi = &d;c.double d[] = {1.0, 2, 3.4, 5.6} ;*d++ = 3.1 ;위에서 *d++는 우선순위에 따라 *(d++)를 의미한다. 연산 d++는 d가 변수여야 가능한 연산이나 d는 변수가 아니라 배열의 이름인 상수이다. 그러므로 두 번째 문장은 잘못된 문장이다. 만일 이 문장의 의도가 배열의 두 번째 원소를 3.1로 수정하는 것이라면 다음과 같은 문장을 이용한다.double d[] = {1.0, 2, 3.4, 5.6} ;*(d+1) = 3.1 ;d.이차원 배열의 첫 번째 원소인 dd[0][0]를 5.0으로 수정double dd[][3] = {{1.0, 2, 3.4}, {5.6}} ;*dd = 5.0 ;배열 dd는 이차원 배열이므로 dd로 값을 참조하려면 다음과 같이 이중 포인터를 기술해야 한다.**dd = 5.0;====================================================================3.다음 이차원 배열에서 출력 값은 무엇인가?int a[3][2] = {1, 2, 3, 4, 5, 6};a.printf( “%d, %dn”, sizeof (a), sizeof (a[0]) );24, 8b.printf( “%dn”, *(*a + 5) );6c.printf( “%dn”, *(*(a + 2) + 1) );6d.printf( “%dn”, (*(a + 2))[1] );6e.printf( “%dn”, *(a[2] + 1) );6====================================================================1.함수의 형식 인자로 다음과 같이 기술된 함수 swap()은 인자 두 정수를 서로 바꾸는 기능을 수행한다. 함수 swap()을 구현하여 결과를 알아보는 프로그램을 작성하시오.void swap(int *x, int *y){…}#include void swap(int *x, int *y);int main(void){int x, y;printf("첫 번째 숫자를 입력하세요. -> ");scanf("%d", &x);printf("두 번째 숫자를 입력하세요. -> ");scanf("%d", &y);swap(&x, &y);printf("첫 번째는 숫자는 %d이고 두 번째 숫자는 %d입니다.n", x, y);return 0;}void swap(int *x, int *y){int z;z = *x;*x = *y;*y = z;}* 실행 결과 *====================================================================2.다음과 같은 이차원 배열을 초기화하여 각각의 원소의 값을 다음과 같이 수정하는 함수를 만들어 프로그램을 작성하시오.5, 8, 9, 320, 5, 23, 730, 42, 4, 6A[i][j] = A[i][j] * 10 + 5;#include #define ROW 3#define COL 4void print(int x[][COL], int m, int n);int main(void){int a[ROW][COL] = {{5,8,9,3}, {20,5,23,7}, {30,42,4,6}};int i,j;printf("원 행렬 값 : n");print(a, ROW, COL);for (i=0; i
13장 이해점검 풀이1.다음 괄호 부분을 채우시오.a.일반 지역 변수의 선언에서 자료형 앞에는 키워드 (auto)가 생략된 것이다.b.프로그램의 모든 영역에서 이용 가능한 변수를 (전역) 변수라고 한다.c.프로그램에서 사용되는 변수가 그 사용이 유효한 영역(범위)을 변수의 (scope)(영어로)라 한다.d.전역변수이나 하나의 파일에서만 유효한 전역변수는 (정적(static) 전역변수이다.e.이미 전역변수로 선언된 변수를 블록이나 함수 내부에서 이 변수는 외부에서 선언된 전역변수임을 알리는 키워드가 (extern) 이다.====================================================================2.다음 소스에서 에러를 찾아보고 수정하시오.a.int a = 3;auto int a = 10;동일한 블록에서 변수의 이름은 유일해야 한다.int a = 3;auto int b = 10;b.#include int main(void) {printf(“%d”, index);return 0;}int index = 10;전역 변수인 index를 이용하려면 extern 선언을 해야 한다.#include int main(void) {extern int index;printf(“%d”, index);return 0;}int index = 10;c.register auto int I = 10;키워드 register와 auto는 함께 이용될 수 없다.static int I = 10;d.static auto int I = 10;키워드 static과 auto는 함께 이용될 수 없다.static int I = 10;e.#include int main(void){int a = 20;printf(“%dn”, a);int b = 20;printf(“%dn”, b);return 0;}변수의 선언은 블록의 초기 부분에만 올 수 있다.#include int main(void){int a = 20;int b = 20;printf(“%dn”, a);printf(“%dn”, b);return 0;}====================================================================3.다음 프로그램의 출력 결과를 쓰시오.#include void a(void);int x = 1;int main(void){int m = 5;printf("%d : %dn", x++, m);{int m = 7;printf("%d : %dn", x++, m);}printf("%d : %dn", x++, m);a();printf("%d : %dn", x++, m);a();return 0;}void a(void){static int s;printf("%d : %dn", x++, s++);printf("%d : %dn", x++, s++);}====================================================================2.사용자와 프로그램이 가위, 바위, 보 게임을 할 수 있는 프로그램을 작성하시오.#include #include #include #define MAX 3char *name[] = {"가위", "바위", "보"};int systemgame();int decision(int sysme, int you);int main(void){int draw = 1;int sysme, you;srand( time(NULL) );while (draw) {printf("가위(0) 바위(1) 보(2) 중에서 하나 입력 -> ");scanf("%d", &you);if (!(0
12장 이해점검 풀이1.다음 괄호 부분을 채우시오.a.동일한 자료형을 연속된 저장공간에 할당하여 이용하는 자료구조를 (배열)이라 한다.b.배열의 각 원소를 참조하는데 이용되는 수를 (인덱스, 첨자)라 한다.c.배열 크기가 n이면 이용될 수 있는 첨자는 (0)에서부터 (n-1)까지다.d.한 줄의 표준입력을 문자열로 입력 받는 함수는 (gets())이다.e.문자열 저장 구조는 자료형 (문자)의 배열 구조를 이용한다.f.문자열의 저장 구조에서 항상 문자열의 마지막에는 (NULL( )) 문자가 들어있다.====================================================================2.다음 소스에서 에러를 찾아보고 수정하시오a.int a[3] = {1, 2, 3, 5};배열의 크기와 초기 값 원소의 수를 일치시키도록int a[4] = {1, 2, 3, 5};또는 int a[] = {1, 2, 3, 5}b.int b[3][];이차원 배열의 크기는 초기 값 설정이 없는 경우, 배열의 크기를 모두 기술해야 한다.int b[3][4];c.int c[2][] = (1, 2, 3, 4);이차원 배열의 크기는 초기 값을 저장할 때 첫 번째 크기를 생략할 수 있다.int c[][2] = {1, 2, 3, 4};d.int c[2][2][2];c = {1, 2, 3, 4};다차원 배열 선언에서 초기 값을 저장하는 경우, 선언과 저장을 분리할 수 없다.int c[2][2][2] = {1, 2, 3, 4};e.char ch[3] = “cpp”;printf(“%sn’”, ch);문자열의 마지막에는 o이 저장되어야 하므로 문자열의 크기는 실제 문자열이 저장되는 크기보다 1이 커야 한다.char ch[4] = “cpp”;or char ch[] = “cpp”;printf(“%sn’”, ch);f.char ch;gets(ch);문자열 입력 함수 gets()의 인자는 문자 포인터로서 문자 배열을 이용해야 한다. 이다.char ch[80];gets(ch);====================================================================3.다음 문장을 완성하시오.a.double 형 배열 real을 선언하면서 값 1.23, 4.89, 4.98을 초기화하는 문장double real[] = {1.23, 4.89, 4.98};b.문자열 “programmer”을 저장하는 char 형 배열 str 변수를 선언하는 문장char str[] = “programmer”;c.1차원 int 배열 ary 변수에서 세 번째 원소에 10을 저장하는 문장int ary[5];ary[2] = 10;d.int 형 이차원 배열 two[3][4]에서 메모리 순서로 5번째에 해당하는 원소를 출력하는 문장printf(“%dn”, two[1][0]);e.int 형 배열 cnt에서 원소 20개를 0으로 초기화하는 문장int cnt[20] = {0};1.20개의 수(0에서 9까지의 정수)를 입력 받아 가장 많이 입력 받은 빈도 수는 무엇이고, 몇 번인지 출력하는 프로그램을 작성하시오.#include void frqtest(int[]);int main(void) {int i, x[20];printf("0에서 9까지의 정수를 입력하시오.n");for(i=0; i= 0 && x[i]