<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (1,2,3,4,5,6)

1.전처리기 지시자 #include 뒤에 나오는 <헤더 파일>과 "헤더 파일"의 차이를 설명하시오.

 

<헤더 파일>은 표준 라이브러리를 포함할 때 사용하고, "헤더 파일"은 표준 라이브러리 또는 사용자 정의 라이브러리를 포함할 때 사용한다.

 

 

2. #define을 이용해 x를 상수 10으로 정의하는 문장을 고르시오.

 

①#define x=10         ②#define x==10

③#define x 10          ④#define 10 x

 

3. 다음 문장의 의미를 설명하시오.

#define MIN(x, y) ((x < y) ? (x) : (y))​

x, y를 인수로 가지는 매크로 함수 MIN을 정의한다. x가 y보다 작으면 x를, 아니면 y를 반환한다.

 

4. 다음 프로그램의 에러를 찾아서 바로잡고 실행결과를 추정하시오.

#include <stdio.h>
#define MULT(x, y) x*y
#define MSG 안녕하세요?

int main(void)
{
    int a = 1, b = 2;
    printf("%s\n", MSG);
    printf("%d\n", MULT(2 + a, b));

    return 0;
}​

#include <stdio.h>
#define MULT(x, y) ((x)*(y))
#define MSG "안녕하세요?"

int main(void)
{
    int a = 1, b = 2;
    printf("%s\n", MSG);
    printf("%d\n", MULT(2 + a, b));

    return 0;
}​

MSG의 인자에 따옴표를 치지 않아 정의되지 않는다. 따옴표를 쳐야 한다.

MULT의 치환할 인자에 괄호를 치지 않아서 2+ a * b가 실행된다. 곱하기가 먼저 수행되어 4가 출력된다. 괄호를 쳐야 한다.

 

 

5.다음 프로그램의 실행 결과를 추정하시오.

 

#include <stdio.h>
#define SQUARE(x) ((x) * (x))

int main(void)
{
    int i = 3;
    printf("%d\n", SQUARE(++i));

    return 0;
}

제곱을 수행하는 매크로함수이다. SQUARE(++i)부분이 실행될 때 i가 전위연산자로 인해 4로 증가한 뒤 x가 치환된다. 연산을 수행할 때 ++이 한 번 더 실행되므로 5*5가 실행되어 25가 출력된다.

 

#include <stdio.h>
#define CONNECT(a,b) a ## b

int main(void)
{
    printf(CONNECT("Hello!", "world"));

    return 0;
}​

Hello!와 world가 합쳐져 Hello!world가 출력된다.

 

#include <stdio.h>
#define WELCOME(a,b) printf("Welcome!" #a "and" #b "\n");
int main(void)
{
    WELCOME(Kim, Lee);

    return 0;
}​

Welome!Kimandlee가 출력된다.

 

#include <stdio.h>
#define LEVEL 3
int main(void)
{
    #ifdef LEVEL
        #if (LEVEL >= 2)
            printf("고급자용 프로그램\n");
        #else 
            printf("중급자용 프로그램\n");
    #else
        printf("초급자용 프로그램\n");
    #endif

    return 0;
}​

고급자용 프로그램이라고 출력될 것 같지만 실행되지 않는다. 내부 #if가 endif가 없다. 아래처럼 짝을 맞춰야 한다.

#include <stdio.h>
#define LEVEL 3
int main(void)
{
    #ifdef LEVEL
        #if (LEVEL >= 2)
            printf("고급자용 프로그램\n");
        #else 
            printf("중급자용 프로그램\n");
        #endif
    #else
        printf("초급자용 프로그램\n");
    #endif

    return 0;
}​

 

 

6. 세 개의 정수를 입력받아 가장 큰 수를 구하는 프로그램을 매크로 함수 MAX(a,b,c)를 정의하여 작성하시오.

#include <stdio.h>
#define MAX(x, y, z) if(x > y && x > z) printf(">>가장 큰 수: %d\n", x); \
                        else if (y > z) printf(">>가장 큰 수: %d\n", y); \
                        else printf(">>가장 큰 수: %d\n", z);
int main(void)
{
    int a, b, c;
    printf("세 개의 수: ");
    scanf_s("%d %d %d", &a, &b, &c);
    MAX(a, b, c)

    return 0;
}

MAX 매크로 함수가 모든 작업을 처리할 수있도록 작성했다.