收藏 分销(赏)

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

上传人:w****g 文档编号:6939944 上传时间:2024-12-23 格式:DOC 页数:30 大小:104.54KB
下载 相关 举报
C语言课后题编程答案.doc_第1页
第1页 / 共30页
C语言课后题编程答案.doc_第2页
第2页 / 共30页
C语言课后题编程答案.doc_第3页
第3页 / 共30页
C语言课后题编程答案.doc_第4页
第4页 / 共30页
C语言课后题编程答案.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

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

2、o。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小时%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除以%d商d余d,a,b,m,n).程序总结:(1)printf(“请输入两个整数:n”)。这是一个提示信息,避免用户在看到黑屏后不知所措。(2)scanf(“d%d”,a,b).scanf的功能是用户要通过键盘输入数据,赋值给各输入项。注意每个输入项前

4、面必须要加&符号。d与输入项的个数要一致,类型要匹配。%d与int一致,%f与float对应,%lf与double匹配,%c与char对应。319 编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果.#includestdio。hmain()double a,b,c,x. printf(“请输入三个双精度数:n”)。 scanf(“%lf%lf%lf”,a,&b,c)。x=(a+b+c)/3。x=x*10.x=x+0.5。x=(int)x.x=x/10.printf(“x=%.1lf”,x).程序总结:(1) double a,

5、b,c,x。 和scanf(“%lflf%lf”,a,b,c)。有直接联系,%lf与输入项a,b,c在定义时所用的类型double一致.(2)%.1lf, .1的意思是结果仅保留小数点后一位小数。320 编写程序,读入三个整数给a、b、c,然后交换他们中的数,把a中原来的值给b,把b中原来的值给c,把c中原来的值给a,然后输出a,b,c。#includestdio.hmain()int a,b,c,t。printf(“请输入三个整数:n”).scanf(“d%d%d”,a,&b,&c)。printf(“交换之前:a=d,b=%d,c=d”,a,b,c)。t=a。a=c。c=b。b=t。prin

6、tf(“交换之后:a=%d,b=d,c=d”,a,b,c).程序总结:交换两个变量的值和三个变量的值,都需要借助另外一个变量。第4章421 若a的值小于100,请将以下选择结构改写成由switch语句构成的选择结构。if(a30) m=1.else if(a40) m=2。else if(amain()int a。 printf(“enter a(a100):n”)。 scanf(“d,a)。printf(“a=dn,a)。switch(a/10)case 0:case 1:case 2:printf(“m=1n”)。break。case 3:printf(“m=2n”).break。case

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

8、,转去执行default语句,然后依次顺序执行default语句后其他的switch语句,直到遇到break语句,则彻底跳出switch 语句体.(4) break语句可出现在循环语句体和switch 语句体内,目的是彻底跳出循环体和switch 语句体。(5) case和其后的标号之间必须要加空格。422编写程序,输入一位学生的生日(年:y0、月m0、日d0),并输入当前的日期(年:y1、月m1、日d1),输出该生的实际年龄。includestdio.hmain()int y0,m0,d0,y1,m1,d1,age;printf(“输入一位学生的生日:n”).scanf(“d%d%d”,&y

9、0,m0,d0)。printf(“输入当前日期:n”).scanf(“%dd%d”,y1,m1,&d1)。age=y1y0。if(m1m0|m0=m1d1d0)age-。printf(“age=dn,age)。程序总结:(1) if(m1m0|m0=m1&d0d1),在程序设计中,要学会用逻辑与、或、非代替复杂的if语句嵌套.(2) 在printf语句中,要尽量加上n,这样可以避免黑屏上的结束语press any key to continue 出现在有价值的输出结果的后面,而是换行输出。这样就提高了程序输出结果的可读性。(3) 通过本设计,要加强对变量起名艺术性的认识。4-23编写程序,输入

10、一个整数,打印出它是奇数还是偶数。includemain()int x,y.printf(“请输入一个整数:n”)scanf(“%d”,x)。y=x2。if(y=0) printf(“d是一个偶数!n”,x)。else printf(“%d是一个奇数!n”,x)。程序总结:y=x2。这是判断一个数是奇数还是偶数的一贯表示方式。计算机中的等号是双等号,与数学中的等号不一样。424编写程序,输入a,b,c三个数,打印出最大者。方法一:includestdio.hmain()int a,b,c,max。printf(“请输入三个数:n)。scanf(“%d%d%d”,&a,b,c).if(ab)if

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

12、(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)。程序总结:(1) 方法一利用ifelse的嵌套来进行程序设计,极易容易出错。而方法二采用三个if语句的并列来实现,同样可以求出最大值。(2) 方法二算法分析:第一个if语句结束后,b中保存a和b中的较大值;第二个if语句结束后,c中保存a和c中的较大值;第三个if语句结束后,c中保存b和c中的较大值;三次比较后,c中的值就是三个数中最大的.(3) 现实生活中,交换两盆水必须要借助第三个盆子;在程序设计中,要想实现两个变量中值的交换,就必须借助第三个变

13、量。4-25 对于以下函数:Y=x(5x0),y=x-1(x=0),y=x+1(0x10),编写程序,要求输入x的值,输出y的值.分别用:(1)不嵌套的if语句(2)嵌套的if语句(3)ifelse语句(4)switch语句(1)#includemain()int x,y。printf(“请输入x的值:n”).scanf(“%d”,&x).if(x=0)y=x1。if(x-5&x0)y=x。if(x0&x10)y=x+1.printf(“y=dn,y)。(2)#include-5)if(x0) y=x.if(x0) if(x10) y=x+1.if(x=0) y=x1.Printf(“y=dn

14、,y)。(3)#includemain()int x,y。printf(“请输入x的值:n”)。scanf(“%d,x)。if(x5x0) y=x。else if(x=0) y=x1。 else y=x+1。Printf(“y=dn”,y)。(4)includestdio.hmain()int x,y,i。printf(“请输入x的值:n”).scanf(“d”,&x).if(x5&x0) i=1。if(x=0) i=2。if(x0&x10) i=3。switch(i) case 1:y=x。printf(“x=%d,y=dn”,x,y)。break。 case 2:y=x-1。printf(

15、“x=d,y=dn”,x,y).break。case 3:y=x1。printf(“x=d,y=dn”,x,y)。程序总结:对于这个程序设计我建议大家采用第一种方法,因为第一种方法是大众化的思路,鉴于上机考试是机器阅卷,希望大家不要在上机试卷上展现自己的个性。大家可以在平常练习中,尝试多种方法解决同一问题,这样可以通过一个程序设计,巩固多个知识点。第5章517编写程序,求1-3+57+99+101的值.方法一:includestdio。hmain()int s,n,t,j。s=0。 n=1。 t=1。j=1。while(nmain()int a,b,c,s。 a=1。b=1。c=1。s=0.w

16、hile(fabs(c)=101) s+=c。b+=2。a=a。c=a*b。printf(“1-3+5-7+99+101=d,s)。程序总结:若程序中用到了数学函数,就必须把includemath。h加上。5-18编写程序,求e的值,e1+1/1!+1/2!+1/3!+1/4!+(1)用for循环,计算前50項。(2)用while循环,要求直至最后一项的值小于10的-6次方。 (1) 方法一:#includestdio。hmain()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)。程

17、序总结:for(t=1。0。m=1。m) t=t*m。实现的是阶乘的求法.方法二:#includestdio。hmain()float a,b,c,e。e=1.0。a=1.0.c=0。for(b=1。0.b50。b+)e+=c。c=1.0/(a*b)。a=ab。printf(“e=%f”,e)。程序总结:c=1。0/ab。a=ab.这两句是阶乘的另一种实现方法。此算法的设计思路是: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+

18、=c。 b+。c=1.0/(a*b)。a=ab。printf(“e=%fn”,e)。程序总结:1乘以10的6次方,在C语言中表示为1e-6。5-19编写程序,输出从公元2000年至3000年所有闰年的年号,每输出10个年号换一行,判断公元年是否为闰年的条件是:(1)公元年数如能被4整除,而不能被100整除,则是闰年。(2)公元年数能被400整除也是闰年.#includestdio.hmain() int i,j=0。for(i=2000。i=3000.i+) if(i%4=0&i100!=0i%400=0)printf(“i=d”,i)。j+。if(j10=0) printf(“n”).pri

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

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

21、一下型就可以。第6章6-19 请编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的ASCII代码值,每行输出三对。includemain()char ch,int i=0. while(ch=getchar()!=n)if(ch=0ch=9) i=i*10+ch0。printf(“d”,i).putchar(n)。程序总结:(1)ch=0&ch=9不能写成0=0ch=9) i=i10+ch0。红色标记的这对儿花括号是完全没有必要的,因为if(ch=0&chmain()char ch。 int i=0。 while((ch=getchar())!=!)。 if(ch=n) i+。

22、printf(“d,i). putchar(n)。程序总结:本程序是要统计输入的行数,其实就是统计n出现的次数。6-22 请编写程序统计输入的一行中小写字母的个数。#includestdio.hmain()char ch。int i=0.while((ch=getchar()!=n) if(ch=a&ch=z) i+. printf(“d”,i)。 putchar(n).程序总结:ch=ach=z不能写成a=ch=z。623 请编写输出以下图案的程序,图案的行数由输入的整数值确定(每行中字符之间没有空格)。A BBBCCCCCDDDDDDDEEEEEEEEEincludemain()int i

23、,j,k,m,n.char ch。printf(“Enter n:n).scanf(“%d”,&n)。for(i=1。i=i.k- )putchar(“”)。for(j=1。j=m.j+)putchar(ch)。printf(“n”)。第7章715编写函数int mymod(int a,int b)用以求a被b除之后的余数。int mymod(int a,int b)int s。 s=ab。 return s。程序总结:(1) 函数定义分为两部分,函数首部和函数体。结合本题,函数首部是int mymod(int a,int b),函数体是花括号内的所有语句。(2) int mymod(int

24、a,int b)中的int 是函数的返回值类型,return后的表达式是函数的返回值,所以int 类型的书写,是根据return后表达式的类型而定的,必须要保证两处的一致性。要是函数体中没有return语句,或是只有return这个单词,其后没有表达式,则认定为该函数没有返回值.那么函数首部中int 就要改写成void。要是函数首部省略函数的返回值类型,写成mymod(int a,int b)的形式,并不表示该函数没有返回值,而是系统默认该函数的返回值为int 类型。(3) int mymod(int a,int b)中的mymod是函数名,只要符合标识符的命名规则即可,尽量做到见名知义.(4

25、) int mymod(int a,int b)中的a, b是该函数的两个形参.形参的个数取决于题目的实际需要,形参前的类型名一定不能少。(5) return s。语句的功能是把该被调用函数得到的结果返回调用函数。用return语句只能带回一个数据。要想返回多个数据,必须用到后面的知识点:传址。(6) %(取余运算符)是双目运算符,其左右的两个运算符必须都是整型数。7-16编写函数,根据整型形参n的值,计算如下公式的值:1-1/2+1/31/4+1/5-1/6+1/7floatres(int n)int i=1。float e=0,m,j.for(j=1.0。j=n。j+)m=1/j。e+=i

26、m。i=-i。return e。程序总结:(1) 要注意m=1/j.中的1/j,若是把j的类型定义成int 类型的,只要1和j(j大于1)进行整除运算,统统为0。只要把j的类型定义成float类型,这种情况即可避免.举例:1/2=0,而1/2.0=0.5,1.0/2=0。5,1.0/2.0=0.5,运算结果的类型取决于两操作数中较大的类型,双目运算符在运算之前,首先要统一两操作数的类型(统一的原则请参看附录5)。717编写函数,根据整型形参m的值,计算如下公式的值:t=1-1/2*2-1/3*3-float fun(int m)float i,t=1,n. for(n=2。n=m。n+)i=-

27、1/(nn)。t+=i。return t.718编写函数用以求表达式x*x-5x+4的值,x作为参数传送给函数,调用此函数求:y1=2*25*2+4y2=(x+15)(x+15)+4y3=sinxsinx5sinx+4y1的值为-2。0;x为0.5时,y2的值为166.75,y3的值为1.832721double fun(double x)double y。y=xx-5*x+4。return y。第8章8-17请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。Void fun(float a,float b,float m,float *n)*m=a+b.*n

28、=ab。程序总结:本题的要求是在调用函数中传递两数到被调用函数,在被调用函数中求出和值和差值,然后传送到调用函数。显然return语句无能为力,因为return语句仅能返回一个数据。像这样涉及到多个数据的传递的必须要用到传址运算.8-18请编写函数,对传送过来的三个数选出最大数和最小数,并通过形参传回调用函数。void fun(float *a,floatb,float *c)float t。if(a*b)t=*a。*a=b。b=t。if(a*c)t=*a。*a=c。*c=t。if(bc)t=b。b=c。c=t。程序总结:本函数的设计思路是:在被调用函数中利用指针远程遥控,把三个数按从大到小的

29、顺序排好,然后在调用函数中输出最大数a和最小数c。第9章9-27输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。用下标为0的元素统计字符0的个数,下标为1的元素统计字符1的个数,.#includestdio.hmain()char ch。int num10=0。printf(“请输入一行字符:n”)。while((c=getchar()!=n)if(ch=0ch=9)numch0+=1。for(i=0。i10。i+)printf(“numd=%dn”,i,numi).程序总结:(1)ch=0&ch=9,注意这个表达式的写法。千万不能写成0=chvoid move(int w,

30、int n)int i.for(i=n-1。i10。i+)wi=wi+1。main()int a10,n,i。printf(“给数组a赋值:n”)。for(i=0。i10.i+)scanf(“d”,ai)。printf(“请输入n(0n10)的值:n”)。scanf(“%d,&n)。move(a,n)。for(i=0。i#define M 100int fun(int *p,int q,int n)int i,s=0。 for(i=0。in。i+)if(pi%2!=0)q=pi。 q+. s+。return s。main()int aM,bM,i,j。printf(“给数组a赋值:n”)。for(i=0.iM.i+) scanf(“d”,&ai)。j=fun(a,b,M)。printf(“数组中的所有奇数为:n”).for(i=0。iai)p=i。if(p!=j)t=aj。aj=ap。ap=t。第九章的其他编程题难度较大,不做要求。30 / 30

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服