ImageVerifierCode 换一换
格式:DOCX , 页数:64 ,大小:51.81KB ,
资源ID:1575606      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1575606.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序设计》课后习题详细答案.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计》课后习题详细答案.docx

1、C语言程序设计课后习题详细答案全国计算机等级考试二级教程C语言程序设计习题分析与详细解答第一章 程序设计基本概念习题分析与解答11 【参考答案】 EXE12 【参考答案】 1 .C 2 .OBJ 3 .EXE13 【参考答案】 1 顺序结构 2 选择结构 3 循环结构第二章 C程序设计的初步知识习题分析与解答一、选择题21 【参考答案】 B)22 【参考答案】 D)23 【参考答案】 B)24 【参考答案】 A)25 【参考答案】 C)26 【参考答案】 A)27 【参考答案】 B)28 【参考答案】 B)29 【参考答案】 D)210 【参考答案】 C)211 【参考答案】 B)212 【参

2、考答案】 B)213 【参考答案】 A)二、填空题214 【参考答案】 1 11 2 12215 【参考答案】 1 4.2 2 4.2216 【参考答案】 1 2 3 定义 4 执行217 【参考答案】 1 关键字 2 用户标识符218 【参考答案】 1 int 2 float 3 double219 【参考答案】 float a1=1.0, a2=1.0;或float a1=1, a2=1;(系统将自动把1转换为1.0)220 【参考答案】 存储单元221 【参考答案】 3.5222 【参考答案】 1 a*b/c 2 a/c*b 3 b/c*a223 【参考答案】 把10赋给变量s224 【

3、参考答案】 1 位 2 1位二进制数据(0或1)225 【参考答案】 1 8 2127 301111111 4-128 5 10000000226 【参考答案】 1 32767 2 -32768 3 1000000000000000227 【参考答案】 1 十 2 八 3 十六三、上机改错题228 【分析与解答】第1行的错误:(1) include是一个程序行,因此在此行的最后不应当有分号(;)。第2行的错误:(1) main()是主函数的起始行,不是语句,因此最后不应当有分号(;)。(2) 在同一行上的/ * main function * / 显然是注释;C语言规定:注释由/*开头,由*/

4、结束,但在*号和/之间不得插入任何空格,而在此处“/ *”和“* /”之间存在空格,因此,/ * main function * /的写法是错误的,而应写成:/* main function */。第3行的错误:(1) 在主函数的起始行main()的后面是函数体,函数体由左花括号(开始。但在函数体的第一行:float的前面缺少了左花括号(。(2) 在同一行上的/* /*r is radius*/, /* s is area of circular*/ */ 显然是注释;C语言规定:注释由/*开头,由*/结束,并且开头的/*将去找最近的*/去配对,因此在/* /*r is radius*/中,第

5、一个/*与radius后的那个*/配上了对,结果紧跟在后面的那个逗号(,)落在了注释的外面,而构成了一个多余符号,为此,在编译时将报告“语法错”。/* s is area of circular*/ */中第一个*/就结束了注释,第一个*/就成了多余的了。第6行的错误:(1) printf(%f n,s)应当是一条输出语句,但在最后缺少了一个分号。(2) printf(%f n,s);是程序的最后一条语句,程序应当结束;但缺少了程序体结束所需的右花括号();此右花括号可以放在printf(%f n,s);的后面,也可以放在printf(%f n,s);的下一行上。227 【分析与解答】第2行的

6、错误:在main的后面缺少一对圆括号。第4行的错误:在c=4.0的后面缺少分号。第6行的错误:在printf(%f n,v)的后面缺少分号。第三章 顺序结构习题分析与解答一、选择题 (单选题)3.1 【参考答案】 C)3.2 【参考答案】 C)3.3 【参考答案】 D)3.4 【参考答案】 C)3.5 【参考答案】 D)3.6 【参考答案】 B)3.7 【参考答案】 C)3.8 【参考答案】 D)3.9 【参考答案】 A)3.10 【参考答案】 B)3.11 【参考答案】 C)3.12 【参考答案】 D)3.13 【参考答案】 D)3.14 【参考答案】 A)3.15 【参考答案】 C)3.1

7、6 【参考答案】 C)3.17 【参考答案】 C)3.18 【参考答案】 D)把D的答案修改为:scanf(“%8f”,&c);3.19 【参考答案】 C)3.20 【参考答案】 B)二、填空题3.21 【参考答案】(1)-200,2500(2)i=-200,j=2500(3) i=-200j=25003.22 【参考答案】 1 12 2 0 3 03.23 【参考答案】 1 一条语句 2 分号(或;)3.24 【参考答案】 分号(;)3.25 【参考答案】1:100 25.81 1.892342: 100 25.81 1.89234 3:100 25.81 1.892343.26 【参考答案

8、】 x=127, x= 127, x= 177,x= 7f, x= 1273.27 【参考答案】 x=127, x=127 , x=127 ,x= 000127, x=%06d3.28 【参考答案】 a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500三、编程题和改错题3.29 【分析与解答】(1) 主函数名main后应有一对圆括号。(2) 第三行的printf语句用以提示输入,但是原样输出的字符串没有用双引号括起来;另外,从输入的形式看,输入的数据紧跟在提示之后,因此,printf格式串中最后不应该有换行符n。(3)因为输入项a、b、c

9、从定义和计算结果来看都是double类型,因此,第四行scanf语句格式串中的格式说明不应当用%d而应当用%lf;且每一个变量之前应该加地址运算符&。(4)第七行的printf语句中应当把%d都改成%lf或%f;按输出要求在格式串中应添加相应的原样输出的字符;因为下一个printf的输出从新的一行开始,因此在本输出语句的格式串的最后应当加换行符n。(5) 第八行的printf语句中应当把格式串整理合并放在输出项的前面,输出项放在后面,%d都改成%lf或%f;中间的n删去。(6)请同学们自己写出修改后的程序,并上机调试。3.30 【分析与解答】(1) 分析:可用算术式56060把分钟换算成小时和

10、分钟,商数就是小时数,余数就是分钟数。(2) 确定变量的名字和定义变量的类型:在程序中把小时数放在变量h中,把分钟数放在变量m中。这两个变量的类型可以是整型(本题中采用整型),也可以是实型。(3) 确定所用算法:求56060的商数,在C语言中可以用整除的算法,语句是h=560/60;。求余数可用求余运算符 %:560%60,其值放入变量m中的语句是:m=560%60;。(4) 设计输出格式。若输出的形式定为:小时:分钟,则按此形式设计输出语句。(5) 把以上内容放在主函数的一对花括号中。(6) 编写程序如下:main() int h, m;h=560/60;m=560%60;printf(Th

11、e result: %3d : %3dn, h,m);运行结果是:The result: 9 : 203.31 【分析与解答】(1) 确定变量的名字和定义变量的类型。若用a存放1500,用b存放350;用q存放商数,用r存放余数,所有变量应定义成int类型。(2) 设计输入语句从终端输入1500和350;在输入语句之前,应当设计一个输出语句,用以提示输入。(3) 可用整除求商数,结果放在变量q中。可用求余运算符%求两数之余数,结果放在变量r中。(4) 设计输出语句。输出a、b、q、r。(5) 把以上内容放在主函数的一对花括号中。本题的程序与3.30相似,请大家参考上题并根据本题的解释自己编程,

12、并上机调试。3.32 【分析与解答】(1) 定义4个双精度变量a、b、c和ave,变量a、b、c分别存放读入的3个双精度数,ave存放它们的平均值。(2) 设计输入语句,以及在此之前用于提示输入的(printf)语句。(3) 设计求平均值的算法,把所求得的平均值放入变量ave中。(4) 设计把变量ave中的数,从小数点后第二位数进行四舍五入的算法。现举例说明:若ave中的数为123.4644,为了保留此值小数点后一位,可用表达式:(int)(123.4644*10)/10.0;依次推算,为了保留此值小数点后二位,可用表达式:(int)(123.4644*100)/100.0;其他依此类推。(5

13、) 若要求对小数点后第二位数进行四舍五入,则可对原数加0.05后再进行以上运算。如要求保留123.4644小数点后一位且对第二位数进行四舍五入,可用表达式:(int)(123.467+0.05)*10)/10.0。注意:分母一定要用实数10.0而不能用整数10,否则就变成整除了;若要求保留123.4644小数点后两位且对第三位数进行四舍五入,可用表达式:(int)(123.467+0.005)*100)/100.0;其他依此类推。(6) 设计输出语句。输出a、b、c和ave。(7) 把以上内容放在主函数的一对花括号中。(8) 编写程序如下:main() double a,b,c,ave;pri

14、ntf(Enter a ,b ,c : );scanf(%lf%lf%lf, &a, &b, &c );ave=(a+b+c)/3;printf(ave=%fn, ave); /*用以比较四舍五入前后的数据*/ave=(int)(ave+0.05)*10)/10.0;/*上句也可写成ave=(int)(ave*10+0.5)/10.0;*/printf(a=%f, b=%f, c=%f, ave=%fn, a,b,c,ave);3.33 【分析与解答】(1) 关于对变量中的数进行交换的算法请参考3.7题中的解释和教程中有关的例题。(2) 定义4个整型变量a、b、c和t,变量a、b、c分别存放读

15、入的3个整数,t用作临时存储单元。(3) 设计输入语句,以及在此之前用于提示输入的(printf)语句。(4) 输出a、b、c中的值,以便于比较。(5) 交换的步骤如下: 把c中的值赋给t。 把b中的值赋给c。 把a中的值赋给b。 把t中的值赋给a。经过以上步骤,已按要求进行了交换。(6) 输出a、b、c中的值。(7) 编写程序如下:main() int a, b, c, t;printf(Enter a, b, c :n);scanf(%d%d%d,&a,&b,&c);printf(1) a=%d,b=%d,c=%dn,a,b ,c);t=c; c=b; b=a; a=t;printf(2)

16、 a=%d,b=%d,c=%dn,a,b,c);第四章 选择结构习题分析与解答一、选择题4.1 【参考答案】 A)4.2 【参考答案】 A)4.3 【参考答案】 A)4.4 【参考答案】 D)4.5 【参考答案】 C)4.6 【参考答案】 A)4.7 【参考答案】 B)4.8 【参考答案】 C)4.9 【参考答案】 D)4.10 【参考答案】 A)二、填空题4.11【参考答案】 1 非零 2 零4.12【参考答案】 、=、=、!KG-*2=4.13【参考答案】 1 ! 2 & 3 JB1|JB1|4.14【参考答案】 1:!KG-*2(逻辑非)2:、=(小于、大于、小于等于、大于等于)3:=、

17、!KG-*2=(等于、不等)4:&(逻辑与) 5:JB1|JB1|(逻辑或)。4.15【参考答案】 !4.16【参考答案】 1 a=b 或 a1|xJB1|44.17【参考答案】 14.18【参考答案】 1 xm0)JB1|JB1|(m1=m0&d1=d0) age=y1-y0;else age=y1-y0-1;读者可以参考以上语句写出程序,也可以根据分析写出与此形式不同的语句和程序。4.23【分析与解答】(1) 若输入的整数a是奇数,输出:odd number,是偶数输出:even number。(2) 若一个a是偶数,它就能被2除尽,即a%2=0,输出even number;若是奇数,它就

18、不能被2除尽,即a%2!KG-*2=0,输出odd number。读者可以参考以上给出的算法,写出相应的C语句,并编写出完整的程序。4.24 【分析与解答】本题的主要算法是从3个数中找出最大的那个数。假定始终把最大的数放在变量max中。(1) 假定a中的数最大,把a赋给max。(2) 用b去和max比较,若b大于max,则把b赋给max;若不大于max,则什么也不做。(3) 用c去和max比较,若c大于max,则把c赋给max;若不大于max,则什么也不做。(4) 经过以上操作,max中已放入了a、b、c三个数中的最大数,输出max即可。读者可以参考以上给出的算法,写出相应的C语句,并编写出完

19、整的程序。4.25 【分析与解答】(1) 本题已给出了非常明确的条件,只要写出正确的条件判断语句就可基本完成程序的编写。(2) 由给出的函数可知,只有x的值在规定的范围内时,才求出y的值,因此程序应当对输入的x进行判断,若超过范围就不求y的值。(3) 现以使用ifCD#*2else语句为例写出程序供参考。main() int x,y;printf(Enter x : ); scanf(%d, &x);if(x-5&x10) if(x=0) y=x-1;else if(x0 ) y=x+1;else if(x-5) y=x;printf(x=%d y=%dn, x,y);printf(*END*

20、nn);第五章 循环结构习题分析与解答一、选择题 (单选题)5.1 【参考答案】 D)5.2 【参考答案】 C)5.3 【参考答案】 B)5.4 【参考答案】 C)5.5 【参考答案】 C)5.6 【参考答案】 B)5.7 【参考答案】 D)5.8 【参考答案】 A)5.9 【参考答案】 D)5.10【参考答案】 D)二、填空题5.11 【参考答案】 1 5 2 4 3 65.12 【参考答案】 程序段无限循环,没有输出结果5.13 【参考答案】 -15.14 【参考答案】 115.15 【参考答案】 1 d=1.0 2 k+ 3 k=0 2 xamin三、编程题5.17【分析与解答】(1)

21、本题的基本算法是求累加值。累加项的值有规律的递增,每一项的绝对值比前一项增2,因此可以利用循环的控制变量的递增来得到累加项的绝对值。例如:for( i=1; i=1e-4 ) t=t/i;e+=t;i+;(6) 请读者自己对变量做出正确的定义,设计输出语句,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。(7) e的值应当是:2.71828。(8) 根据以上分析,读者已不难用for循环来实现求e值的计算。(9) 注意:在完成此程序时,不要对分母中的阶乘值进行单独计算,因为17!的值已超过long类型的最大值,更无法求到50!。5.19【分析与解答】(1) 从1880年至2000年的

22、年数可用一个for循环来取得。(2) 对每一年,用以上指定的条件来进行判断,若满足条件即为闰年,进行输出。(3) 按输出的要求,需要设一个变量用于统计一行中输出的个数,若在一行上已连续输出了5个年数,就需输出一个换行符,使下一个输出项在新的一行上开始;若用变量n来做此统计,则当表达式n%5=0时就应输出一个换行符,同时使n重新置0值。(4) 若变量y代表年数,if语句的逻辑表达式可以写成如下:(y%4=0 & y%100!=0JB1|JB1|y%400=0)(5) 以下程序段供参考:for ( y=1880; y1|JB1|y%400=0) printf(%d ,y);n+;if(n%5=0)

23、 printf(n); n=0; (6) 请读者自己对变量做出正确的定义并赋初值,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。从1880年至2000年有30个闰年。5.20【分析与解答】(1) 不难理解利用以下的for循环可以在一行上连续输出n个*号:for(i=1; i=n; i+) printf(*);printf(n);若n的值是6,则连续输出6个*号。(2) 以上图形是在各行上输出数目不等的*号,只是*号的数目依次有规律地变化。在上半部分各行依次是1、3、5、7个,因此可以用以下的程序段来实现这样的输出:for(k=1;k=7;k+,k+) for(i=1;i=1;k-

24、,k-) for(i=1;i=k; i+)printf(*);printf(n);以上程序段从第一列起输出的结果如下:*现在我们已完成了在每行输出指定数目的*号。(3) 输出结果与题目要求不同,它们的区别是:按题目每一行之前有不同的空格,而这里则是所有的行都在第一列上开始输出*号;所以接着就应当解决这一问题。(4) 分析题目要求,每行第一个*号位置的缩进是有规律的,假定中间这一行第一个*号位置是在第一列,则可看出,第一至第三行的缩进分别是3、2、1个空格;而图形下半部的缩进数则刚好相反。这可在以上循环中添加输出连续空格的for循环来实现,对于上半部程序如下:b=3;for(k=1;k=7;k+

25、,k+) for(j=1;j=b; j+)printf( );b-;for(i=1;i=k; i+)printf(*);printf(n);(5) 请读者在理解以上给出的示例的基础上,自己添加下半部空格的输出。第六章 字符型数据习题分析与解答一、选择题6.1【参考答案】 B)6.2【参考答案】 D)6.3【参考答案】 A)6.4【参考答案】 A)6.5【参考答案】 B)6.6【参考答案】 D)6.7【参考答案】 D)6.8【参考答案】 B)6.9【参考答案】 A)6.10【参考答案】 A)6.11【参考答案】 C)二、填空题6.12【参考答案】 -16.13【参考答案】 16.14【参考答案】 ctype.h6.15【参考答案】 06.16【参考

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2