Chapter09 복습 문제

milpy·2022년 5월 26일
0

C 기초 플러스 6판

목록 보기
13/18

01

실전달인자와 형식매개변수의 차이는 무엇인가?

실전잘인자는 함수를 호출랗때 전달하는 값이며,
형식매개변수는 함수를 선언할때 전달받을 값을 대입할 변수이다.

02

다음과 같이 지시되는 함수의 ANSI C 함수 헤더를 작성하라. 함수 몸체는 필요없고, 함수 헤더만 작성하라.

예시

a. donut()은 하나의 int형 전달인자를 사용하며, 그 수만큼 0을 출력한다.
b. gear()는 두 개의 int형 전달인자를 사용하며, int형을 리턴한다.
c. guess()는 전달인자 없이 int형을 리턴한다.
d. stuff_it()은 하나의 double형과 double형 변수의 주소를 전달인자로 사용하먀, 첫 번째 값을 그 위치에 저장한다.

답안

a. void donut(int );
b. int gear(int ,int );
c. int guess();
d. void stuff_it(double ,double * );

03

다음과 같이 지시되는 함수의 ANSI C 함수 헤더를 작성하라. 함수 몸체는 필요없고, 함수 헤더만 작성하라.

예시

a. n_to_char()는 하나의 int형 전달인자를 사용하며, char형을 리턴한다.
b. digits()는 하나의 double형 전달인자와 
   하나의 int형 전달인자를 사용하며, int형을 리턴한다.
c. witch()는 double형의 두 개의 전달인자를 사용하며, 
   double형 변수의 주소를 리턴한다.
d. random()은 전달인자를 사용하지 않으며, int형을 리턴한다.

답안

a. char n_to_char(int );
b. int digits(double ,int );
c. double witch(double ,double);
d. int random();

04

두 정수의 합을 리턴하는 함수를 고안하라.

#include <stdio.h>

int sum(int ,int);

int main(void)
{
    int n1, n2;

    do
    {
        printf("두 정수를 입력해주세요 : ");
    }
    while(scanf("%d %d", &n1, &n2) != 2);

    printf("(%d, %d)의 합은 : %d입니다.\n", n1, n2, sum(n1, n2));


    return 0;
}

int sum(int n1, int n2)
{
    return (n1 + n2);
}

05

두 double형 값의 합을 구하도록 문제 4에서 고안한 함수를 고치려면, 어디를 손봐야 하는가?

sum()의 리턴자료형과 매개변수 자료형, 
그리고 sum()을 호출할때 실전달인자인 n1과 n2의 자료형을 
double형으로 변환시켜야 한다.

06

두 개의 int형 변수 x와 y를 사용하고, 그 변수들의 값을 그들의 합과 차로 변경하는 alter()라는 이름의 함수를 고안하라.

void alter(int x, int y)
{
	int tx = x, ty = y;
    x = tx + ty;
    y = tx - ty;
	printf("(%d, %d)의 합은 %d입니다.\n", tx, ty, x);
	printf("(%d, %d)의 차는 %d입니다.\n", tx, ty, y);
}

07

다음과 같은 함수의 정의에서 잘못된 부분이 있는가?

예시

void salami(num)
{
	int num, count;
    for(count = 1; count <= num; num++)
    	printf(" 0 salami mio!\n");
}

답안

함수 헤더에 매게변수에는 변수명 앞에 자료형이 있어야 한다.

08

3개의 정수 전달인자 중에서 가장 큰 수를 리턴하는 함수를 작성하라.

int max(int n1, int n2, int n3)
{
	int max = (n1 > n2)? n1 : n2;
    max = (max > n3)? max : n3;
    
    return max;
}

09

출력이 다음과 같이 주어질 때,

1) 파일 복사		2) 파일 이동
3) 파일 삭제		4) 종료
해당하는 번호를 입력하시오(끝내려면 4):

**
a. 네 개의 번호로 제시되는 선택사항들의 메뉴를 표시하고,
그 중 하나를 선택할 것을 요청하는 함수를 작성하라.
(출력은 위와 같아야 한다.)

b. 하한과 상한 두 개의 int형 전달인자를 사용하는 함수를 작성하라.
이 함수는 입력에서 하나의 정수를 읽어야 한다.
그 정수가 범위를 벗어난다면, 사용자를 안내하여 새로운 정수를
입력할 수 있도록 (파트 "a"에서 작성한 함수를 사용하여)
메뉴를 다시 표시해야 한다.
상한과 하한의 범위에 속하는 정수가 입력되면,
그 함수는 입력된 값을 호출 함수에 리턴해야 한다.
비정수(noninteger)를 입력하면 함수가 quit 값인 4를
반환하도록 해야 한다.

c. 파트 "a"와 "b"에서 작성한 함수를 사용하는 최소의 프로그램을 작성하라.
여기서 '최소의'라는 말은 메뉴에 쵸시되어 있는 동작을 실제로 실행할 필요는 없다는 뜻이다. 다만 선택사항들을 보여주고, 유요한 응답을 얻어야 한다.
**

답안 a

void menu(void)
{
	int num;
    
	printf("1) 파일 복사		2) 파일 이동\n");
	printf("3) 파일 삭제		4) 종료\n");
    printf("해당하는 번호를 입력하시오(끝내려면 4):");
}

답안 b

int choose(int min, int max)
{
	int status;
	int num;
    
    menu();
    while((status = scanf("%d", &num)) == 1 
    || (num < min || num > max))
    {
    	if(status == 0)
        {
        	scanf("%*s");
        	return 4;
        }
        // else if(status == -1) return 0;
        else if(num < min || num > max)
        	menu();
    }
    return num;
}

답안 c

#include <stdio.h>

void menu(void);
int choose(int ,int);

int main(void)
{
	int status;
	while((status = choose(1, 4)) != 4)
    {
    	switch(status)
        {
        	case 1:
            	printf("파일을 복사했습니다.\n");
                break;
           	case 2:
            	printf("파일을 이동했습니다.\n");
                break;
         	case 3:
            	printf("파일을 삭제했습니다.\n");
                break;
        }
    }
    printf("종료!\n");

	return 0;
}

void menu(void)
{
	int num;
    
	printf("1) 파일 복사		2) 파일 이동\n");
	printf("3) 파일 삭제		4) 종료\n");
    printf("해당하는 번호를 입력하시오(끝내려면 4):");
}

int choose(int min, int max)
{
	int status;
	int num;
    
    menu();
    while((status = scanf("%d", &num)) == 1 
    || (num < min || num > max))
    {
    	if(status == 0)
        {
        	scanf("%*s");
        	return 4;
        }
        // else if(status == -1) return 0;
        else if(num < min || num > max)
        	menu();
    }
}

0개의 댓글