Chapter07 복습문제

milpy·2022년 4월 26일
0

C 기초 플러스 6판

목록 보기
10/18

01

다음 중 어느 표현식이 true이고, 어느 표현식이 false인지 결정하라.

예시 + //답안

a. 100 > 3 && 'a' > 'c' // 거짓(false)
b. 100 > 3 || 'a' > 'c' // 참  (true)
c. !(100 > 3) 			// 거짓(false)

02

다음과 같은 조건을 각각 나타내는 표현식을 작성하라.

예시

a. number는 90보다 크거나 같지만 100보다는 작다.
b. ch는 문자 q도 아니고 문자 k도 아니다.
c. number는 1부터 9까지의 번위에 있지만 5는 아니다.
d. number는 1과 9까지의 범위에 있지 않다.

답안

a. number >= 90 && number < 100
b. ch != 'q' && ch != 'k'
c. number >= 1 && number <= 9 && number != 5
d. !(number >= 1 && number <= 9)

03

다음 프로그램은 불필요하게 복잡한 관계 표현식을 사용하고 있으며, 몇 가지 명백한 에러를 가지고 있다. 프로그램을 간결하게 고치고 에러도 수정하라.

예시

#include <stdio.h>

int main(void)
{
	int weight, height;

	scanf("%d, weight, height);

	if(weight < 100 && height > 64)
		if(height >= 72)
			printf("몸무게에 비해 키가 너무 크네요.\n");
		else if(height < 72 && > 64)
			printf("몸무게에 비해 키가 조금 크네요.\n");
    else if(weight > 300 && !(height <= 300)
    		&& height < 48)
    	if( !(height >= 48) )
        printf("몸무게에 비해 키가 아주 작네요.\n");
    else 
    	printf("이상적인 몸무게 입니다.\n");
	
	return 0;
}

딥안

#include <stdio.h>

int main(void)
{
	int weight, height;

	scanf("%d %d", &weight, &height);

	if(weight < 100)
	{
		if(height >= 72)
			printf("몸무게에 비해 키가 너무 크네요.\n");
		else if(height < 72 && height > 64)
			printf("몸무게에 비해 키가 조금 크네요.\n");
	}
	else if(weight > 300)
	{
    		if( !(height >= 48) )
        		printf("몸무게에 비해 키가 아주 작네요.\n");
	}
	else
		printf("이상적인 몸무게 입니다.\n");
	
	return 0;
}

04

다음과 같은 표현식들의 값은 각각 얼마인가?

예시

a. 5 > 2
b. 3 + 4 > 2 && 3 < 2
c. x >= y || y > x
d. d = 5 + (6 > 2)
e. 'X' > 'T' ? 10 : 5
f. x > y ? y > x : x > y

답안

a. true
b. false
c. true
d. 6
e. 10
f. false

05

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

예시

#include <stdio.h>

int main(void)
{
	int num;

	for(num = 1; num <= 11; num++)
	{
		if(num % 3 == 0)
			putchar('$');
		else
			putchar('*');
			putchar('#');
		putchar('%');
	}
	putchar('\n');

	return 0;
}

답안

*#%*#%$#%*#%*#%$#%*#%*#%$#%*#%*#%

06

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

예시

#include <stdio.h>

int main(void)
{
	int i = 0;
	while(i < 3)
	{
		switch(i++)
		{
			case 0: printf("fat ");
			case 1: printf("hat ");
			case 2: printf("cat ");
			default: printf("Oh no!");
		}
		putchar('\n');
	}

	return 0;
}

답안

fat hat cat Oh no!
hat cat Oh no!
cat Oh no!

07

다음 프로그램은 무엇이 잘못되었을까?

예시 + //답안

#include <stdio.h>

int main(void)
{
	char ch;
    int lc = 0;
    int uc = 0;
    int oc = 0;
    
    while((ch = getchar()) != '#')
    {
    	if('a' <= ch >= 'z') //관계연산자는 2개의 피연산자를 가진다.('a' <= ch && ch >= 'z'),
       		lc++;			//그러므로 논리연산자를 사용해 나눠야 한다.
            
        else if( !(ch < 'A') || !(ch > 'Z') // if문의 조건문을 닫는 괄호가 없다.
        	uc++;
        oc++;
    }
    printf(소문자 %d개, 대문자 %d개, 기타 문자 %d개\n, // "문자가 없다.
    	lc, uc, oc);
        
    return 0;
}

08

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

예시

#include <stdio.h>

int main(void)
{
	int age = 20;

	while(age++ <= 65)
	{
		if((age % 20) == 0)
			printf("%d세입니다. 승진할 나이입니다.\n", age);

		if(age = 65)
			printf("%d세입니다. 퇴직할 나이입니다.\n", age);
	}

	return 0;
}

답안

40세입니다. 승진할 나이입니다.
60세입니다. 승진할 나이입니다.
65세입니다. 퇴직할 나이입니다.
.
.
.
65세입니다. 퇴직할 나이입니다.(무한반복)

답안2

만약 if(age = 65)의 라인을 if(age == 65)로 수정했을때,

40세입니다. 승진할 나이입니다.
60세입니다. 승진할 나이입니다.
65세입니다. 퇴직할 나이입니다.

09

입력이 아래와 같이 주어졌을때, 다음 프로그램은 무엇을 출력하는가?

예시

q
c
h
d
#include <stdio.h>

int main(void)
{
	char ch;

	while ((ch = getchar()) != '#')
	{
		if(ch == '\n')
			continue;
		printf("1단계\n");
		
		if(ch == 'c')
			continue;
		else if(ch == 'b')
			break;
		else if(ch == 'h')
			goto laststep;
		printf("2단계\n");

	laststep: printf("3단계\n");
	}
	printf("종료!\n");

	return 0;
}

답안

q
1단계
2단계
3단계
c
1단계
h
1단계
3단계
b
1단계
종료!

10

continue나 goto문을 사용하지 않고도 같은 행동을 보이도록 문제 9의 프로그램을 수정하라.

#include <stdio.h>

int main(void)
{
	char ch;
	while ((ch = getchar()) != '#')
	{
		if(ch != '\n')
		{
			printf("1단계\n");

			if(ch == 'b')
				break;
			else if(ch != 'c')
			{
				switch(ch)
				{
					case 'h':
						printf("3단계\n");
						break;
					default:
						printf("2단계\n");
						printf("3단계\n");
						break;
				}
			}
		}
	}
	printf("종료!\n");

	return 0;
}

0개의 댓글