Chapter4 복습문제

milpy·2022년 3월 31일
0

C 기초 플러스 6판

목록 보기
4/18

01

리스트 4.1(talkback.c)을 다시 실행하라. 이번에는 이름을 요구할때, 성과 이름을 분리하여 입력시켜라. 무슨 일이 일어나는가? 그 이유는 무엇인가?

나눠서 입력하면 이름을 요구하는 scanf("%s", name); 문장에 성이들어가며,
파운드 값을 요구하는 scanf("%f", &weight); 문장에 이름이 입력되는데,
실수형을 요구하는 %f 포맷 지정자에 문자열이 들어가서
비정상적인 동작을 하게 됩니다. 
(필자의 PC에서는 0이 입력되었습니다.)

02

아래의 각 예제들을 완전한 프로그램의 일부라고 가정하자. 그렇다면 각각 무엇을 출력하겠는가?

예시

a. printf("그는 그 그림을 $%2.2f에 팔았다.\n", 2.2345e2);
b. printf("%c%c%c\n", 'H', 105, '\41');
c. #define Q "그의 햄릿은 저속하지 않고 재미있었다."
	printf("%s\n는 %d 문자이다.\n", Q, strlen(Q));
d. printf("%2.2e은 %2.2f과 같으냐?\n", 1202.0, 1201.0);

답안

a. 그는 그 그림을 $223.45에 팔았다.
b. Hi!
c. 그의 햄릿은 저속하지 않고 재미있었다.
   는 37 문자이다.
d. 1.20e+003은 1201.00과 같으냐?

03

문제 2c.에서, 문자열 Q를 큰따옴표로 감싼 상태로 출력하려면 무엇을 변경해야 하는가?

( "문자를 츨력하기위해 \"를 사용한다. )
#define Q "그의 햄릿은 저속하지 않고 재미있었다."
printf("\"%s\"\n는 %d 문자이다.\n", Q, strlen(Q));

04

다음과 같은 프로그램에서 에러를 찾아라.

예시 + 답안( 주석 '//' )

define B 거짓말	// #define "거짓말"
define X 10		// #define
main(int)	// 리턴타입 main(자료형 변수명)
{
	int age;
    char name;
    
    printf("이름이 뭡니까?");
    
    scanf("%s", name); // char형에는 문자열을 담을수 없다.
    
    printf("좋아요, %c 씨, 나이는 얼마죠?\n", name); // 
    
    scanf("%f", age); 
    // %f(실수) => %d(정수), age => &age(주소연산자)
    
    xp = age + X; // xp변수는 선언되지 않음
    
    printf("%s! 최소한 %d세는 되어 보이는데.\n", 1201.0, 1201.0); 
    // %s에 1201.0을 넣을 수 없음, %d에 실수(1201.0)을 넣을수 없음
    
    return 0;
}

05

프로그램이 다음과 같이 시작한다고 가정하자.

#define BOOK "전쟁과 평화"
int main(void)
{
	float cost = 12.99;
    float percent = 80.0;
    
//답안
    printf("신간 \"%s\"를 $%.2f에 드립니다.\n", BOOK, cost);
    printf("그것은 정가의 %.0f%% 가격입니다.\n", percent);
    
    return 0;
}
//

06

다음의 각 내용을 출력하려면 어떤 변환 지정을 사용해야 하는가?

예시

a. 그 수를 나타내는 자릿수들의 개수와 정확히 같은 필드를 가지는 10진 정수
b. 필드 너비 4에 8A 포맷의 16진 정수
c. 필드 너비 10에 232.246 포맷의 부동소수점 수
d. 필드 너비 12에 2.33e+002 포맷의 부동소수점 수
e. 필드 너비 30에 왼쪽으로 정렬된 문자열

답안

a. %d
b. %4X
c. %10.3f
d. %12.2e
e. %-30s

07

다음의 각 내용을 출력하려면 어떤 변환 지정을 사용해야 하는가?

예시

a. 필드 너비 15에 unsigned long형 정수
b. 필드 너비 4에 0x8a 포맷의 16진 정수
c. 필드 너비 12에 왼쪽으로 정렬된 2.33E+02 포맷의 부동소수점 수
d. 필드 너비 10에 +232.346 포맷의 부동소수점 수
e. 8문자 필드 너비 문자열의 처음 8문자

답안

a. %15ul
b. %#4x
c. %12.2E
d. %10.3f
e. %8.8s

08

다음의 각 내용을 출력하려면 어떤 변환 지정을 사용해야 하는가?

예시

a. 필드 너비 6에 최소 4자릿수를 가지는 10진 정수
b. 필드 너비가 전달인자 리스트에 주어지는 8진 정수
c. 필드 너비 2에 하나의 문자
d. 그 수를 나타내는 숫자들의 개수와 
	정확히 같은 필드 너비를 가지는 +3.13 포맷의 부동소수점 수
e. 필드 너비 7에 왼쪽으로 정렬된 처음 5문자

답안

a. %6.4d
b. %o
c. %2c
d. %.2f
e. %-7.5s

09

다음과 같은 각 입력 라인에 대해, 그것을 읽는 scanf()문을 작성하라. 또한 그 문장에 사용되는 변수 또는 배열이 있다면 선언하라.

예시

a. 101
b. 22.32 8.34E-09
c. linguini
d. catch 22
e. catch 22 (catch를 건너뛴다)

답안

a.	int i;
	scanf("%d", &i);
	printf("%d\n", i);
	
b.	float f1;
	double f2;
	scanf("%f %e", &f1, &f2);
	printf("%f %e \n", f1, f2);
	
c.	char str[10];
	scanf("%s", str);
	printf("%s\n", str);
	
d.	char str[10];
	int i;
	scanf("%s %d", str, &i);
	printf("%s %d\n", str, i);
	
e.	int i;
	//while( !scanf("%d", &i) ) getchar();
    scanf("%*s %d", &i)
	printf("%d\n", i);

10

화이트스페이스(whitespace)란 무엇인가

여백을 주는 문자
예) \n	Tab	   space

11

다음 문장에서 잘못된 점은 무엇이고, 이것을 어떻게 수정할 수 있을까?

예시

printf("The double type is %z bytes..\n", sizeof (double));

답안

sizeof의 반환타입이 size_t이라서 %zd이다.
printf("The double type is %zd bytes..\n", sizeof (double));

12

프로그램에서 중괄호 대신 괄호를 사용하려고 다음과 같이 정의했다고 가정하자. 어떤 일이 벌어지는가?

함수를 선언하거나 호출할때 사용하는 괄호["()"]들 까지도 중괄호["{}"]로 변환되어 정상적인 동작이 불가능하다.

0개의 댓글