Chapter 4復習問題


01


インベントリ4.1を再実行します(フィードバック.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


に質問で、文字列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


白空間とは
여백을 주는 문자
예) \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


プログラムが括弧ではなく括弧を使用すると仮定し、次のように定義します.何が起こるの?
함수를 선언하거나 호출할때 사용하는 괄호["()"]들 까지도 중괄호["{}"]로 변환되어 정상적인 동작이 불가능하다.