C语言程序设计实例教程(第三版)练习题答案2_第1页
C语言程序设计实例教程(第三版)练习题答案2_第2页
C语言程序设计实例教程(第三版)练习题答案2_第3页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

练习2一、选择题下面关于语句的说法中,正确的是(ABD 。AB;号构成表达式语句C、复合语句中不允许包含另一条复合语句D、对程序执行流程起控制作用的语句属于控制语句解析:复合语句是可以嵌套的,所以C下面语句中,错误的是( B 。A、m=x>y>z; B、floatx=y=z; C、m=x,m>y; D、{k=m>n;k?:x,y;}解析:C语言中,在变量声明语句中不能使用连续赋值初始化变量,故B选项是错误的。下面不正确的if语句形式是( A 。A、if(x=y;)m++; if(x<=y)m++; C、if(x-y)m++; D、if(x)m++;解析:if选择结构中圆括号内是表达式,而不能是语句,故A选项是错误的。下面不正确的if语句形式是( C 。、if(x=y); B、if(x==y)m=0,n=1; C、if(x>=y)m=0elsen=1; D、if(x!=y)m=n;解析:C选项中if结构中条件成立时执行的m=0后没有分号,缺少语句标识,故结构错误;下面程序的运行结果是( A 。intmain(){intx=7,y=8,z=9;if(x>y)x=y,y=z; z=x;printf("x=%dy=%dz=%d\n",x,y,z);return0;}A、x=7y=8z=7B、x=7y=9z=7D、x=8y=9z=7D、x=8y=9z=8ifz=x;并受选择结构条件所限制,所以根据题目要求当x>y(7>8)语句不能被执行,而z=x;语句,将变量xz变量,而xy的值不变化,所以x=7y=8A;下面程序的运行结果是(B。intmain(){intx=6,y=6;if(++x<y++)printf("%d\n",x++);elseprintf("%d\n",y++);return0;}A6 B、7 C、8 D、9++xy7<6elsey++y77y8B;下面程序的运行结果是(D。intmain(){intx=1,y=2,z=3,m=1if(!x)m--;elseif(!y)m=2;elseif(!z);elsem=3;printf("m=%d\n",m);return0;}A、m=0 B、m=1 C、m=2 D、m=3if…elseif1个条件!x2个条件!y也为假,3个条件也为假,执行最后一个elsem=3;printfD;在下面的if语句中,功能上具有等价关系的两条if语句是( B 。①if(flag)x+y;elsex-y;②if(flag==1)x+y;elsex-y;③if(flag!=0)x+y;elsex-y;④if(flag==0)x+y;elsex-y;A、①和②B、①和③C、③和④D、②和③解析:①结构中的条件是flag变量,该结构执行是flag值不等于0执行x+y,反之执行x-y,与③结构执行一致;而②选择结构中是判断flag等于1和不等于1两种情况,而④结构执行与①和③刚好相反;故答案选B;if语句多层嵌套的情况下,为了正确区分多个ifelse如果没有使用花括号,那么从最内层的else开始,else总是与其(D。A、前面最近的if配对B、缩进位置相同的if配对C、后面最近的if配对D、前面最近的且尚未与其它else配对的if配对ifelse1elseif,elseifelseifelseifelseD;下面程序的运行结果是( A 。intmain(){inta=3,b=5,c=2,d=3,m=0;if(a>b)if(a>c)if(a>d)m=1;elsem=2;elsem=3;printf("%d\n",m);return0;}A0 B、1 C、2 D、3ifelseif1elsem=2;if(a>d)m=1;2elsem=3;与离它最ifif(a>c)else1if(a>b)else;if(a>b)elseifprintf语句mm0A;对下面程序运行结果的分析中,正确的是(D。intmain(){intx,y;scanf("%d,%d",&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf("%d,%d\n",x,y);return0;}4345B3445C4345D、有语法错误,不能通过编译ifif{}将多条语句括起来,故本题的ififelseif匹配,所以就语法错误,故答案选D以下关于switch语句的叙述中,不正确的是(C。A、switch语句中各case子句后面的表达式必须是整型或字符型常量表达式。B、同一switch语句中各case子句后面表达式的值必须互不相同。C、switch语句中必须有default部分。D、switch语句必须与break语句结合才能实现真正的选择结构。解析:再switch结构语句中defaule部分是可有可无的,他的作用是当所有case后的常量都switchbreakswitchswitch语句的执行,以实现分支效果,本题答案选C;假定已定义变量int则下面正确的switch语句是(BD 。A、switch(x) B、switch(x){ {case1.1:y++; case'a':y++;case2.1:y--; case'b':y--;default:y*=y; default:y*=y;} }C、switch(x) D、switch(x){ {case2:y++; default:y*=y;case1+1:y--; case1:y++;default:y*=y; case1+1:y--;} }解析:这里考察switch语句结构的语法:case后面是整型或字符型常量表达式,且每个case后的值需要互不相同,故答案A和C都是错误的,答案选B和D;以下程序输出结果是( B 。intmain(){intx=1,y=2,m=0,n=0;switch(x){case1:switch(y){case2:m++;break;case4:n++;break;}case3:m++;n++;break;case5:m++;n++;}printf("m=%d,n=%d",m,n);return0;}A、m=1,n=0 B、m=2,n=1 C、m=1,n=1 D、m=2,n=2switchx=1switchcase1switchcase2m01break语句跳出内层switch结构,顺序执行外层的case3m12,n01B;下面的循环语句执行完毕后,循环变量k的值是(B。intk=1;while(k++<10);A10 、11 、9 D、无限循环,值不确定k9是先将k的值参与表达式k<109<10k的值自增变为1k++<110<10不成立,跳出循环,但是在跳出循环时k10B;对下面程序段中while循环执行情况分析正确的是( C 。intk=2;while(k=0){printf("%d",k);k--;}A、该循环只执行1次 、循环是无限循C、循环体中的语句1次也不执行 D、存在语法错误while00,即终止循环,循环体育局一次也C;以下程序段( C 。x=-1;do{x=x*x;}while(!x);A、是死循环B、循环执行2次C、循环执行1次D、有语法错误解析:do…while结构语句是先执行循环体语句x=x*x,即(-1)*(-1)=11!x的运算,结果为!10,所以终止循环,故答案选C;对下面程序段中do-while循环执行情况分析正确的是( C 。intm=1,n=5;do{m++;n--;}while(m<n);A1次也不执行1次C、该循环执行2次 D、该循环执行3次解析:本题考查do…while2<4立,继续执行第二次循环体后,循环条件为3<3C;程序中while语句的循环条件是(A。intmain(){intc1=0,c2=0;charch;while(( )!=’\n’){if(ch>='A'&&ch<='Z')c1++;if(ch>='a'&&ch<='z')c2++;}return0;}A、ch=getchar() Bgetchar() Cch==getchar() D、scanf("%c",&ch)解析:C语言从键盘获取字符数据,使用函数getchar()getchar()获取的字符需要赋给变量chA;下面有关for循环的正确描述是( D 。A、for循环只能用于循环次数已经确定的情况。B、for循环的执行流程是先执行循环体语句,后判断表达式。C、在for循环中,表达式1和3可以省略,但表达式2是不能省略。D、for循环的循环体中,可以包含多条语句,但必须用花括号括起来。forABfor循环的执行流程描述,for循环是先判断循环条件,后执行循环体语句;C答案,for2D;执行语句for(i=1;i++<4;);后变量i的值是( C 。A3 、4 、5 D、不定是先用i而++i是先自增,然后以自增结果参与表达式运算;故而i=1开始,第11<4,i22<4,i3次循环条件判3<4,i444<4,i5,这时循环条件判断为假跳出循环,这时变量i5C;以下程序段的循环次数是( B 。for(i=2;i==0;)printf("%d",i--);A、无限次B、0次C、1次D、2次for1i=2i2为循环条件判断,i==02==030B;下面的双重循环中的内循环体将一共会被执行( C )次。for(i=0;i<=3;i++)for(j=4;j;j--)printf("a");A12 、15 C、16 D、20fori034forj414此,对4*4=16C;如果下面程序在运行时输入1,-1,0,2,-2↙,则程序输出结果是( C 。intmain(){intx,i,sum;for(i=0,sum=0;i<5;i++){scanf("%d",&x);if(x<0)continue;sum+=x;}printf("%d",sum);return0;}、-3 B、0 、3 D、1解析:本题考察循环结构中continuefor循环结构,而佛如循环体中并没有改变循环变量ifor5此,即i04sum055个数据,且体中使用sum变量对键盘送入的数据进行累加,但是在累加之前有一个判断语句ifcontinue;代表键盘获取的数据为负数将结束本次循环,不执行后续的累加语句,故题目是累0的数据的和,所以答案选C;如果下面程序在运行时输入1,2,0,-1,-2↙,则程序输出结果是( C 。intmain(){intx,i,sum;for(i=0,sum=0;i<10;i++){scanf("%d",&x);if(x<0)break;sum+=x;}printf("%d",sum);return0;}、-3 B、0 、3 1break此,只是在循环体中进行累加之前有一个判断语句if(x<0)环;故只能累加键盘键入的负数之前的数据;故答案选C;二、填空题循环的嵌套。for语句中的三个表达式可以全部或部分省略,但应保留其分隔符 ;。_switch_通常适用于条件表达式的取值为多个离散而不连续的整型值(或字符型值)现多分支选择结构。C语言提供的选择控制语句可以对给定的条件进行判断程序。语句可以分为说明性语句,表达式语句,复合语句 和控制结构语句 4种类型,if语句属于其中的控制结构语句。C语言中语句的结束标志是分号。复合语句是用一对{} 界定的语句块。将“y4100y400整除这一条件描述写成逻辑表达式y%4==0&&y%100!=0||y%400==0 。9. 能够表示“40<x<=60或x<120”的C语言表达式是 x>40&&x<=60||x<120 。3将程序补充完整。intmain(){intx,y,z,min;if( x<y )min=x;elsemin=y;if( z<min ) min=z ;printf(“min=%d”,min);return0;}switch语句中case关键字后面的表达式必须是 整型常量表达式 。switch语句只有与 case 语句结合使用,才能实现程序的选择结构。C 语言实现循环结构的三种语句分别是 for 语句、 while 语句和do-while 语句。除for语句外,可能一次循环体也不执行的循环语句是while ,至少执行一次循环的循环语句是 do-while 。若键盘输入字符ABCDE↙(↙表示按下回车键,则下面for语句执行后k的值是5 。for(k=0;(c=getchar())!=’\n’;k++);下述程序段的运行结果是 2,1,2 。inta=1,b=2,c=3,t;while(a<b<c){t=a;a=b;b=t;c--;}printf(“%d,%d,%d”,a,b,c)执行下面的程序段后的值是 30 。intm=1,n=325;do{m*=n%10;n/=10;}while(n);1~100358个数为一行的形式输出,将程序补充完整。intmain(){intn,j=0;for(n=1;n<=100;n++){if(n%3!=0&&n%5!=0)continue;printf("%6d",n);j++;if(j%8==0 printf("\n");}printf("\nj=%d\n",j);return0;}三、程序阅读,写出程序运行结果。intmain(){inta=1,b=3,c=5,d=4,x;if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;printf("x=%d",x);return0;}x=2intmain(){inta=2,b=7,c=5;switch(a>0){case1:switch(b>0){case1:printf("@");break;case2:printf("!");break;}case0:switch(c==5){case1:printf("*");break;case2:printf("#");break;default:printf("#");break}default:printf("&");}printf("\n");return0;}输出:@*&↙intmain(){intx,y;for(x=1,y=1;x<=10;x++){if(y>10)break;if(y%3==1){y+=3;continue;}y-=5;}printf("%d,%d\n",y,x);return0;}输出:13,5找寻两个数的最小公倍数。intmain(){intx,y,z,t;scanf("%d,%d",&x,&y);if(x>y){t=x;x=y;y=t;}z=x;do{if(z%x==0&&z%y==0)break;elsez++;}while(1);printf("gbs=%d\n",z);return0;}键盘输入数据:5,8↙输出:gbs=40intmain(){inti,j;for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf("");for(j=1;j<=7-2*i;j++)printf("*");printf("\n");}return0;}输出:*********四、编程题4个整数a,b,c,d,输出其中的最小数。解:#include<stdio.h>intmain(){inta,b,c,d,s;printf("scanf("%d%d%d%d",&a,&b,&c,&d);if(a>b)s=b;elses=a;if(s>c)s=c;if(s>d)s=d;printf("最小是:%d",s);return0;}3个整数a,b,c,按照由小到大的顺序输出这三个整数。解:#include<stdio.h>intmain(){inta,b,c,s;scanf("%d%d%d",&a,&b,&c);if(a>b){s=b;b=a;a=s;}if(a>c){s=c;c=a;a=s;}if(b>c){s=c; c=b; b=s;}printf("%d%d%d\n",a,b,c);return0;}如果有如下的分段函数,编程实现,键盘输入x的值,输出y的值。x2+8(x<10)y=4x+5(10≤x<40)2x-3(x≥40)解:#include<stdio.h>intmain(){intx,y;scanf("%d",&x);if(x<10)y=x*x+8;elseif(x<40)y=4*x+5;elsey=2*x-3;printf("%d",y);return0;}编程实现,键盘输入一个整数,判断它是奇数还是偶数,若是偶数则进一步判断它是否为4的倍数。解:#include<stdio.h>intmain(){inta;scanf("%d",&a);if(a%2==0){if(a%4==0)printf("这是一个偶数能被4整除");elseprintf("这是一个偶数不能被4整除");}elseprinf("这是一个奇数");return0;}5.编程实现,输入某学生某门课程的五级制成绩’A’,’B’,’C’,’D’,’E(或’a’,’b’,’c’,’d’,’e,输9080-89C70-7960-69分,E60分以下。解:#include<stdio.h>intmain(){inta,b;scanf("%d",&a);b=a/10;switch(b){case6:printf("D");break;case7:printf("C");break;case8:printf("B");break;case9:case10:printf("A");break;default:printf("E");}return0;}中国有句俗语叫“三天打鱼两天晒网199011解:#include<stdio.h>intmain(){intYear,Month,Day;/*sumday变量用来存放计算的总天数*/intsumday,Xyear=1990,rn;printf("请输入年月日(空格分隔):");scanf("%d%d%d",&Year,&Month,&Day);if(Year<1990){printf("该年份输入错误!\n");return;}//计算输入年份之前至1990年1月1日的天数,Xyear作为年份自变量for(sumday=0;Xyear<Year;Xyear++){/*判断当前计算的年分是否属于闰年*/rn=Xyear%4==0&&Xyear%100!=0||Xyear%400==0;if(rn==1)sumday+=366;elsesumday+=365;}/*累加计算输入年份当月之前的天数*/rn=Year%4==0&&Year%100!=0||Year%400==0;switch(Month-1){case12:sumday+=31;case11:sumday+=30;case10:sumday+=31;case9: case8:sumday+=31;case7:sumday+=31;case6:sumday+=30;case5:sumday+=31;case4:sumday+=30;case3:sumday+=31;case2:if(rn==1)sumday+=29;elsesumday+=28;case1:sumday+=31;}/*累加当前输入月的天数*/sumday+=Day;/*根据计算总天数与5的余数判断其形式,前天三为打鱼,后两天为晒网*/switch(sumday%5){case1:case2:case3:printf("打鱼\n");break;case4:case0:printf("晒网\n");break;}return0;}假设银行一年整存零取的月息为0.631000元,到第五年时刚好取完,请编辑程序算出他存钱时应存入多少。解:*问题分析与设计分析存钱和取钱的过程,可以采用倒推的方法。若第五年年底连本带息要取1000元,则要先求出第五年年初银行存款的钱数:第五年初存款=1000/(1+12*0.0063)依次类推可以求出第四年、第三的年初银行存款的钱数:第四年年初存款=(第五年年初存款+1000)/(1+12*0.0063)第三年年初存款=(第四年年初存款+1000)/(1+12*0.0063)第二年年初存款=(第三年年初存款+1000)/(1+12*0.0063)第一年年初存款=(第二年年初存款+1000)/(1+12*0.0063)通过以上过程就可以很容易地求出第一年年初要存入多少钱。#include<stdio.h>intmain(){inti;floattotal=0;/*i为年数,取值为第5至第1年,total每次计算结果为第i年初存款数额*/for(i=5;i>0;i--)total=(total+1000)/(1+0.0063*12);/*第五次循环后的计算结果即为最初第1年的存款数额*/printf("他存钱时应存入%.2f元。\n",total);return0;}买买提将养的一缸金鱼分四次出售:第一次卖出全部的一半加一条,第二次卖出余下的三分之一加两条,第三次卖出余下的四分之一加三条,最后卖出余下的27缸中共有多少条鱼。解:#include<stdio.h>intmain(){intfish=27;for(int{fish=(fish+i)*(i+1)/i;}printf("原来鱼缸中共有%d条鱼\n",fish);return0;}编程实现九九乘法表的输出,要求使用for循环实现。解:#include<stdio.h>intmain(){inti,j;for(i=1;i<10;i++){for(j=1;j<=i;j++)printf("%d*%d=%d\t",i,j,(i*j));printf("\n");}return0;}编程实现,输出100到200因子之和,这样的数称为完全数。解:#include<stdio.h>intmain(){ints,i,j;for(i=100;i<=200;i++){s=0;for(j=1;j<=i/2;j++){if(i%j==0)s+=j;}if(s==i)printf("%d\t",i);}return0;}110034整除的数,要求使用continue语句实现。解:#include<stdio.h>intmain(){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论