C primer plus 第六版 第6版 004章 第四章 复习题 答案 中文

1.再次运行程序清单4.1,但是在要求输入名字时,请输入名和姓,中间保有一个空格,看看会发生什么?

#include <stdio.h>
#include <string.h>
#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?\n");
    scanf("%s", name);
    printf("%s, what's your weight in pounds?\n", name);
    scanf("%f", &weight);
    size = sizeof name;
    letters = strlen(name);
    volume = weight / DENSITY;
    printf("Well, %s, your volume is %2.2f cubic feet.\n",name, volume);
    printf("Also, your first name has %d letters,\n",letters);
    printf("and we have %d bytes to store it.\n", size);

    return 0;
}

程序不能正常运行,第一个scanf()语句只读取用户输入的名,而用户输入的姓仍留在缓冲区中(缓冲区是用于存储输入的临时存储区)。下一条scang()语句,在输入缓冲区查找重量时,从上次读入结束的地方开始读取。这样就把留在缓冲区的姓作为体重来读取,导致sacnf()读取失败。另一方面,如果在要求输入姓名时输入Lasha 114,那么程序会把144作为用户的体重(虽然用户是在程序提示输入体重之前输入了144)

2.假设下列事例都是完整程序中的一部分,它们的打印结果分别是什么?

a.

printf("He sold the painting for $%2.2f.\n", 2.345e2);
打印出:He sold the painting for $234.50.

b.

printf("%c%c%c\n", 'H', 105, '\41');
'' 打印出:Hi!

c.

#define Q "His Hamlet was funny without being vulgar."

printf("%s\nhas %d characters.\n", Q, strlen(Q));
打印出:
His Hamlet was funny without being vulgar.
has 42 characters.

d.

printf("Is %2.2e the same as %2.2f?\n", 1201.0, 1201.0);
打印出:Is 1.20e+03 the same as 1201.00?

3在第二题的C中,如果要输出包含双引号的字符串Q,该如何修改?

    #define Q "His Hamlet was funny without being vulgar."
    
    printf("\"%s\"\nhas %d characters.\n", Q, strlen(Q));

4找出下面程序中的错误 下面这个已经被我改好了

#include <stdio.h>  //缺少这个头文件不可以
define B "booboo"   
'' #define X 10   
int main() { 
int age; 
int xp;
char name[40];  
'' printf("Please enter your first name.\n"); 
scanf("%s", name); 
printf("All right, %s, what's your age?\n", name); 
scanf("%d", &age); 
xp = age + X;
 printf("That's a %s! You must be at least %d.\n", 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 $%.2f.\nThat is %.1f%% of list\n",BOOK,cost,percent);

6.打印下列各项内容要分别使用什么转换说明?

  • 一个字段宽度与位数相同的十进制整数 %d
  • 一个形如8A、字段宽度为4的十六进制整数 %4x
  • 一个形如232.346、字段宽度为10的浮点数 %10.3f
  • 一个形如2.33e+002、字段宽度为12的浮点数 %12.2e
  • 一个字段宽度为30、左对齐的字符串 %-30s

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..\n", sizeof (double));

%z中的z是修饰符,不是转换字符,所以要在修饰符后面加上一个它修饰的转换字符。可以使用%zd打印十进制数,或用不同的说明符打印不同进制的数,例如,%zx打印十六进制的数。

12. Suppose that you would rather use parentheses than braces in your programs. How well would the following work?

#define ( { 
#define ) }

可以是可以的,但是以后你就没有圆括号了,都变成方括号了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容