Chapter06 복습문제

milpy·2022년 4월 20일
0

C 기초 플러스 6판

목록 보기
8/18

01

각 라인의 실행이 끝났을때 quack의 값은 얼마인가?

예시 + (답안)

int quack = 2; 	(2)
quack += 5;		(7)
quack *= 10;	(70)
quack -= 6;		(64)
quack /= 8;		(8)
quack %= 3;		(2)

02

value가 int형 값으로 주어질 때, 다음 루프는 무엇을 출력하는가?

예시

for (value = 36; value > 0; value /= 2)
	printf("%3d", value);

답안

 36 18  9  4  2  1

value가 int형이 아니라 double형 값이면, 무슨 일이 일어나는가?

답안

printf("%3f", value);으로 가정했을때
부동소수점까지 출력하므로 1이하로 값이 내려가 언더플로어 발생할때까지 반복된다.

03

다음과 같은 검사 조건을 나타내라.

예시

a. x는 5보다 크다.
b. scanf()가 (x라는) double형 변수에 하나의 수를 읽으려다 실패한다.
c. x는 값 5를 가진다.

답안

a. x > 5
b. scanf("%lf", &x) == 0
c. x = 5;

04

다음과 같은 검사 조건을 나타내라.

예시

a. scanf()가 하나의 정수값을 읽는데 성공한다.
b. x는 5가 아니다.
c. x는 20 또는 그보다 크다.

답안

a. scanf("%d", &x) == 1
b. x != 5
c. x >= 20

05

다음 프로그램은 완벽하지 않다고 생각된다. 에러를 찾을 수 있겠는가?

예시 + (답안 == 주석)

#include <stdio.h>

int main(void)
{
	int i, j, list(10); // 배열의 길이 지정은 대괄호([)를 사용한다.
    
    for(i = 1, i <= 10, i++) // for(초기문; 조건문; 증감문) 으로 구성된다.
    {
    	list[i] = 2 * i + 3;
        
        // for(초기문; 조건문; 증감문) 으로 구성된다. + 무한반복문
        for(j = 1, j >=1, j++) 
        	printf(" %d", list[j]);
        printf("\n");
    // (주관) 여기에 for문의 끝을 알리는 } 문자가 와야 할 것이다.
}

06

중첩 루프를 사용하여 다음과 같은 패턴을 출력하는 프로그램을 작성하라.

#include <stdio.h>

int main(void)
{
	for(int q=0; q < 4; q++)
    {
  		for(int w=0; w < 8; w++)
        	printf("$");
        printf("\n");
	}
    
	return 0;
}

07

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

예시

a.
	#include <stdio.h>
    
    int main(void)
    {
    	int i = 0;
        
        while (++i < 4)
        	printf("Hi! ");
        do
        	printf("Bye! ");
        while (i++ < 8);
        
        return 0;
    }

b.
	#include <stdio.h>
    
    int main(void)
    {
    	int i;
        char ch;
        
        for(i = 0, ch = 'A'; i < 4; i++, ch += 2 * i)
        	printf("%c", ch);
        
        return 0;
    }

답안

a. Hi! Hi! Hi! Bye! Bye! Bye! Bye! Bye!

b. ACGM

08

입력이 Go west, young man!으로 주어졌을 때, 다음 프로그램들은 각각 무엇을 출력하는가?
(!는 ASCII 코드에서 스페이스 문자 다음에 온다.)

예시

a.
	#include <stdio.h>
    
    int main(void)
    {
    	char ch;
        
        scanf("%c", &ch);
        while (ch != 'g')
        {
        	printf("%c", ch);
            scanf("%c", &ch);
        }
        
        return 0;
    }

b.
	#include <stdio.h>
    
    int main(void)
    {
    	char ch;
    
    	scanf("%c", &ch);
     	while (ch != 'g')
        {
        	printf("%c", ++ch);
            scanf("%c", &ch);
        }
        
        return 0;
    }

c.
	#include <stdio.h>
    
    int main(void)
    {
    	char ch;
        
        do
        {
        	scanf("%c", &ch);
            printf("%c", ch);
        } while (ch != 'g');
        
        return 0;
   	}

d.
	#include <stdio.h>
    
    int main(void)
    {
    	char ch;
        
        scanf("%c", &ch);
        for (ch = '$'; ch != 'g'; scanf("%c", &ch))
        	putchar(ch);
            
        return 0;
    }

답안

a. Go west, youn

b. Hp!xftu-!zpvo

c. Go west, youn

d. Go west, youn

09

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

예시

#include <stdio.h>

int main(void)
{
	int n, m;
    
    n = 30;
    while (++n <= 33)
    	printf("%d\\", n);
	
    n = 30;
    do
    	printf("%d\\", n);
	while (++n <= 33);
    
    printf("\n***\n");
    
    for(n = 1; n * n < 200; n +=4)
    	printf("%d\n", n);

	printf("\n***\n");
    
    for(n = 2, m = 6; n < m; n *= 2, m += 2)
    	printf("%d %d\n", n, m);

	printf("\n***\n");

	for(n = 5; n > 0; n--)
   	{
    	for(m = 0; m <= n; m++)
        	printf("=");
        printf("\n");
	}
    
    return 0;
}

답안

31\32\33\30\31\32\33\
***
1
5
9
13

***
2 6
4 8
8 10

***
======
=====
====
===
==

10

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

double mint[10];

예시 + (답안)

a. 이 배열의 이름은 무엇인가. (mint)
b. 이 배열은 몇개의 원소를 가지고 있는가? (10)
c. 각 원소에는 어떤 종류의 값을 저장할 수 있는가? (double형 부동소수점 수)
d. 이 배열과 함께 scanf()를 사용할 때, 다음 중 정확한 것은 어느 것인가?
	i. 	 scanf("%lf", mint[2]) 		(X)[주소연산자X]
    ii.  scanf("%lf", &mint[2])		(O)
    iii. scanf("%lf", &mint)		(X)[배열 이름은 주소를 가리킴]

11

노아 씨는 2의 배수 단위로 카운트 하는 것을 좋아한다. 그래서 배열을 하나 만들고, 그 배열을 정수 2, 4, 6, 8 등으로 채우는, 다음과 같은 프로그램을 작성했다. 그런데 이 프로그램에서 무엇이 잘못되었을까?

예시

#include <stdio.h>

#define SIZE 8

int main(void)
{
	int by_two[SIZE];
    int index;
    
    for (index = 1; index <= SIZE; index++)
    	by_twos[index] = 2 * index;

	for (index = 1; index <= SIZE; index++)
    	printf("%d ", by_twos);
	printf("\n");

	return 0;
}

답안

선언할 때 0부터 배열길이-1까지 메모리를 할당한다.
그러니 사용할때도 0부터 배열길이-1까지 사용해야 한다. 
그러나 위 소스는 그 규칙을 어겨 잘못된 프로그램이 됬다.

12

long형 값을 리턴하는 함수를 작성하려고 한다. 함수 정의에 무엇을 포함시켜야 하는가?

답안

long func(void) // 반환형
{
	long value;
	reutrn value; // return long형 값
}

13

int형 전달인자를 하나 전달받아, 그 값의 제곱을 long형 값으로 리턴하는 함수를 정의하라.

답안

long square(int num)
{
	long value = num * num;
    
    return value;
}

14

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

예시

#include <stdio.h>

int main(void)
{
	int k;
    
    for (k = 1, printf("%d: 안녕!\n", k); printf("k = %d\n", k),
    	k * k < 26; k += 2, printf("이제 k는 %d\n", k) )
        	printf("루프 몸체에서 k는 %d\n", k);

	return 0;
}

답안

1: 안녕!
k = 1
루프 몸체에서 k는 1
이제 k는 3
k = 3
루프 몸체에서 k는 3
이제 k는 5
k = 5
루프 몸체에서 k는 5
이제 k는 7
k = 7

0개의 댓글