西北大学C语言课后习题第三章

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解答:本题考查if语句的语法 if语句的基本形式为: if(表达式) 语句1; else 语句2; 注意,if后面的表达式是用括号括起来的 对于选项B,if语句中的表达式是一个逻辑与结构,但缺少括号,应该改为: if((x=y)&&(x!=0)) x+=y; 这个里面还要注意的是,逻辑与的两边是 (x=y)&&(x!=0),对于左半部分(x=y)的意思是 将y的值赋给x,然后看这个值是否为真(非0即为真) 这里不去追究到底是应该用(x==y)还是(x=y),但语法上这两个表达式都可以进行判断 答案:B
1 y ( x ) 0 1
( x 0) ( x 0) ( x 0)
书上题目 #include<stdio.h> void main() { int x,y; scanf("%d",&x); y=-1; if(x!=0) if(x>0); y=1; else; y=-1; printf("x=%d,y=%d\n",x,y); }
解答:本题考查三目表达式
对于三目表达式,如果第一个关系式成立,三目表达式的值是中间语句的值,如果不成立,则三
目表达式的值是最后一个语句的值 对题目中的三个三目表达式按顺序执行 开始时,w=1,x=2,w<x成立,则m的值等于中间语句的值(w),所以m=w=1;
在第二个三目表达式中,对等号右边进行计算,因为m=1,y=3,m<y成立,所以将中间语句m的值
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
2.下面程序按百分制计分,100分显示满分,90~99显示优秀,80~89显示优良,70~79显示良好, 60~69显示及格,59分以下显示不及格,请修改程序错误
#include<stdio.h> void main() { int x; printf("请输入成绩:"); scanf("%d",x); x=x/10; switch(x); case x=10: printf("满分"); case x=9: printf("优秀"): case x=8: printf("优良"); case x=7: printf("良好"); case x=6; printf("及格"); case x=5: case x=4: case x=3: case x=2: case x=1: case x=0: printf("不及格"); }
1-5 DBCBA
注意
为简化程序长度,所有源程序中均删除 #include<stdlib.h>和system("pause")代码
不影响最终的结果,请大家注意
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
1.在"if(表达式)"语句中,可以判断的“表达式”是()
A.关系表达式 C.算术表达式 B.逻辑表达式 D.任意表达式
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
2.下面程序按百分制计分,100分显示满分,90~99显示优秀,80~89显示优良,70~79显示良好, 60~69显示及格,59分以下显示不及格,请修改程序错误
#include<stdio.h> void main() { int x; printf("请输入成绩:"); scanf("%d",x); x=x/10; switch(x); case x=10: printf("满分"); case x=9: printf("优秀"): case x=8: printf("优良"); case x=7: printf("良好"); case x=6; printf("及格"); case x=5: case x=4: case x=3: case x=2: case x=1: case x=0: printf("不及格"); }
解析: 这个题目错误太多,罗列一下给大家看。 (1)scanf("%d",x),缺少一个&,是&x (2)switch(x)后面没有分号 (3)case后面直接连数值,不用x=,应是 case 10 (4)printf("优秀")后面应是分号,题目写冒号 (5)case x=6后面应是冒号,不是分号(x=6也有错) (6)后面case 5,4,3,2,1,0太麻烦,直接用default就代 表了所有的其他情况 (7)更重要的一个错误,每个case后面应该接break, 否则程序会一直往下一个case执行。 在修改了其他错误,不加break,输出的结果是这样
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
选择题第二题
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印 3.下列程序执行后的输出结果是() #include<stdio.h> void main() { int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",m--);} A.4 B.5
正解 #include<stdio.h> void main() { int x,y; scanf("%d",&x); y=-1; if(x!=0) if(x>0) y=1; else(后面无分号) y=-1; else(还要考虑x=0情况) y=0; printf("x=%d,y=%d\n",x,y); }
C 语言辅导第三章 我们毕业啦
其实是答辩的标题地方
吴慈航 讲解人 化工学院2013级能源化学工程 西北大学学生校长助理,特等奖学金获得者
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
配套教材见右图
本章讲解选择题和程序设计题
一、选择题
每题后一页均附有相应的源程序和执行结果
选择题参考答案预览
解答:本题考查if语句 注意,这里问的是可以判断的“表达式”,有的表达式不一定有实际的意义但也可以判断 用一个简单的例子,if(a+b>2||a+b<0) {语句} 这里综合运用了关系表达式(大于关系和小于小于) 逻辑表达式(逻辑或) 算数表达式(a+b) 单独用每一个表达式也能有结果,具体见下一页的测试图 答案:D
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
选择题第一题
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印 2.已知int x=10,y=20,z=30;以下程序执行后x、y、z的值是()
if(x>y) z=x;x=y;y=z;
A.x=10,y=20,z=30 C.x=20,y=30,z=10 B.x=20,y=30,z=30 D.x=20,y=30,z=20
解答:此题考查自加自减语句的加减顺序。 对于m++,是先使用后加1。因为m的初值为5,if(m++>5)判断时使用的是m=5,判断后 m再自加1变成6。 所以m++>5不成立,此时判断后m=6,进入else部分 在else 的语句里printf("%d\n",m--),有一个m--。在printf中,如果遇到m++,m--,均将其视为m 对m的加减操作是在printf函数输出之后再一次性加减。 即当m=6时,printf("%d",m--),输出的结果是6,但输出后m就变成5了 答案:C 小扩展,printf配合m++等能出很多题。如m=4. printf("%d,%d,%d,%d",m++,++m,m--,m++) 试一试,结果你一定不信
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
选wk.baidu.com题第四题
编译出现错误
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印 5.若w,x,y,z,m均为int型变量,则执行下列语句后m的值是() w=1;x=2;y=3;z=4; m=(w<x)?w:x; m=(m<y)?m:y; m=(m<z)?m:z; A.1 B.2 C.3 D.4
解答:这个题目考查了if语句常用错误。 必须说明的是:if语句的作用范围仅限于它紧挨的那一条语句。 此题中if后面跟了三个赋值表达式,即z=x;x=y;y=z; 但只有第一个表达式z=x跟if函数有关。 也就是说,如果if为真,则z=x执行,if为假,z=x不执行 但不管if成立与否,后面的两个赋值表达式都会运行,因为if不会作用到它们身上 如果想整体运行,那么就必须加花括号把三个表达式作为一个整体 即 if(x>y) {z=x;x=y;y=z;} 因为x=10<y(y=20),所以z=x不执行,但x=y,y=z执行 所以x=20,y=30,z=30 答案:B
请大家自行体会哟,要加break!
三、编程题
每题后一页均附有相应的源程序和执行结果
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
1.从键盘输入三条边长a,b,c,若它们能组成三角形,则用下列公式计算三角形的 面积,按题意编程:
p (a b c)/2
s
p( p a)( p b)( p c)
#include <stdio.h> #include <math.h> void main() { float a,b,c,p,s; printf("请输入三角形三条边长a,b,c,用逗号隔开\n"); scanf("%f,%f,%f",&a,&b,&c); if(a>b) {a+=b;b=a-b;a=a-b;} if(a>c) {a+=c;c=a-c;a=a-c;} if(b>c) {b+=c;b=b-c;c=b-c;} if(a+b<=c) //三角形两边之和大于第三边 printf("不可以构成三角形\n"); else { p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("三角形面积是%.3f\n",s); } }
正解
#include<stdio.h> void main() { int x; printf("请输入成绩:"); scanf("%d",&x);(这里应该是&x,有&) x=x/10; switch(x)(没有分号) { case 10: printf("满分");break; case 9: printf("优秀");break; case 8: printf("优良");break; case 7: printf("良好");break; case 6: printf("及格");break; default: printf("不及格");break; } }
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
1.从键盘输入三条边长a,b,c,若它们能组成三角形,则用下列公式计算三角形的 面积,按题意编程:
p (a b c)/2
解析:
s
p( p a)( p b)( p c)
首先,分析这个程序的流程。要计算三角形的面积,首先要判断它是否能构成三角形 而三角形的判断方法是两短边之和大于第三边,所以需要把三角形的三个边长排序,这里我们 设定的是a<b<c。 所以,如果a>b,就将a和b的值交换(a中存入a,b中较小者)
C.6
D.7
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印 选择题第三题
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印 4.以下语法不正确的语句是() A. if(x>y);
B. if(x=y)&&(x!=0) x+=y;
C. if(x!=y) scanf("%d",&x); else scanf("%d",&y); D. if(x<y) {x++;y++;}
注意,这里的交换代码用的不是大家熟悉的{t=a;a=b;b=t;},这里不想引入新的变量
所以用了{a+=b;b=a-b;a=a-b;},这个代码在前一章的选择题出现过。 然后,再将a和c比较,如果a<c,将a,c交换,确保a中是最小的 最后,还要将b.c进行比较,确保次小的存在b中。
赋给新的m,即m还是等于1 在最后一个三目表达式中,m=1,z=4,m<z成立,仍执行中间的语句m,所以m=m=1 因此最后m的值为1
答案:A
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
选择题第五题
二、改错题
本内容仅作西北大学新生学习C语言使用,版权所有,请勿私自翻印
1.下面程序用来计算如下公式的值,请修改程序错误
相关文档
最新文档