第八章答案汇总.docx
- 文档编号:24471045
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:29
- 大小:24.64KB
第八章答案汇总.docx
《第八章答案汇总.docx》由会员分享,可在线阅读,更多相关《第八章答案汇总.docx(29页珍藏版)》请在冰豆网上搜索。
第八章答案汇总
第8章循环结构习题解答
一、填空。
【题8.1】C
【题8.2】5*6=30,0
【题8.3】k=s=0,a[i][k]*b[k][j],printf("\n")
【题8.4】17
【题8.5】6
【题8.6】c1!
=''&&c2==''
【题8.7】s=s+a/b,t=a,a=a+b,b=t
【题8.8】不确定
【题8.9】x>=0x>maxx 【题8.10】2 二、选择。 【题8.11】B 【题8.12】B 【题8.13】C(答案c改为: c.8,22) 【题8.14】A 【题8.15】C 【题8.16】A(题目有错,如果将if(x! >0)y=1;这一行去掉,则答案为A)) 【题8.17】B 【题8.18】D 三、编程。 【题8.19】求两个正整数的最大公约数和最小公倍数。 #include voidmain() { inta,b,r,sa,sb; printf("Inputtwointegernumbers: \n"); scanf("%d%d",&a,&b); sa=a;sb=b; if(a { r=a; a=b; b=r; } r=a%b; while(r! =0) { a=b; b=r; r=a%b; } printf("Thegreatestcommondivisor: %d\n",b); printf("Thelowestcommonmultiple: %d\n",sa*sb/b); getch(); } 【题8.20】判断输入的某个数是否为素数。 若是,输出YES,否则输出NO。 #include voidmain() { inti,x,yes,a; printf("Enterintegernumber: "); scanf("%d",&x); yes=1; i=2; a=(int)sqrt((double)x); while(yes&&i<=a) { if(x%i==0)yes=0; i=i+1; } printf("%d",x); if(yes) printf("YES\n"); else printf("NO\n"); getch(); } 【题8.21】编写程序,统计某C源程序中标识符的个数 解: 程序的关键是如何判断标识符。 由标识符定义知它由字母、数字和下划线组成且第一个字符不能是数字。 inword变量记录当前字符的状态,inword==1表示当前字符在标识符内,inword==0表示当前字符不在标识符内,inquota变量记录当前字符是否在引号内(设不考虑引号嵌套的情况),本题只能由键盘输入若干行源程序。 参考程序如下: #include main() {intc,num,inquota=0,inword=0; num=0; while((c=getchar())! =EOF) {if((c=='\'')||(c=='\"')) {if(inquota==1) inquota=0; elseinquota=1; } elseif(! (((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z')) ||((c>='0')&&(c<='9'))||(c=='_'))) {if((inword==1)&&(inquota==0)) {inword=0; num++; } } elseif((inword==0)&&(inquota==0)) {if(! ((c>='0')&&(c<='9'))) inword=1; } }/*whle*/ printf("num=%d\n",num); } 【题8.22】设有十进制数字a,b,c,d,e,求满足下列式子: abc*e=dcba(a非0,e非0非1)的最大的abcd。 #include main() { inta,b,c,d,e,max=0,x,y,z; for(a=1;a<=9;a++) for(b=1;b<=9;b++) for(c=1;c<=9;c++) for(e=1;e<=9;e++) for(d=1;d<=9;d++) { x=a*1000+b*100+c*10+d; y=d*1000+c*100+b*10+a; z=x*e; if((z==y)&&(max =b)&&(b! =c)&&(c! =d)) max=x; } printf("\nmax=%d\n",max); } 【题8.23】打印高和上底均为5的等腰空心梯形。 ***** ** ** ** *************** 解: 注意打印位置和行数、列数的关系,每行打印字符个数比上一行多2。 内容分为三部分,“*”串、空格串、“*”串。 参考程序如下: #include main() {ints1,s2,s3;/*三部分起始位置*/ intn1,n2=0,n3=0;/*三部分的长度*/ inti,j; s1=10;n1=5;s2=s1+n1;n2=0;s3=s2+n2; for(i=1;i<=5;i++) {for(j=1;j putchar(''); for(j=s1;j putchar('*'); for(j=s2;j putchar(''); for(j=s3;j putchar('*'); putchar('\n'); if(i<4) {if(i==1) n2=n1; else n2=n2+2; s2=s1; s1=s1-1;n1=1; s3=s3+1;n3=1; } else {s1=s1-1;n1=n1+n2+n3+2; s2=s1+n1;n2=0; s3=s2+n2;n3=0; } } getch(); } 【题8.24】用循环结构编写程序,计算л的近似值,公式如下: л/4≈1–1/3+1/5–1/7+…… 直到最后一项的绝对值小于10-6为止。 解: 循环结构是这类近似计算常用的结构,本题在循环时需要保持一个累计结果的变量,每次计算当前项时,需要变号操作,类似本题的结束控制使用while和do_while结构比较合适。 注意当前项计算值和循环控制变量的关系,参考程序如下: #include #include main() {floatpi,t,n; intsign=1; pi=0.0;n=1.0;t=1.0; while(fabs(t)>=1e-6) {t=sign/n; pi+=t; n+=2; sign=-sign; } pi=pi*4; printf("pi=%f\n",pi); getch(); } 【题8.25】用牛顿迭代法求下面方程在x=1.5附近的根。 2x3-4x2+3x-6=0 解: 牛顿迭代法先任意设定一个与真实的根接近的值x0作为第一次近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),过(x1,f(x1))点做f(x)的切线,交x轴于x2,把它作为第三次近似根…如此知道足够接近真正的根xn为止。 牛顿迭代公式为: x1=x0-f(x0)/f’(x0) 由于第一次近似根不可能取到真实的根,循环体至少执行一次,使用do_while循环结构实现迭代较好。 参考程序如下: #include #include main() {doublex1,x0,fd,f1; x0=1.5; do{ x1=x0; f1=((2*x1-4)*x1+3)*x0-6; fd=(6*x1-8)*x1+3; x0=x1-f1/fd; }while(fabs(x1-x0)>=1e-5); printf("Therootis%lf\n",x0); } 【题8.26】一根长度为133米的材料,需要截成长度为19米和23米的短料,求两种短料各截多少根时,剩余的材料最少? #include voidmain() { inta,b,n1,n2; floatsum,temp; sum=133; for(a=1;a<=133/19;a++) for(b=1;b<=133/23;b++) {temp=133-a*19-b*23;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 答案 汇总