C primer plus第6版第6版004章第4章復習問題中国語

5382 ワード

1.プログラムリスト4.1を再実行しますが、名前を入力する必要がある場合は、名前と姓を入力し、真ん中にスペースを残して、何が起こるか見てください.
#include 
#include 
#define DENSITY 62.4 // human density in lbs per cu ft

int main(){
 
    float weight, volume;
    int size, letters;
    char name[40]; // name is an array of 40 chars
    
    printf("Hi! What's your first name?
"); scanf("%s", name); printf("%s, what's your weight in pounds?
", name); scanf("%f", &weight); size = sizeof name; letters = strlen(name); volume = weight / DENSITY; printf("Well, %s, your volume is %2.2f cubic feet.
",name, volume); printf("Also, your first name has %d letters,
",letters); printf("and we have %d bytes to store it.
", size); return 0; }

プログラムが正常に動作しない場合、最初のscanf()文はユーザーが入力した名前のみを読み出し、ユーザーが入力した姓はバッファに残ります(バッファは入力を格納するための一時記憶領域です).次のscang()文は、バッファが重量を検索するように入力したときに、前回の読み込みが終了した場所から読み取りを開始します.これによりバッファに残っている姓を体重として読み取ることになり、sacnf()の読み取りに失敗する.一方、名前の入力を要求されたときにLasha 114を入力すると、プログラムは144をユーザの体重とする(ユーザは体重の入力を促す前に144を入力しているが)
2.次の例が完全なプログラムの一部であると仮定します.印刷結果はそれぞれ何ですか.
a.

printf("He sold the painting for $%2.2f.
", 2.345e2); :He sold the painting for $234.50. b. printf("%c%c%c
", 'H', 105, '\41'); '' :Hi! c. #define Q "His Hamlet was funny without being vulgar." printf("%s
has %d characters.
", Q, strlen(Q)); : His Hamlet was funny without being vulgar. has 42 characters. d. printf("Is %2.2e the same as %2.2f?
", 1201.0, 1201.0); :Is 1.20e+03 the same as 1201.00?

3第2題のCで、二重引用符を含む文字列Qを出力する場合、どのように修正しますか?
    #define Q "His Hamlet was funny without being vulgar."
    
    printf("\"%s\"
has %d characters.
", Q, strlen(Q));

4次のプログラムの中の間違いを探し出して、次のこれはすでに私に直されました
#include   //          
define B "booboo"   
'' #define X 10   
int main() { 
int age; 
int xp;
char name[40];  
'' printf("Please enter your first name.
"); scanf("%s", name); printf("All right, %s, what's your age?
", name); scanf("%d", &age); xp = age + X; printf("That's a %s! You must be at least %d.
", B, xp); retrun 0; }

5.プログラムの先頭がこうであると仮定すると、
#define BOOK "War and Peace" 
int main(void) { 
    float cost =12.99; 
    float percent = 80.0;

BOOK、cost、percentを使用したprintf()文を作成し、次の内容を印刷してください.
This copy of "War and Peace" sells for $12.99.

That is 80% of list.

文はprintf("This copy of"%s"sells for$%2 f.That is%.1 f%%of list",BOOK,cost,percent);
6.次の内容を印刷するには、それぞれどのような変換説明を使用しますか?
  • フィールド幅がビット数と同じ10進数整数%d
  • 8 Aのような形で、フィールド幅が4の16進数整数%4 x
  • 232.346、フィールド幅10の浮動小数点数%1.3 f
  • のような形
  • 2.33 e+002、フィールド幅12の浮動小数点数%12.2 e
  • のような形
  • フィールド幅30、左揃え文字列%-30 s
  • 7.次の各項目を印刷するには、それぞれどのような変換説明を使用しますか?
  • a. An unsigned long integer in a field width of 15 %15lu
  • b. A hexadecimal integer in the form 0x8a in a field width of 4 %#4x
  • c. A floating-point number in the form 2.33E+02 that is left-justified in a field width of 12 %-12.2E
  • d. A floating-point number in the form +232.346 in a field width of 10 %+10.3f
  • e. The first eight characters of a string in a field eight characters wide %8.8s

  • 8. What conversion specification would you use to print each of the following?
  • a. A decimal integer having a minimum of four digits in a field width of 6 %6.4d
  • b. An octal integer in a field whose width will be given in the argument list %o
  • c. A character in a field width of 2 #2c
  • d. A floating-point number in the form +3.13 in a field width equal to the number of characters in the number %+.2f
  • e. The first five characters in a string left-justified in a field of width 7
  • %-7.5s

  • 9. For each of the following input lines, provide a scanf() statement to read it. Also declare any variables or arrays used in the statement.
    a. 101 int number; scanf("%d",&number); b. 22.32 8.34E−09 float kgs,share; scanf("%f%f",&kgs,&share); c. linguini char pasta[20]; scanf("%s",pasta);
    d. catch 22 char action[20]; int value; scanf("%s %d",action. &value);
    e. catch 22 (but skip over catch) int value; scanf("%*s %d",&value);
    10. What is whitespace?
    空白には、スペース、タブ、改行が含まれます.C言語は空白の区切り記号を用いる.scanf()は、連続する入力項目を空白で区切る.
    11.What’s wrong with the following statement and how can you fix it? printf("The double type is %z bytes..
    ", sizeof (double));

    %zのzは修飾子であり、変換文字ではないので、修飾子の後ろに修飾された変換文字を付けます.%zdを使用して10進数を印刷したり、異なる進数、例えば%zxを使用して16進数を印刷したりすることができます.
    12. Suppose that you would rather use parentheses than braces in your programs. How well would the following work?
    #define ( { 
    #define ) }
    

    いいですよ.でも、これからはカッコがなくて、角カッコになります.