练习5
5.1 计算循环体的执行次数并上机验证。
1. int i = 0; 2. short i = 1;
while(1) while(i > 0) { {
++i; ++i;
printf(\ } }
3. short i = 1; 4. char c = 'a';
while(i * i >= 0) while(c >= 0) { { ++i; --c;
printf(\} } 答:
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-2的程序流程图。
开始i=2,sum=1i <= 100TFSum += i++i输出sum的值结束
5.3 整数n为几时1.0/n小于10。 答:
-5
5.4 编程输出整数n的阶乘。(n! = n * (n-1) * ? * 2 * 1) 答:
与例5-2相同的:
0的阶乘等于1,此程序能正确输出吗? for结构的程序。
还可以用:
与前面两个程序相比,少用了一个变量。
5.5 编程输出一个正整数各位上数字中零的个数,正整数由用户输入。
5.6 编程输出正整数各位上数字中的最大数。
或者(注意体会两者的区别)
5.7 以小僧的人数为循环变量求解例5-4。 答:
注意:
在用穷举法解决此类问题时要防止因四舍五入而出错的情况。如此题中设大僧每人2个馍,小僧4人一个馍,则问题应该无解,但用例5-4的算法求解时程序却会给出错误的结果。
可以加一个(100-i) % 3 == 0的条件来防止类似的错误。
5.8 鸡兔同在一个笼子里,从上面数有35个头,从下面数有94只脚。求笼中各有几只鸡和兔。
或:
5.9 编程输出正整数n的所有因数。
或:
5.10 有508个西瓜,第一天卖了一半多2个,以后每天卖剩下的一半多2个,问几天