预计阅读本页时间:-
A.5 第5章
1. a. 30。
b. 27(不是 3)。(12+6) /(2*3)会得出 3。
c. x=1, y=1(整数除法)
d. x=3(整数除法),y=9。
2. a. 6(简化为 3+3.3)。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
b. 52。
c. 0(简化为0*22.0)。
d. 13(简化为66.0/5即13.2,然后把这个值赋给一个int变量)。
3.第0行:应该有#include <stdio.h>。
第3行:应该以分号而不是逗号结尾。
第6行:while语句建立了一个无限循环。因为i的值保持为1,所以它总是小于30。推测一下它的意思大概是要写成while(i++<30)。
第6到8行:这样的缩排说明我们想要使第7和8行组成一个代码块,但是缺少了花括号会使while循环只包括第7行。应该添加花括号。
第7行:因为1和i都是整数,所以当i为1时除法运算的结果会是1,而当i为更大的数时结果为0。使用n=1.0/i;会使i在进行除法运算之前先转换为浮点数,这样就会产生非0答案。
第8行:我们在控制语句中漏掉了换行符(\n),这会使数字只要可能就在一行中打印。
第10行:应该是return 0;。
下面是一个正确的版本:
4.主要问题在于判断语句(sec是否大于0?)和获取sec值的scanf()语句之间的关系。具体地说,第一次进行判断时,程序还没有机会来获得sec的值,这样就会对碰巧处在那个内存位置中的一个垃圾值进行比较。一个比较笨拙的解决方法是对sec进行初始化,比如把它初始化为1,这样就可以通过第一次判断。但是还有另一个问题,当最后输入0来停止程序时,在循环结束之前不会检查sec,因而0秒的结果也被打印出来。更好的方法是使scanf()语句在进行while判断之前执行。可以通过像下面这样改变程序的读取部分来做到这一点:
第一次获取输入使用循环外部的scanf(),以后就使用在循环结尾处(也即在循环再次执行之前)的scanf()语句。这是处理这类问题的一个常用方法。
5.输出如下:
解释一下。第一个printf()语句与以下语句相同:
第二个打印语句首先把num增加为11,然后打印这个值。第三个打印语句打印num(值为11),然后把它增加为12。第四个打印语句打印n的当前值,现在它依然为12,然后把n减小为11。最后的打印语句打印出n的当前值11。
6.输出如下:
表达式c1-c2和‘S’-‘O’的值相同。在ASCII码中,后者相当于83-79。
7.它在一行中打印出从1到10的数字,每个数字占据5列的宽度,然后开始新的一行:
8.下面是一种可能性。它假定字母是连续编码的,就像ASCII中的情况那样。
9.每个例子的输出如下:
a. 1 2
注意x先被递增然后再进行比较。光标仍留在同一行。
b.
注意这次x先进行比较然后再递增。在这里和在例a的情况中,x都是在打印之前被递增。还要注意使第二个printf()语句缩进并不能使它成为while循环的一部分。因此它只是在while循环结束之后被调用一次。
c. stuvw
这里,直到第一次调用printf()之后才对ch进行递增。
10.这是一个构造有缺陷的程序。因为while语句没有使用花括号,只有printf ()语句作为循环的一部分,所以程序无休止地打印消息COMPUTER BYTES DOG,直到您强行关闭程序为止。