第4章 选择结构 作业有答案版.docx
- 文档编号:28294479
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:20
- 大小:24.05KB
第4章 选择结构 作业有答案版.docx
《第4章 选择结构 作业有答案版.docx》由会员分享,可在线阅读,更多相关《第4章 选择结构 作业有答案版.docx(20页珍藏版)》请在冰豆网上搜索。
第4章选择结构作业有答案版
C程序设计
第4章选择结构习题
一、单选题
1、以下程序输出结果是
#include
intmain()
{intm=5;
if(m++>5)printf("yes:
m=%d\n",m);
elseprintf("no:
m=%d\n",m--);
return0;
}
A.7 B.6 C.5 D.4
参考答案:
B
(if(m++>5)printf("yes:
m=%d\n",m);elseprintf("no:
m=%d\n",m--);
可清楚的看到对m的引用情况。
依然遵循先加一再引用或先引用再加一的原则。
)
2、若变量都已经说明,则以下程序段输出为()
#include
intmain()
{inta,b,c;
a=10;b=50;c=30;
if(a>b)a=b;b=c;c=a;
printf("a=%db=%dc=%d\n",a,b,c);
}
A.a=10b=50c=10 B.a=10b=30c=10
C.a=50b=30c=10 D.a=50b=30c=50
参考答案:
B
3、为避免嵌套的条件分支语句if…else的二义性,C语言规定,C程序中的
else总是与____组成配对关系。
A.其上面距它最近的,并且没有其他else与其配对的if相配对
B.在同一行上的if
C.缩排位置相同的if
D.在其之前未配对的if
参考答案:
A
4、以下程序的输出结果是
#include
intmain()
{inta=-1,b=1;
if((++a<0)&&!
(b--<=0))
printf("%d%d\n",a,b);
else
printf("%d%d\n",b,a);
}
A.-11 B.01 C.10 D.00
参考答案:
C
(因为(++a<0)已经为假,!
(b--<=0)不会被执行,所以b不会改变)
5、若执行下面的程序从键盘输入3和4,则输出是_______
intmain()
{inta,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a
s=s*s;
printf("%d\n",s);
}
A.14 B.16 C.18 D.20
参考答案:
B
6、下面的程序是______
intmain()
{intx=3,y=0,z=0;
if(x==y+z)printf("****");
elseprintf("####");
}
A.有语法错误不能过通过编译
B.输出****
C.可能通过编译,但是不能通过连接,因而不能运行
D.输出####
参考答案:
D
7、请读程序:
#include
intmain()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
上面程序输出结果是
A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=0
参考答案:
A(再次理解一旦从某个case分支进来,顺序执行的思想)
8、执行下面语句后的输出为()
#include
intmain()
{inti=1;
if(i<=0)printf("****\n")
elseprintf("%%%%\n")
A.**** B.%%%%
C.%% D.有语法错,不能执行
参考答案:
C
9、有如下程序
#include
intmain()
{intx=1,a=0,b=0;
switch(x)
{case0:
b++;
case1:
a++;
case2:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是
A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2
参考答案:
A(没有break语句就会顺序执行)
10、有如下程序
#include
intmain()
{inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
elsec++;
printf("%d\n",c);
}
该程序的输出结果是
A.0 B.1 C.2 D.3
参考答案:
C(else和内层if配对,a
11、阅读以下程序:
#include
intmain()
{intx;
scanf("%d",&x);
if(x--<5)printf("%d"'x);
elseprintf("%d",x++);
}
程序运行后,如果从键盘上输人5,则输出结果是
A.3 B.4 C.5 D.6
参考答案:
B
12、以下语句执行后x,y,z的值是
#include
intmain()
{intx=10,y=20,z=30;
if(x>y)z=x;x=y;y=z;
A.x=10,y=20,z=30 B.x=20,y=30,z=30
C.x=20,y=30,z=10 D.x=20,y=30,z=20
参考答案:
B
13、执行完下面一段程序后x的值是
#include
intmain()
{a=1,b=3,c=5,d=4;
if(a
if(c elseif(a if(b elsex=3; elsex=6; elsex=7; } A.1 B.2 C.3 D.6 参考答案: B 14、读下列程序: #include intmain() {floata,b,t; scanf(“%f,%f”,&a,&b); if(a>b) {t=a;a=b;b=t;} prinff(“%5.2f,%5.2f”a,b); } 运行时从键盘输入3.8和-3.4,则正确的输出结果是()。 A.-3.40,-3.80 B.-3.40,3.80 C.-3.4,3.8 D.3.80,-3.40 参考答案: B 15、读下列程序: #include intmain() {intx,y; scanf(“%d”,&x); y=0; if(x>=0) {if(x>0)y=1;} elsey=-1; prinff(”%d”,y); } 当从键盘输入32时,程序输出结果为()。 A.0 B.1 C.-1 D.不确定 参考答案: B 16、以下程序的输出结果是()。 #include intmain() {inta=15,b=21,m=0; switch(a%3) {case0: m++;break; case1: m++: switch(b%2) {default: m++: case0: m++;break; } } printf(”%d\n”,m); } A.1 B.2 C.3 D.4 参考答案: A 17、下列程序段运行后x的值是()。 #include intmain() {inta,b,c,x; a=b=c=0;x=35; if(! a)x--; elseif(b); if(c)x=3; elsex=4: A.34 B.4 C.35 D.3 参考答案: B 18、在执行以下程序时,为了使输出结果为t=4,则给a和b输入的值应满足的条件是 #include intmain() {ints,t,a,b; scanf("%d,%d",&a,&b); s=1;t=1; if(a<0)s=s+1; if(a>b)t=s+1; elseif(a==b)t=5; elset=2*s; printf("t=%d\n",t); } A.0>a>b B.a=0 参考答案: D 19、若有定义: floatw;inta,b;则合法的switch语句是 A.switch(w){case1.0: printf("*\n");case2.0: printf("**\n");} B.switch(a);{case1printf("*\n");case2printf("**\n");} C.switch(b){casea: printf("*\n");default: printf("\n");caseb: printf("**\n");} D.switch(a+b){case1: printf("*\n");case2: printf("**\n"); default: printf("\n");} 参考答案: D 20、以下程序的输出结果是 #include intmain() {inta=100,x=10,y=20,ok1=5,ok2=0; if(x if(y! =10) if(! ok1)a=1; elseif(ok2)a=10; a=-1; printf("%d\n",a); } A.1 B.0 C.-1 D.值不确定 参考答案: C 二、程序分析 1、若从键盘输入58,则以下程序输出的结果是________。 #include intmain() {inta; scanf("%d",&a); if(a>50)printf("%d",a); if(a>40)printf("%d",a); if(a>30)printf("%d",a); } 参考答案: 585858 2、以下程序运行后的输出结果是。 #include intmain() {intx=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(“%d,%d\n”,x,y); } 参考答案: 20,0 3、若inti=10;,则执行下列程序后,变量i的正确结果是。 #include intmain() {switch(i) {case9: i+=1; case10: i+=1; case11: i+=1: default: i+=1; } 参考答案: 13 4、下列程序段的输出结果是__________。 #include intmain() {intn='c'; switch(n++) {default: printf("error");break; case'a': case'A': case'b': case'B': printf("good");break; case'c': case'C': printf("pass"); case'd': case'D': printf("warm");} } 参考答案: passwarm 5、执行程序段后t的值为。 #include intmain() {intx=10,t; t=x&&x>10; printf(“t=%d\n”,t); } 参考答案: 0 6、程序段运行后y的值为。 #include intmain() {inta=-5,y=10; if(a==0)y--; elseif(a>0)y++; elsey+=y; printf(“y=%d\n”,y); } 参考答案: 20 7、下列程序段的执行结果是。 #include intmain() {inta=25,b=14,c=19; if(a<=25&&b<=2&&c) printf(“***a+b=%d,a-b=%d***\n”,a+b,a-b); elseprintf(“***a=%d,b=%d,c=%d***\n”,a,b,c); } 参考答案: ***a=25,b=14,c=19*** 8、执行下列程序段后,i的值为。 #include intmain() {inti=1,j; switch(i) {case1: {for(j=0;j<9;j++)i+=j;break;} case2: {for(j=1;j<10;j++)i+=j;break;} case3: i++;} printf(“i=%d\n”,i); } 参考答案: 37 9、以下两条if语句可合并为一条if语句,即。 if(a<=b)x=1;elsey=2; if(a>b)printf(“***y=%d\n”,y); elseprintf(“***x=%d\n”,x); 参考答案: if(a<=b){x=1;printf(“***x=%d\n”,x);} else{y=2;printf(“***y=%d\n”,y);} 10、假设两次运行时分别输入600和1200,写出以下程序运行结果。 #include #include intmain() {intx;floaty; printf("inputainteger<1000: "); scanf("%d",&x); if(x>=1000) {printf("inputagain! "); scanf("%d",&x); } y=sqrt(x); printf("therootofxisy: %-6.0f\n",y); } 参考答案: 24inputagain! 三、程序改错题 教材P112习题7: (1)画出对应代码的流程图,分析逻辑错误的原因; (2)改错并实现正确功能。 四、程序设计题 1、编写程序,任意输入三个整数,求其最大值并输出。 [方法一] #include intmain() {intx,y,z,m,n; intmax(inta,intb); printf("pleaseinputthreenumbers: "); scanf("%d%d%d",&x,&y,&z); m=max(x,y); n=max(m,z); printf("thebiggestnumberis: %d\n",n); return0; } intmax(inta,intb) {intc; if(a>b)c=a; elsec=b; returnc; } [方法二] #include intmain() {intx,y,z; intmax(inta,intb,intc); printf("pleaseinputthreenumbers: "); scanf("%d%d%d",&x,&y,&z); printf("thebiggestnumberis: %d\n",max(x,y,z)); return0; } intmax(inta,intb,intc) {inte,f; if(a>b)e=a; elsee=b; if(e>c)f=e; elsef=c; returnf; } 2、编写程序,任意输入三个整数,将其按照从小到大的顺序排列并输出。 (尝试从小到大排序并输出4个整数的算法) [方法一]不讲,用到后面的内容。 #include voidsort(int*x,int*y,int*z) {inte; if(*x>*y){e=*x;*x=*y;*y=e;} if(*x>*z){e=*x;*x=*z;*z=e;} if(*y>*z){e=*y;*y=*z;*z=e;} } intmain() {inta,b,c,*p1,*p2,*p3; printf("pleaseinputthreenumbers: "); scanf("%d%d%d",&a,&b,&c); p1=&a;p2=&b;p3=&c; sort(p1,p2,p3); printf("thesortednumbersis: %d%d%d\n",a,b,c); return0; } [方法二] #include intmain() {intx,y,z,e;; printf("pleaseinputthreenumbers: "); scanf("%d%d%d",&x,&y,&z); if(x>y){e=x;x=y;y=e;} if(x>z){e=x;x=z;z=e;} if(y>z){e=y;y=z;z=e;} printf("thesortednumbersis: %d%d%d\n",x,y,z); return0; } 3、有一个分段函数 分别用不嵌套的if语句、嵌套的if语句、switch语句编写程序,实现以上分段函数。 [并列的if语句] #include intmain() {intx,y; printf("pleaseinputaintegertox: "); scanf("%d",&x); if(x<1){y=x;printf("y=%d\n",y);} if(x>=1&&x<10){y=2*x-1;printf("y=%d\n",y);} if(x>=10){y=3*x-11;printf("y=%d\n",y);} return0; } [嵌套的if语句] #include intmain() {intx,y; printf("pleaseinputaintegertox: "); scanf("%d",&x); if(x<1){y=x;printf("y=%d\n",y);} else if(x>=10){y=3*x-11;printf("y=%d\n",y);} else{y=2*x-1;printf("y=%d\n",y);} return0; } [switch语句]//该问题分支不多,用switch优势不明显 #include intmain() {intx,n; printf("pleaseinputaintegertox: "); scanf("%d",&x); if(x<1)n=-1; elseif(x>=10)n=1; elsen=x/10; switch(n) {case-1: printf("y=%d\n",x);break; case0: printf("y=%d\n",2*x-1);break; case1: printf("y=%d\n",3*x-11);break; default: printf("errordatainput! "); } return0; } 4、给出一个百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。 90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 #include intmain() {inti,n; chargrade; printf("pleaseinputscore: "); scanf("%d",&n); if(n>=0&&n<=100)//对成绩归类,用于switch的各分支 if(n<60)i=5; elsei=n/10; switch(i)//i可以是整型或字符型表达式,则case后是对应的常量 {case9: printf("gradeisA\n");break; case8: printf("gradeisB\n");break; case7: printf("gradeisC\n");break; case6: printf("gradeisD\n");break; case5: printf("gradeisE\n");break; default: printf("errordatainput\n"); } return0; } 5、给一个不多于5位的正整数,要求: (1)求出它是几位数字; (2)分别输出每一位数字; (3)按逆序输出各位数字,例如原数为123,应输出为321。 #include intmain() {intnum1,num2,a,b,c,d,e,n; printf("pleaseiuputaintegertonum1: ");//求位数 scanf("%d",&num1); if(num1>9999)n=5; elseif(num1>999)n=4; elseif(num1>99)n=3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 选择结构 作业有答案版 选择 结构 作业 答案