Chapter05 복습문제

milpy·2022년 4월 13일
0

C 기초 플러스 6판

목록 보기
6/18

01

모든 변수를 int형이라고 가정할 때, 다음 각 변수의 값은 얼마인가?

예시

a. x = (2 + 3) * 6;
b. x = (12 + 6)/2*3;
c. y = x = (2 + 3)/4;
d. y = 3 + 2*(x = 7/2);

답안

a. 30
b. 3
c. 1
d. 9

02

모든 변수를 int형이라고 가정할 때, 다음 각 변수의 값은 얼마인가?

예시

a. x = (int) 3.8 + 3.3;
b. x = (2 + 3) * 10.5;
c. x = 3 / 5 * 22.0;
d. x = 22.0 * 3 / 5;

답안

a. 6
b. 50
c. 0
d. 13

03

다음 식의 각각을 계산하라.

예시

a. 30.0 / 40.0 * 5.0;
b. 30.0 / (4.0 * 5.0);
c. 30 / 4 * 5
d. 30 * 5 / 4
e. 30 / 4.0 * 5
f. 30 / 4 * 5.0;

답안

a. 0
b. 1
c. 35
d. 37
e. 35
f. 35

04

다음 프로그램에서 잘못된 부분을 찾아라.

코드

int main(void)
{
	int i = 1,
    float n;
    printf("조심해! 한 무더기의 소수점을 가진 수들이 쏟아진다!\n");
    while(i<30)
    	n = 1 / i;
        printf(" %f ", n);
    printf("이제 끝이다!\n");
    return;
}

답안

문법오류(신택스 에러)
	int i = 1, => int i = 1; [문장의 끝은 세미콜론]

논리오류(시맨틱 에러) [주관!]
	printf(" %f ", n); 문장은 들여쓰기를 했지만,
    	while문장에 포함되지 않는다. [중괄호({}) 사용]
    while문장의 종료조건은 있지만, 
    	종료를 하기위해서는 i값이 변화되어야 하는데,
        i값을 변환 시키는 문장이 없다.
    n = 1 / i; 문장은 i값이 1이 아닌,
    	참의 데이터를 가지는 동안 항상 같은 값을 표현한다.
        ex) 1/2==0, 1/3==0, 1/4==0 

05

다음은 리스트 5.9를 조금 다르게 설계한 프로그램이다.
리스트 5.9에 있는 두 개의 scanf()문을 하나의 scanf()문으로 대체함으로써 코드를 단순하게 하려고 시도한 것으로 보인다. 무엇이 이 설계를 리스트 5.9보다 못하게 만들었을까?

예시

#include <stdio.h>
#define S_TO_M 60
int main(void)
{
	int sec, min, left;
    
    printf("이 프로그램은 초 수로만 주어지는 시간을 ");
    printf("분 수와 초 수로 변환한다.\n");
    printf("초 수를 입력하시오.\n");
    printf("프로그램을 종료하려면 0을 입력하시오.\n");
    while(sec > 0) {
    	scanf("%d", &sec);
        min = sec/S_TO_M;
        left = sec % S_TO_M;
        printf("%d초는 %d분, %d초 입니다.\n", sec, min, left);
        printf("다음 입력은?\n");
    }
    printf("안녕!\n");
    return 0;
}

답안

첫 실행시 sec변수의 값이 초기화 되어있지 않으며, 
scanf()문에 0을 입력하여도 while()문을 실행한다.

06

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

코드

#include <stdio.h>
#define FORMAT "%s! C는 멋지다.\n"
int main(void)
{
	int num = 10;
    
    printf(FORMAT, FORMAT);
    printf("%d\n", ++num);
    printf("%d\n", num++);
    printf("%d\n", num--);
    printf("%d\n", num);
    
    return 0;
}

결과

%s! C는 멋지다.
! C는 멋지다.
11
11
12
11

07

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

코드

#include <stdio.h>
int main(void)
{
	char c1, c2;
    int diff;
    float num;
    
    c1 = 'S';
    c2 = 'O';
    diff = c1 - c2;
    num = diff;
    printf("%c%c%c:%d %3.2f\n", c1, c2, c1, diff, num);
    return 0;
}

결과

SOS:4 4.00

08

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

코드

#include<stdio.h>
#define TEN 10
int main(void)
{
	int n = 0;
	while (n++ < TEN)
		printf("%5d", n);
	printf("\n");
	return 0;
}

결과

    1    2    3    4    5    6    7    8    9   10

09

문제 8.의 프로그램이 뮨저 a부터 g까지 출력하도록 수정하라.

코드

#include<stdio.h>
#define TEN 'g'
int main(void)
{
	char n = 'a' - 1;
	while (n++ < TEN)
		printf("%5c", n);
	printf("\n");
	return 0;
}

답안

    a    b    c    d    e    f    g

10

다음 각 부분이 프로그램의 일부라면 출력결과는?

예시

a.
	int x = 0;
    while(++x < 3)
    	printf("%4d", x);

b.
	int x = 100;
    
    while(x++ < 103)
    	printf("%4d\n", x);
        printf("%4d\n", x);

c.
	char ch = 's';
    
    while(ch < 'w')
    {
    	printf("%c", ch);
        ch++;
    }
    printf("%c\n", ch);

답안

a.
	  1   2%

b.
  101
  102
  103
  104

c.
  stuvw

11

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

코드

#define MESG "COMPUTER BYTES DOG"
#include<stdio.h>
int main(void)
{
	int n = 0;
    
    while (n < 5)
    	printf("%s\n", MESG);
        n++;
    printf("이제 끝이다.\n");
    return 0;
}

결과

COMPUTER BYTES DOG
COMPUTER BYTES DOG
COMPUTER BYTES DOG
(무한반복)
.
.
.

12

다음과 같은 일을 하는 (또는 다음과 같은 부작용을 일으키는) 문장을 작성하라

예시

a. 변수 x를 10만큼 증가시킨다.
b. 변수 x를 1만큼 증가시킨다.
c. a와 b의 합을 2배로 하여 c에 대입한다.
d. a에 b의 2배를 더해서, c에 대입한다.

답안

a. x = x + 10;
b. x++
c. c = 2 * (a + b)
d. c = a += (b * 2)

13

다음과 같은 일을 하는 문장을 작성하라.

예시

a. 변수 x를 1만큼 감소시킨다.
b. n을 k로 나눈 나머지를 m에 대입한다.
c. q를, b에서 a를 뺀 차로 나눈 결과를 p에 대입한다.
d. a와 b의 합을, c와 d의 곱으로 나눈 결과를 x에 대입한다.

답안

a. x--;
b. m = n / k;
c. p = q / (b - a);
d. x = (a + b) / (c * d);

0개의 댓글