반응형
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 매크로 함수가 모든 작업을 처리할 수있도록 작성했다.
반응형
'프로그래밍 > C, C++' 카테고리의 다른 글
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (11, 12, 13) (0) | 2020.08.04 |
---|---|
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 6 (7,8,9,10) (0) | 2020.08.01 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (24,25,26) (0) | 2020.07.26 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (19,20,21,22,23) (0) | 2020.07.26 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (13,14,15,16,17,18) (0) | 2020.07.25 |