C语言内涵教程练习5参考答案
练习5
5.1 计算循环体的执行次数并上机验证。
1. int i = 0; 2. short i = 1;
while(1) while(i > 0)
{ {
++i; ++i;
printf("%d\n", i); printf("%d\n", i);
} }
3. short i = 1; 4. char c = 'a';
while(i * i >= 0) while(c >= 0)
{ {
++i; --c;
printf("d\n", i); printf("%c\n", c)
} }
答:
1.表达式1恒真,因此循环体会执行无数次。
2.在数学上,变量i的初值为1,每次自增1后会一直大于0,也就是说表达式i > 0恒真,但是,计算机中整型构成一个环,short型变量的取值范围为-32768~32767,当变量i的值自增到32767后再加1就变成了-32768,表达式i 〉0为假,循环退出,因此循环体执行了32767次。
3.表达式i * i >= 0恒真,因此循环体会执行无数次。
4.字符型变量c的值为97号字符’a’,因此从97至0,循环体共执行了98次。
5.2 画出例5-4的程序流程图。
5.3对折一张厚1毫米的纸,每折一次,纸的厚度就翻一倍,理论上折多少次后厚度可以达到珠穆朗玛峰的高度(按8848米计算)。(实际上一张纸最多只能对折七次左右)
答:
5.4 编程输出整数n的阶乘。(n! = n * (n-1) * … * 2 * 1)
答:
与例5-4类似的:
0的阶乘等于1,此程序能正确输出吗?
for循环结构的程序。
还可以用:
与前面两个程序相比,少用了一个变量。
5.5 编程输出一个正整数各位上数字中零的个数。
5.6 编程输出正整数各位上数字中的最大数。
或者(注意体会两者的区别)
5.7 以小僧的人数为循环变量求解例5-6,要求程序不仅没有逻辑错误而且无解时可以输出“问题没有解!”。
答:
注意:
在用穷举法解决此类问题时要防止因四舍五入而出错的情况。如此题中设大僧每人2个馍,小僧4人一个馍,则问题应该无解,但用例5-6的算法求解时程序却会给出错误的结果。
当然了也可以加一个(100-i) % 3 == 0的条件来防止类似的错误。
5.8 鸡兔同在一个笼子里,从上面数有35个头,从下面数有94只脚。求笼中各有几只鸡和兔。
或:
5.9 编程输出正整数n的所有因数。
或:
5.10 有508个西瓜,第一天卖了一半多2个,以后每天卖剩下的一半多2个,问几天后能卖完?
答:
考虑无解的情况:
5.11 分析下面循环的作用。.
1. for(i=1; i<100; ++i) 2. for( i=2; i<100; i+=2)
{ {
if(i % 2 == 0) printf("%3d", i);
printf("%3d", i); if(i % 20 == 0)
if(i % 20 == 0) printf("\n");
printf("\n");
} }
3. for(i=1; i<100; ++i) 4. for(i=1, j=1; i+j<100; ++i, ++j)
{