新概念C语言能力教程练习试题05答案.pdf
《新概念C语言能力教程练习试题05答案.pdf》由会员分享,可在线阅读,更多相关《新概念C语言能力教程练习试题05答案.pdf(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、练习55.1 计算循环体的执行次数并上机验证。1.int i=0;while(1)(+i;printf(%dn,i);3.short i=1;while(i*i=0)(+i;printf(“dn,i);2.short i=1;while(i 0)(+i;printf(n%dnnz i);)4.char c=a1;while(c=0)(-c;printf(n%cnn,c)答:1.表达式1恒真,因此循环体会执行无数次,具体分析为:循环体循环控制-+i;printf(n%dnnz i);1变量i的值由1变为2输出2/1变量i的值由2变为3输出3/1.1.2.在数学上,变量i的初值为1,每次自增1后会
2、一直大于0,也就是说表达式i 0恒真,但是,计算机中整型构成一个环,short型变量的取值范围为-3276832767,当变量i的值自增到32767后再加1就变成了-32768,表达式i0为假,循环退出,因此循环体执行了 32767次。循环体循环控制+i;printf(%dnz i);循环变量ii 011(真)变量i的值由1变为2输出2/21(真)变量i的值由2变为3输出3/.1(真).327671(真)变 量i的 值 由32767变为-32768输出-32768/-327680(假)循环退出不再执行循环退出不再执行3.表达式i*i=0恒真,因此循环体会执行无数次。循环体循环控制+i;prin
3、tf(%dnn,i);循环变量ii*i=011(真)变量i的值由1变为2输出2/21 (真)变量i的值由2变为3输出3/.1 (真).3 2 7 6 71 (真)变 量i的 值 由3 2 7 6 7变为-3 2 7 6 8输出-3 2 7 6 8 /-3 2 7 6 81 (真)变 量i的 值 由-3 2 7 6 8变为-3 2 7 6 7输出-3 2 7 6 7/.1 (真).4 .字符型变量c的值是字符,a,查表可知为9 7号字符,在比较操作中字符型表现为整型,因此,因此从9 7至0,循环体共执行了 9 8次。查表可知具体的执行过程如下。循环体循环控制-C;pri n tf (%c nnz
4、 c);循环变量Cc =0&(9 7)1 (真)变量c的值由9 7变为9 6输出,/、,(9 6)1 (真)变量c的值由9 6变为9 5输出_/.1 (真).,0!(0)1 (真)变量c的值由0变为-1输 出/(0号字符没有形状)(-1)0 (假)循环退出不再执行循环退出不再执行5.2 画出例5-4 的程序流程图。(开 始)c结 束)5.3 对折一张厚1毫米的纸,每折一次,纸的厚度就翻一倍,理论上折多少次后厚度可以达到珠穆朗玛峰的高度(按 8848米计算)。(实际上一张纸最多只能对折七次左右)答:1234567891011分析:I tinclude uoid main()in t i =1,s
5、um=0;w h ile(i 8848000)printFC%d:%dn,sum,i);循环体循环控制i+=i;+sum;循环变量ii884800011(真)变量i的值由1变为2变量sum的值由0变为121(真)变量i的值由2变为4变量sum的值由1变为241(真)变量i的值由4变为8变量sum的值由2变为3.1(真).?0(假)循环退出不再执行循环退出不再执行5.4 编程输出整数n的阶乘。(n!=n *(n-l)*2 *1)答:与例5-4 类似的:1 0include 23456789101112uoid n a in()in t i =2,Fac=1,n;scanFCd,&n);v ih
6、ile(i=n)printF(%d?=%dn,n,Fac);55?=120循环结构执行过程分析如下:循环控制循环体fac*=i;+i;变量i变量ni=n151(真)变量f a c的值由1变为1变量i的值由1变为2251(真)变量f a c的值由1变为2变量i的值由2变为3351(真)变量f a c的值由2变为6变量i的值由3变为4451(真)变量f a c的值由6变为24变量i的值由4变为5551(真)变量f a c的值由2 4变为120变量i的值由5变为660(假)循环退出不再执行循环退出不再执行0 的阶乘等于1,此程序能正确输出吗?fo r循环结构的程序。1 ttinclude 23456
7、789uoid m a in()in t i,Fac=1,n;s c a n R W,&n);F o r(i=2;i=n;+i)fac*=i;p rin tfC d f d X n,n,Fac);用户输入5 时循环结构执行过程分析如下:循环控制循环体fac*=i;+i;变量i变量ni=n251(真)变量f a c的值由1变为2变量i的值由2变为3351(真)变量f a c的值由2变为6变量i的值由3变为4451(真)变量f a c的值由6变为24变量i的值由4变为5551(真)变量f a c的值由2 4变为120变量i的值由5变为6650(假)循环退出不再执行循环退出不再执行还可以用:incl
8、ude 234567891011121314151617uoid m a in()1)Fac*=n;-n;/*相应的f 结构为fo r(;n1;-n)表达式1为空fac*=n;*/p rin tf(,%dn,Fac);与前面两个程序相比,少用了一个变量。用户输入5 时循环结构具体执行过程如下:循环控制循环体fac*=n;n;循环变量nnl51(真)变量f a c的值由1变为5变量n的值由5变为441(真)变量f a c的值由5变为20变量n的值由4变为331(真)变量f a c的值由2 0变为60变量n的值由3变为221(真)变量f a c的值由6 0变为120变量n的值由2变为110(假)循
9、环退出不再执行循环退出不再执行5.5 编程输出一个正整数各位上数字中零的个数。1I tinclude 2uoid main()3 0)70300301(真)m由?变为0真sum由0变为1n 由 30030 变为 300330031(真)m由0变为3假不执行选择语句n由3003变为3003001(真)m由3变为0真sum由1变为2n由3 0 0变为30301(真)m由0变为0真sum由2变为3n由3 0变为331(真)m由0变为3假不执行选择语句n由3变为000(假)循环退出不再执行循环退出不再执行循环退出不再执行表中?的意思表示:变量m之前没有赋值,它的值不确定。5.6 编程输出正整数各位上数
10、字中的最大数。23ttinclude uoid nain()56in t n9 mv sun=s c a n ffW,&n);while(n 0)890n=n%10;iF(m sum)sum=m;n/=10;23p rin te r各位上数字中的最大数为%d n sun);当用户输入6 9 5 6 3 时循环结构具体的执行过程分析如下。请自行补充完整。循环体循环控制m=n%10;if(msum)sum=m;n/=10;循环变量nn0695631(真)m 由?变为3真 sunt由0 变为3n 由 69563 变为 695669561(真)m 由 3 变为6真sum由3 变为6n 由 6956变为
11、695.或 者(注意体会两者的区别)12345678910111213141516include uoid nain()0)sum)sum=R;n/=10;p rin tf(“各位上数字中的最大数为2dn”,sum);用户输入6 9 5 6 3 时循环结构具体的执行过程分析如下。请自行补充完整。循环体循环控制m=n%10;if(msum)sum=m;n/=10;循环变量nn069561(真)m 由?变为6真sum由3 变为6n 由 6956变为6956951(真)m 由 6 变为5假不执行选择语句n 由695变为69.两者的主要区别在于:变量sum 用于保存各位上数字中的最大数,第一个程序中s
12、um 初始化为0,意味着先假设最大的数为0,而第二个程序中sum 先被赋值为n个位上的数,意味着先假设用户输入数的个位上的数最大。5.7 以小僧的人数为循环变量求解例5-6,要求程序不仅没有逻辑错误而且无解时可以输 出“问题没有解!答:2345678910111213141516include uoid n a in()(in t i =3,flag =0;w h ile(i=99)i f(i /3+(100-i)*3=100)i +=3;iF(Flag=0)p r in tf(“无解,n”);注意:在用穷举法解决此类问题时要防止因四舍五入而出错的情况.如此题中设大僧每人2个馍,小僧4人一个馍
13、,则问题应该无解,但用例5-6 的算法求解时程序却会给出错误的结果。七僧:4 3,小僧:57当然了也可以加一个(1 0 0-i)%3 =0的条件来防止类似的错误。5.8 鸡兔同在一个笼子里,从上面数有3 5 个头,从下面数有9 4 只脚。求笼中各有几只鸡和兔。12345678910111213ttinclude uoid nain()in t n,Flag=0;For(n=1;n=35;+n)if(n *2+(35-n)*4=94)p rin tF(鸡 二 常d 兔,n,35-n);Flag=1;“(Flag=6)p r in te r无 解,n“);或:1include 2uoid main
14、()34in t n;5For(n=1;n*2+(35-n)*4?=94&n=35;+n)691if(n 5.9编程输出正整数n的所有因数。1 ttinclude 2 uoid m a in()3456789in t i,n;scanFC%d,&n);For(i=1;i=n;+i)if(n%i=0)printF(%d,i);或:include 23568910111213include uoid main()in t i,n9 m;scanF(,%di,&n);m =s q rt(n);For(i=1;in;+i)iF(n%i=8)printF(%d 老d i f(n%m =0)p rin t
15、f(%d,n);i,n/i);5.1 0有508个西瓜,第一天卖了一半多2个,以后每天卖剩下的一半多2个,问几天后能卖完?答:123456789101112131415ttinclude uoid m a in()in t sum=508,day=0;while(sun?=0)/*相应的fo r结构为For(day=0;sun?=0;+day)sum-=sun/2+2;*/p rin tF%d天后能卖完 n day);考虑无解的情况:1234567891011121314ttinclude uoid m a in()0)if(s u n =0)printf(%d天后能卖完n,day);else
16、p rin tf(无解八n”);5.1 1 分析下面循环的作用。,1.for(i=l;i100;+i)(if(i%2=0)printf(n%3dHz i);if(i%20=0)printf(nn);)3.for(i=l;i100;+i)(+i;printf(%3dz i);if(i%20=0)printf(n);2.for(i=2;i100;i+=2)printf(%3dz i);if(i%20=0)printf(nn);)4.for(1=1r j=l;i+j100;+i,+j)(printf(“%3d”,i+j);if(i+j)%20=0)printf(Xn);答:输 出 1 0 0 以 内
17、(不 含 1 0 0?)的偶数,每 行 1 0 个。1.循环结构具体的执行过程分析如下。循环体循环控制i f(i%2=0)p r in tf (,%3d,z i);i f (i%20=0)p r i n t f(nnH);+i循环变量ii10011(真)假选择语句不执行假选择语句不执行i由1变221(真)真,输 出2假选择语句不执行i由2变331(真)假选择语句不执行假选择语句不执行i由3变4.1(真).1000(假)循环退出不再执行不再执行不再执行2.循环结构具体的执行过程分析如下。循环体循环控制p r i n t f(3d”,i);i f(i%20=0)p r i n t f(nnn);i
18、+=2循环变量ii10021(真)输 出2假选择语句不执行i由2变441(真)输 出4假选择语句不执行i由4变6.1(真).1000(假)循环退出不再执行不再执行不再执行3.循环结构具体的执行过程分析如下。环体循 环 控 制 +i;p r i n t f(“3d”,i);i f (i%20=0)p r i n t f(n );+i循环变量ii10011(真)i由1变2输 出2假选择语句不执行i由2变331(真)i由3变3输 出4假选择语句不执行i由4变5.1(真).991(真)i由9 9变100输出100真输出/i由9 9变1001000(假)循环退出不再执行不再执行不再执行不再执行与其它循环
19、结构相比,它可以输出偶数100及多一个回车。4.循环结构具体的执行过程分析如下。循环体循环控制p r in tf (n%3d,zi +j);i f(i%20=0)p r i n t f(nH);+i+jiji+j100111(真)输 出2假选择语句不执行i由1变2j由1变2221(真)输 出4假选择语句不执行i由2变3j由2变3.1(真).50500(假)循环退出不再执行不再执行不再执行不再执行5.12 编程输出 1 -3+5-7+99+101 的值。235618910111213ttinclude uoid main()in t i,j,sun=0;For(j=1,i=1;i=101;i+=
20、2,+j)printF(1-3+5-7+.-9 9+1 01=%dn,sum);注:程序中变量i表示加数的绝对值,变 量j表示加的是第几项,j为1时sum加 第1项即1,j为2时sum加第2项即-3。或:12345618910111213ttinclude uoid nain()in t i,sum=0;For(i=1;i=101;i+=2)printF(-1-3+5-7+.-99+101=%dn,sum);或:2345678910111213ttinclude uoid nain()in t i9 sum;For(i=1,sun=0;i=51;+i)printF(1-3+5-7+.-99+1
21、01=%dn,sun);成.23include uoid nain()56in t i,Flag=-1,sum=0;For(i=1;i=101;i+=2)891011Flag=Flag*-1;sum=Flag*i;printFC,1-3+5-7+-99+101=%dn,sum);5.1 3 编程输出2000年至2100年间的闫年。123456789101112131415ttinclude uoid main()in t i,n=0;For(i=2OO0;i=2100;+i)i f(i%4=0&i%100=O)|i%400=0)p rin tF C d,i);+n;if(n%9=0)p rin
22、 tF(n);2000 2004 2008 2012 2016 2020 2024 2028 20322036 2040 2044 2048 2052 2056 2060 2064 20682072 2076 2080 2084 2088 2092 2096Press any k5.1 4 编程判断一个正整数是否为完全数。一个数如果恰好等于它的因数(自身除外)之和,则称该数为完全数(如 6=1+2+3,28等)。1 ttinclude 2345618910111213141516uoid main()in t i9 n,sum=1;scanf(%(T,&n);For(i=2;in;+i)iF(
23、n%i=8)sum+=i;if(sun=n)p rin tf(d=1”,n);For(i=2;i 3),它每位上的数字的n 次幕之和等于它本身(例 如 371=33+73+13,153,407等)。234567891011121314151617扑include uoid main()in t n,n,sum=0,num;scanFCd,&n);nun=n;while(n 0)m =n%10;sum+=n*n*n;n/=10;i f(num=sum)printf(1,%d是水仙花数,n,num);elsep rin tf(不是水仙花数?n,nun);71是水仙花数?5.1 6 编程判断一个正整
24、数各位上数字的乘积是否大于各位上数字之和。ttinclude 23456789101112131415161718uoid nain()in t n,nv sun=09 nul=1;scanFftd,&n);printFCd,n);while(n 0)sum)pr in tf(“各位上数字的乘积大于各位上数字之和?n);elsepr in t f各位上数字的乘积不大于各位上数字之和?n);5.1 7 分析下面的程序,用 Z5z2j3测试并改写为fo r循环结构#include void main()(int n=0;char c;c=getchar();while(c!=,n*)if(c=10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新概念 语言 能力 教程 练习 试题 05 答案
限制150内