09-第8章复习题答案
A.8 第8章复习题答案
1.表达式 putchar(getchar()) 使程序读取下一个输入字符并打印出来。 getchar() 的返回值是 putchar() 的参数。但 getchar(putchar()) 是无效的表达式,因为 getchar() 不需要参数,而 putchar() 需要一个参数。
2.a.显示字符 H 。
b.如果系统使用 ASCII ,则发出一声警报。
c.把光标移至下一行的开始。
d.退后一格。
3. count <essay >essayct 或者 count >essayct <essay
4.都不是有效的命令。
5. EOF 是由 getchar() 和 scanf() 返回的信号(一个特殊值),表明函数检测到文件结尾。
6.a.输出是: If you qu
注意,字符 I 与字符 i 不同。还要注意,没有打印 i ,因为循环在检测到 i 之后就退出了。
b.如果系统使用 ASCII ,输出是: HJacrthjacrt
while 的第 1 轮迭代中,为 ch 读取的值是 H 。第 1 个 putchar() 语句使用的 ch 的值是 H ,打印完毕后, ch 的值加 1 (现在是 ch 的值是 I )。然后到第 2 个 putchar() 语句,因为是 ++ch ,所以先递增 ch (现在 ch 的值是 J )再打印它的值。然后进入下一轮迭代,读取输入序列中的下一个字符( a ),重复以上步骤。需要注意的是,两个递增运算符只在 ch 被赋值后影响它的值,不会让程序在输入序列中移动。
7.C的标准 I/O 库把不同的文件映射为统一的流来统一处理。
8.数值输入会跳过空格和换行符,但是字符输入不会。假设有下面的代码:
int score;
char grade;
printf("Enter the score.\n");
scanf("%s", &score);
printf("Enter the letter grade.\n");
grade = getchar();
如果输入分数 98 ,然后按下 Enter 键把分数发送给程序,其实还发送了一个换行符。这个换行符会留在输入序列中,成为下一个读取的值( grade )。如果在字符输入之前输入了数字,就应该在处理字符输入之前添加删除换行符的代码。