Chapter10 복습 문제

milpy·2022년 6월 16일
0

C 기초 플러스 6판

목록 보기
15/18

01

다음 프로그램은 무엇을 출력하겠는가?

코드

#include <stdio.h>

int main(void)
{
	int ref[] = {8,4,0,2};
	int *ptr;
	int index;

	for(index = 0, ptr = ref; index < 4; index++, ptr++)
		printf("%d %d\n", ref[index], *ptr);

	return 0;
}

답안

8 8
4 4
0 0
2 2

02

문제 1에서, ref는 몇 개의 원소를 가지고 있는가?

4개

03

문제 1에서, ref는 무엇의 주소인가?

ref[0]의 주소

04

각각의 경우에 * ptr와 * (ptr + 2)의 값은 무엇인가?

예시

a. int *ptr;
   int torf[2][2] = {12, 14, 16};
   ptr = torf[0];

b. int *ptr;
   int fort[2][2] = { {12}, {14, 16} };
   ptr = fort[0];

답안

a. *ptr : 12
   *(ptr +2) : 16

b. *ptr : 12
   *(ptr + 2) : 14

05

각각의 경우에 **ptr와 **(ptr + 1)의 값은 무엇인가?

예시

a. int (*ptr)[2];
   int torf[2][2] = {12, 14, 16};
   ptr = torf;

b. int (*ptr)[2];
   int fort[2][2] = { {12}, {14, 16} };
   prt = fort;

답안

a. **ptr : 12
   **(ptr + 1) : 16

b. **ptr : 12
   **(ptr + 1) : 14

06

다음과 같은 선언이 있다고 가정하자.

int grid[30][100];

a. grid[22][56]의 주소를 한 가지 방법으로 표현하라.

b. grid[22][0]의 주소를 한 가지 방법으로 표현하라.

c. grid[0][0]의 주소를 한 가지 방법으로 표현하라.

a. printf("%p\n", &grid[22][56]);
b. printf("%p\n", &grid[22][0]);
c. printf("%p\n", &grid[0][0]);

07

a. digits는 int형 10개짜리 배열이다.

b. rates는 float형 6개짜리 배열이다.

c. mat는 정수 5개짜리 배열을 3개 가지고 있는 배열이다.

d. psa는 char형을 가리키는 포인터를 20개 가지고 있는 배열이다.

e. psr는 char형 20개짜리 배열을 가리키는 포인터이다.

a. int digit[10];
b. float rates[6];
c. int mat[3][5];
d. char (*psa)[20];
e. char *(pas[20]);

08

a. int형 6개짜리 배열을 선언하고 각 값을 1, 2, 3, 4, 8, 16, 32로 초기화하라.

b. 배열 표기를 사용하여 "a"파트에서 만든 배열의 세 번째 원소(값 4)를 나타내라.

c. C99/C11 규칙이 적용된다고 가정하고, int형 100개짜리 배열을 선언하고 마지막 원소가 -1이 되도록 초기화하라. 다른 원소들에 대해서는 고민하지 마라.

d. C99/C11 규칙이 유효하다는 가정하에 int형 100개짜리 배열을 선언하고 원소 5, 10, 11, 12, 3이 101이 되도록 초기화하라. 다른 원소들은 무시하라.

a. int array[6] = {1, 2, 4, 8, 16, 32};
b. array[2]
c. int array[100] = { [99] = -1 };
d. int array[100] = { [5] = 101, [10] = 101, 101, 101, [3] = 101 };

09

10개의 원소를 가진 배열의 인덱스 범위(index range) 무엇인가?

0 ~ 9

10

다음과 같은 선언이 있다고 가정하자.

float rootbeer[10], things[10][5], *pf, value = 2.2;
int i = 3;

다음 각 문장들이 유효한지 유효하지 않은지 판별하라.

a. rootbeer[2] = value;

b. scanf("%f", &rootbeer);

c. rootbeer = value;

d. printf("%f", rootbeer);

e. things[4][4] = rootbeer[3];

f. things[5] = rootbeer;

g. pf = value;

h. pf = rootbeer;

답안

a. O
b. X
c. X
d. X
e. O
f. X
g. X
h. O

11

int형의 800 X 600 배열을 선언하라.

int array[800][600];

12

다음과 같은 세 개의 배열 선언이 있다고 가정하자.

double trots[20];
short clops[10][30];
long shots[5][10][15];

a. trots를 처리하는 전통적인 void형 함수와, VLA를 사용하는 C 함수에 대한 함수 프로토 타입과 함수 를 각각 나타내라

b. clops를 퍼리하는 전통적인 void형 함수와, VLA를 사용하는 C 함수에 대한 함수 프로토 타입과 함수 를 각각 나타내라

c. shots를 처리하는 전통적인 void형 함수와, VLA를 사용하는 C 함수에 대한 함수 프로토 타입과 함수 를 각각 나타내라

답안

a.
	void set_trots(int , double [*]);
    set_trors(trots, 20);
b.
	void set_clops(int , int , short [*][*]);
    set_clops(10, 30, clops);
c.
	void set_shots(int , int , int , long [*][*][*]);
    set_shots(5, 10, 15, shots);

13

다음과 같은 두 개의 함수 프로토타입이 있다고 가정하자.

void show(double ar[], int n);
void show2(double ar2[][3], int n);

답안

a. show({8, 3, 9, 2}, 4);
b. show2({ {8, 3, 9}, {5, 4, 1} }, 2);

0개의 댓글