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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言课后题编程答案.docx

1、C语言课后题编程答案C语言课后题编程答案所有章节的课后习题的选择题和填空题大家必须熟练掌握,编程题掌握 到第九章即可。 希望大家通过课后的编程题熟悉典型的编程算法, 掌握基本 的编程思路,注意编程细节。第3章3-17 编写程序,把 560 分钟换算成用小时和分钟表示,然后进行输出。#includemain()int h,m;h=560/60;m=560%60;printf( “560分钟可转换成d小时d分钟” ,h,m);程序总结:(1)只要在程序中用到系统提供的库函数,必须把库函数所在的头文件用 #include 命令包含进来。否则库函数的使用无效。输入输出库函数的头文 件是: stdio.

2、h; 数学函数的头文件是: math.h; 字符处理函数的头文件是: ctype.h; 字符串处理函数的头文件是: string.h 。(2)注意C语言中的“/”和“ %两种运算符。“/”的运算结果取决于两 操作数的类型。比如: 1/2=0(与数学中不同,结果与操作数的类型一致, 所以结果只取商值) , 1.0/2=0.5( 除之前 2 要自动类型转换成 2.0 ,因为 只有同类型的操作数才能进行除运算 ), 1/2.0=0.5, 1.0/2.0=0.5 。“%”的 两个操作数都必须是整数。(3)printf( “560分钟可转换成d小时小分钟”,h,m); printf 第一个 参数要尽量详

3、细, 这样可以提高输出结果的可读性, 恰当好处的添加提示性 信息,可以提高程序的质量。( 4) int h,m; 变量起名要有艺术性,尽量做到见名知意。3-18 编写程序, 输入两个整数, 1500和 350,求出它们的商和余数并进行 输出。#includemain()int a,b,m,n;printf( “请输入两个整数 :n ” );scanf( “%d%”d ,&a,&b);m=a/b;n=a%b;printf( “d除以 %dW%小余%d ,a,b,m,n);程序总结:(1)printf( “请输入两个整数 :n ” ); 这是一个提示信息,避免用户在看到 黑屏后不知所措。( 2)

4、scanf( “%d%”d ,&a,&b); scanf 的功能是用户要通过键盘输入数据, 赋值给各输入项。注意每个输入项前面必须要加 &符号。cK输入项的个数要一致,类型要匹配。 苗int 一致,%f与float对应,%lf与double匹配,。与char对应。3-19 编写程序, 读入三个双精度数, 求它们的平均值并保留此平均值小数 点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。#includemain()double a,b,c,x;printf( “请输入三个双精度数 :n ”);scanf( “%lf%lf%lf ”,&a,&b,&c);x=(a+b+c)/3;x=x*1

5、0;x=x+0.5;x=(int)x;x=x/10;printf( “x=%.1lf ”,x);程序总结:(1)double a,b,c,x; 和 scanf( “%lf%lf%lf ”,&a,&b,&c); 有 直 接 联 系, %lf 与输入项 a,b,c 在定义时所用的类型 double 一致。(2)%.1lf, .1 的意思是结果仅保留小数点后一位小数。3-20 编写程序,读入三个整数给a、b、c,然后交换他们中的数,把a中 原来的值给b,把b中原来的值给c,把c中原来的值给a,然后输出a,b,c。main() int a,b,c,t;printf( “请输入三个整数: n ” );s

6、canf( “%d%d%”d,&a,&b,&c);printf( “交换之前: a=%d,b=%d,c=%”d ,a,b,c);t=a;a=c;c=b;b=t;printf( “交换之后: a=%d,b=%d,c=%”d ,a,b,c);程序总结: 交换两个变量的值和三个变量的值,都需要借助另外一个变量。第4章4-21 若 a 的值小于 100,请将以下选择结构改写成由 switch 语句构成的选 择结构。if(a30) m=1;else if(a40) m=2;else if(a50) m=3;else if(a60) m=4;else m=5;main() int a;printf( “

7、enter a(a100):n ” ); scanf( “ %d”,&a);printf( “ a=%dn”,a);switch(a/10)程序总结:1)选择结构的实现除了使用 if 语句以外,还可以使用 switch 语句来实 现。2) switch 后的表达式和 case 后的标号的类型要一致, switch 后的表达 式直接决定了 switch 语句体的执行入口。 执行完入口的 case 语句后, 依次顺序往下执行,直到遇到 break 语句就彻底跳出 switch 语句体, 转去执行 switch 语句体后的语句。( 3) default 语句可有可无,位置无所谓,当 switch 后

8、的表达式和所有 case 后的标号都不一致时,转去执行 default 语句,然后依次顺序执行 default 语句后其他的 switch 语句,直到遇到 break 语句,则彻底跳 出 switch 语句体。( 4) break 语句可出现在循环语句体和 switch 语句体内,目的是彻底跳出 循环体和 switch 语句体。( 5) case 和其后的标号之间必须要加空格。4-22编写程序,输入一位学生的生日(年:y0、月m0日d0),并输入当 前的日期(年:y1、月ml日di),输出该生的实际年龄。#includemain()int y0,m0,d0,y1,m1,d1,age ;prin

9、tf( “输入一位学生的生日: n ”);scanf( “%d%d%”d,&y0,&m0,&d0);printf( “输入当前日期: n ”);scanf( “%d%d%”d,&y1,&m1,&d1);age=y1-y0;if(m1m0|m0=m1&d1d0)age-;printf( “age=%dn” ,age); 程序总结 :( 1) i f(m1m0|m0=m1&d0d1,) 在程序设计中,要学会用逻辑与、或、 非代替复杂的 if 语句嵌套。( 2) 在 printf 语句中,要尽量加上 n ,这样可以避免黑屏上的结束语 press any key to continue 出现在有价值的

10、输出结果的后面,而是换行输 出。这样就提高了程序输出结果的可读性。(3)通过本设计,要加强对变量起名艺术性的认识。4-23 编写程序,输入一个整数,打印出它是奇数还是偶数。#includemain()int x,y;printf( “请输入一个整数 :n ” )scanf( “%d” ,&x);y=x%2;if(y=0)printf( “c是一个偶数! n ”,x);elseprintf( “ d是一个奇数! n ” ,x);程序总结:y=x%2;这是判断一个数是奇数还是偶数的一贯表示方式。 计算机中的等号是双等号,与数学中的等号不一样。4-24 编写程序,输入 a,b,c 三个数,打印出最大

11、者。方法#includemain()int a,b,c,max;printf( “请输入三个数: n ” ); scanf( “%d%d%”d,&a,&b,&c); if(ab)if(ac)max=a;elsemax=c;elseif(bc)max=b;elsemax=c;printf( “max=%”d ,max);程序总结:利用 if-else 的嵌套,可求出一组数的最大值和最小值。在 if-else 的嵌套中, 要格外注意 if 和 else 的配对问题。配对的原则是:从最后一个 else 开始,寻找 与其配对的 if ,找的原则是离 else 最近的还没有配对的 if 就是该 else

12、 的配对对 象。 if 和 else 的配对一旦出问题,输出结果全错。方法二:#includemain()int a,b,c,t;printf( “请输入三个数: n ” );scanf( “%d%d%”d,&a,&b,&c);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf( “最大值为: %d” ,c);程序总结:) 方法一利用 if-else 的嵌套来进行程序设计,极易容易出错。而方法二采用三 个 if 语句的并列来实现,同样可以求出最大值。) 方法二算法分析:第一个 if 语句结束后, b 中保存 a 和 b 中的

13、较大值;第二个 if 语句结束后, c 中保存 a 和 c 中的较大值;第三个 if 语句结束后, c 中保存 b 和 c 中的较大值;三次比较后, c 中的值就是三个数中最大的。) 现实生活中,交换两盆水必须要借助第三个盆子;在程序设计中,要想实现两 个变量中值的交换,就必须借助第三个变量。25 对于以下函数:Y=x(-5x0),y=x-1(x=0),y=x+1(0x10), 编写程序, 要求输入 x 的值,输出 y 的值。分别用:(1)不嵌套的 if 语句( 2)嵌套的 if 语句( 3)if-else 语句(4) switch 语句(1)#includemain()int x,y;pri

14、ntf( “请输入 x 的值: n ” );scanf( “%d” ,&x);if(x=0)y=x-1;if(x-5&x0&x10)y=x+1;printf( “ y=%dn” ,y);(2)#includemain()int x,y;printf( “请输入 x 的值: n ” );scanf( “%d” ,&x);if(x-5)if(x0)if(x10)y=x+1;if(x=0)y=x-1;Printf( “ y=%dn” ,y);(3)#includemain()int x,y;printf( “请输入 x 的值: n ” ); scanf( “%d” ,&x);if(x-5&x0)y=

15、x;else if(x=0)y=x-1;elsey=x+1;Printf( “ y=%dn” ,y);(4)#includemain()int x,y,i;printf( “请输入 x 的值: n ” ); scanf( “%d” ,&x);if(x-5&x0&x10) i=3;switch(i)程序总结:对于这个程序设计我建议大家采用第一种方法, 因为第一种方法是大众化的思路, 鉴于上机考试是机器阅卷,希望大家不要在上机试题上展现自己的个性。大家可 以在平常练习中,尝试多种方法解决同一问题,这样可以通过一个程序设计,巩 固多个知识点。第5章5-17编写程序,求1-3+5-7+-99+101的

16、值方法一:#includemain()int s,n,t,j;s=0;n=1;t=1;j=1;while(n=101) s=s+t;n+=2;j=-j;t=j*n;printf( “ 1-3+5-7+-99+10仁才,s);程序总结:(1)循环结构可用循环语句来实现,循环语句有三种: while,do-while,for ,循环 语句的使用场合是:数之间有规律可循并且是重复执行某项操作。(2)本程序设计是正负数交替求和, 所以必须单独定义一个变量, 通过每次乘以 -1 , 来实现正负交替。本题中的 j 就扮演了这个角色。(3)while 语句简介:功能是可实现循环结构。 While 与其后的括

17、号之间无空格, 括号里的表达式只要是合法的表达式即可,不过关系表达式最为常见。 While 的 管辖范围是紧跟在其后的一条“ C语句”(可以是单纯的一条C语句,也可以是用 花括号括起来的复合语句) 。程序设计最忌讳死循环, 所以说循环体中必须要有使 while 后表达式为假的趋势,这样才能正常的跳出循环体,从而避免死循环的出 现。方法二:#include#includemain() int a,b,c,s;a=1;b=1;c=1;s=0;while(fabs(c)=101)s+=c;b+=2;a=-a;c=a*b;printf( “ 1-3+5-7+-99+10仁才,s);程序总结:若程序中用

18、到了数学函数,就必须把 #include 加上5-18 编写程序,求 e 的值,1+1/1!+1/2!+1/3!+1/4!+ (1)用 for 循环,计算前 50 项。(2)用 while 循环,要求直至最后一项的值小于 10的-6 次方(1)方法一:#includemain()int m,n;float e=1.0,i=1.0,t;for(n=1;n=1;m-)t=t*m;i=1/t;e=e+i;printf( “e=%f” ,e);程序总结: for(t=1.0;m=1;m-) t=t*m; 实现的是阶乘的求法。方法二:#includemain()float a,b,c,e; e=1.0;

19、a=1.0;c=0;for(b=1.0;b50;b+)e+=c;c=1.0/(a*b);a=a*b;printf( “e=%f” ,e);程序总结: c=1.0/a*b; a=a*b; 这两句是阶乘的另一种实现方法。此算法的设计思路是:1! *2=2 ! , 2! *3=3 ! , 3! *4=4 ! 后一项的分母是前一项分母再乘以一 个有规律的数。(2)#includemain()float a=1.0,b=1.0,c=1.0,e=1.0;while(c=1e-6) e+=c;b+;c=1.0/(a*b);a=a*b;printf( “e=%fn ”,e);程序总结:1乘以10的-6次方,在

20、C语言中表示为1e-6。5-10 个年19 编写程序,输出从公元 2000 年至 3000 年所有闰年的年号,每输出 号换一行,判断公元年是否为闰年的条件是:(1) 公元年数如能被 4 整除,而不能被 100 整除,则是闰年。(2) 公元年数能被 400 整除也是闰年。#includemain() int i,j=0;for(i=2000;i=3000;i+) if(i%4=0&i%100!=0|i%400=0)printf( “i=%d” ,i);j+;if(j%10=0)printf( “n ”);printf( “n ”);程序设计:(1) int i,j=0; 这条语句中的 j=0 非

21、常必要,因为 j 的作用就是累计闰年的个数, 在所有的程序设计中,具有累计功能的变量都需要初始化为零。否则随机数会来 捣乱,从而导致最后累计结果的无意义。(2) if(j%10=0) 这是换行的一贯表示形式。(3)语句 printf( “n ”); 在程序的最后出现两次, 这两次的作用是不一样的, 前 者实现的是每 10 个闰年换行一次。后者的功能是让黑屏上的 press any key to continue 乖乖换行,从而提高程序输出结果的可读性。5-20 编写程序,打印以下图形: *#include main() int i,j,k;for(i=3;i=0;i-) for(k=1;k=i

22、;k+)Printf( “ ” );for(j=0;j7-i*2;j+)printf( “ * ” );printf( “ n ”);for(i=4;i7;i+)for(k=4;k=i;k+)printf( “ ” );for(j=3;j=15-i*2;j+)printf( “ * ” );printf( “ n ” );程序总结:(1) 类似图形的设计是有规律可循的, 比如此题: 空格的个数从上往下依 次是 3、2、1、0、1、2、3,星号的个数从上往下依次是 1、3、5、7、5、 3、1,并且上下两部分是对称的。(2) 本题中 for 循环的控制条件很难想出来, 大家只要把这个题记住就可以

23、,到时候稍微变一下型就可以。第6章6-19 请编写程序,输入一行字符(用回车结束) ,输出每个字符以及与之对应的 ASCII 代码值,每行输出三对。#includemain()int n=0;char c;while(c=getchar()!= n )n+;printf( “ASCII=%d,c=%c” ,c,c);if(n%3=0)printf( “n ”);putchar( n );程序总结:(1)字符型数据在内存中保存的是与之相对应的 ASCII 码值。大家要牢记的ASCII代码值有:数字字符O的ASCII值是48,字符 a的ASCII值 是65,字符 A的ASCII值是97,字符的AS

24、CII值是32,这4个 特殊字符的 ASCII 值必须记住。其他的只要在它们的基础上递推就可以。(2)在 printf 和 scanf 中所用到的 %后的字母,取决于输入输出项在定义时所 用的关键字。Int与小对应,float 与f对应,double 与lf对应,char 与。对应,long int 与%ld对应,short int 与hd对应。(3)本题中的语句 char c;和 printf( “ASCII=%d,c=%C ,c,c);貌似与(2)中讲 的理论相冲突,其实是可行的,由于字符型数据在内存中保存的是与之相 对应的ASCII码值,ASCII码值都是整型数,所以char既可以与c对

25、应, 也可以与d对应。(4) 注意语句 while(c=getchar()!= n ) 中括号的用法, 很多同学容易把(c=getchar() 外的这层括号忘掉,变成 while(c=getchar()!= n ),由于! =的优先级要高于 =,所以导致运算顺序的改变,最终引起结果的错误。(5)putchar( n ); 的功能仍然是让黑屏上的 press any key to continue 乖 乖换行,从而提高程序输出结果的可读性。 与 printf( “n ”); 是完全等价的。(6)getchar() 的功能是等待用户从键盘输入一个字符到内存,它的功能决定 了它的写法必须是赋给一个字

26、符型的内存变量,如本题的 c=getchar() 。6-20 请编写程序,输入一行数字字符(用回车结束) ,每个数字字符的前后 都有空格。请编程,把这一行中的数字转换成一个整数。 例如,若输入(代表 Enter 键): 2 4 8 3 , 则输出整数: 2483。#includemain()char ch,int i=0;while(ch=getchar()!= n )if(ch= 0 &ch= O &ch= 9不能写成O =ch= O &ch= O &ch= 9)和 i二i*1O+ch- O是一体的,是一条语句。而 while 恰恰只需要对这一条语句负责, 而不是对多条语句负责, 所以花括

27、号是多余的。( 3)大家要格外注意 i=i*1O+ch- O ; 这条语句,这条语句是本程序的一大亮点。6-21 请编写程序统计输入的行数,用!号结束输入, !号所在的行不计入行 数。#includemain() char ch;int i=0;while(ch=getchar()!= ! );if(ch= n ) i+;printf( “ %d” ,i);putchar( n );程序总结 : 本程序是要统计输入的行数,其实就是统计 n 出现的次数。 6-22 请编写程序统计输入的一行中小写字母的个数。#includemain()char ch;int i=0;while(ch=getchar()!= n )if(ch= a&ch= a &ch= z 不能写成a =ch= z 。6-23 请编写输出以下图案的程序,图案的行数由输入的整数值确定(每行中字符 之间没有空格)。 ABBBCCCCCDDDDDDDEEEEEEEEE#in

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1