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

上传人:b****1 文档编号:15239412 上传时间:2023-07-02 格式:DOCX 页数:28 大小:24.93KB
下载 相关 举报
C语言课后题编程标准答案.docx_第1页
第1页 / 共28页
C语言课后题编程标准答案.docx_第2页
第2页 / 共28页
C语言课后题编程标准答案.docx_第3页
第3页 / 共28页
C语言课后题编程标准答案.docx_第4页
第4页 / 共28页
C语言课后题编程标准答案.docx_第5页
第5页 / 共28页
C语言课后题编程标准答案.docx_第6页
第6页 / 共28页
C语言课后题编程标准答案.docx_第7页
第7页 / 共28页
C语言课后题编程标准答案.docx_第8页
第8页 / 共28页
C语言课后题编程标准答案.docx_第9页
第9页 / 共28页
C语言课后题编程标准答案.docx_第10页
第10页 / 共28页
C语言课后题编程标准答案.docx_第11页
第11页 / 共28页
C语言课后题编程标准答案.docx_第12页
第12页 / 共28页
C语言课后题编程标准答案.docx_第13页
第13页 / 共28页
C语言课后题编程标准答案.docx_第14页
第14页 / 共28页
C语言课后题编程标准答案.docx_第15页
第15页 / 共28页
C语言课后题编程标准答案.docx_第16页
第16页 / 共28页
C语言课后题编程标准答案.docx_第17页
第17页 / 共28页
C语言课后题编程标准答案.docx_第18页
第18页 / 共28页
C语言课后题编程标准答案.docx_第19页
第19页 / 共28页
C语言课后题编程标准答案.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《C语言课后题编程标准答案.docx》由会员分享,可在线阅读,更多相关《C语言课后题编程标准答案.docx(28页珍藏版)》请在冰点文库上搜索。

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

C语言课后题编程标准答案

C语言课后题编程答案

所有章节的课后习题的选择题和填空题大家必须熟练掌握,编程题掌握到第九章即可。

希望大家通过课后的编程题熟悉典型的编程算法,掌握基本的编程思路,注意编程细节。

第3章

3-17编写程序,把560分钟换算成用小时和分钟表示,然后进行输出。

#include

main()

{inth,m。

h=560/60。

m=560%60。

printf(“560分钟可转换成%d小时%d分钟”,h,m)。

}

程序总结:

(1)只要在程序中用到系统提供的库函数,必须把库函数所在的头文件用#include命令包含进来。

否则库函数的使用无效。

输入输出库函数的头文件是:

stdio.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第一个参数要尽量详细,这样可以提高输出结果的可读性,恰当好处的添加提示性信息,可以提高程序的质量。

(4)inth,m。

变量起名要有艺术性,尽量做到见名知意。

3-18编写程序,输入两个整数,1500和350,求出它们的商和余数并进行输出。

#include

main()

{inta,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的功能是用户要通过键盘输入数据,赋值给各输入项。

注意每个输入项前面必须要加&符号。

%d与输入项的个数要一致,类型要匹配。

%d与int一致,%f与float对应,%lf与double匹配,%c与char对应。

3-19编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。

#include

main()

{doublea,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)doublea,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。

#include

main()

{inta,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。

printf(“交换之后:

a=%d,b=%d,c=%d”,a,b,c)。

}

程序总结:

交换两个变量的值和三个变量的值,都需要借助另外一个变量。

第4章

4-21若a的值小于100,请将以下选择结构改写成由switch语句构成的选择结构。

if(a<30)m=1。

elseif(a<40)m=2。

elseif(a<50)m=3。

elseif(a<60)m=4。

elsem=5。

#include

main()

{inta。

printf(“entera(a<100):

\n”)。

scanf(“%d”,&a)。

printf(“a=%d\n”,a)。

switch(a/10)

{case0:

case1:

case2:

printf(“m=1\n”)。

break。

case3:

printf(“m=2\n”)。

break。

case4:

printf(“m=3\n”)。

break。

case5:

printf(“m=4\n”)。

break。

default:

printf(“m=5\n”)。

}

}

程序总结:

(1)选择结构的实现除了使用if语句以外,还可以使用switch语句来实现。

(2)switch后的表达式和case后的标号的类型要一致,switch后的表达式直接决定了switch语句体的执行入口。

执行完入口的case语句后,依次顺序往下执行,直到遇到break语句就彻底跳出switch语句体,转去执行switch语句体后的语句。

(3)default语句可有可无,位置无所谓,当switch后的表达式和所有case后的标号都不一致时,转去执行default语句,然后依次顺序执行default语句后其他的switch语句,直到遇到break语句,则彻底跳出switch语句体。

(4)break语句可出现在循环语句体和switch语句体内,目的是彻底跳出循环体和switch语句体。

(5)case和其后的标号之间必须要加空格。

4-22编写程序,输入一位学生的生日(年:

y0、月m0、日d0),并输入当前的日期(年:

y1、月m1、日d1),输出该生的实际年龄。

#include

main()

{inty0,m0,d0,y1,m1,d1,age;

printf(“输入一位学生的生日:

\n”)。

scanf(“%d%d%d”,&y0,&m0,&d0)。

printf(“输入当前日期:

\n”)。

scanf(“%d%d%d”,&y1,&m1,&d1)。

age=y1-y0。

if(m1

age--。

printf(“age=%d\n”,age)。

}

程序总结:

(1)if(m1

(2)在printf语句中,要尽量加上\n,这样可以避免黑屏上的结束语pressanykeytocontinue出现在有价值的输出结果的后面,而是换行输出。

这样就提高了程序输出结果的可读性。

(3)通过本设计,要加强对变量起名艺术性的认识。

4-23编写程序,输入一个整数,打印出它是奇数还是偶数。

#include

main()

{intx,y。

printf(“请输入一个整数:

\n”)

scanf(“%d”,&x)。

y=x%2。

if(y==0)

printf(“%d是一个偶数!

\n”,x)。

else

printf(“%d是一个奇数!

\n”,x)。

}

程序总结:

y=x%2。

这是判断一个数是奇数还是偶数的一贯表示方式。

计算机中的等号是双等号,与数学中的等号不一样。

4-24编写程序,输入a,b,c三个数,打印出最大者。

方法一:

#include

main()

{inta,b,c,max。

printf(“请输入三个数:

\n”)。

scanf(“%d%d%d”,&a,&b,&c)。

if(a>b)

{if(a>c)

max=a。

else

max=c。

}

else

{if(b>c)

max=b。

else

max=c。

}

printf(“max=%d”,max)。

}

程序总结:

利用if-else的嵌套,可求出一组数的最大值和最小值。

在if-else的嵌套中,要格外注意if和else的配对问题。

配对的原则是:

从最后一个else开始,寻找与其配对的if,找的原则是离else最近的还没有配对的if就是该else的配对对象。

if和else的配对一旦出问题,输出结果全错。

方法二:

#include

main()

{inta,b,c,t。

printf(“请输入三个数:

\n”)。

scanf(“%d%d%d”,&a,&b,&c)。

if(a>b)

{t=a。

a=b。

b=t。

}

if(a>c)

{t=a。

a=c。

c=t。

}

if(b>c)

{t=b。

b=c。

c=t。

}

printf(“最大值为:

%d”,c)。

}

程序总结:

(1)方法一利用if-else的嵌套来进行程序设计,极易容易出错。

而方法二采用三个if语句的并列来实现,同样可以求出最大值。

(2)方法二算法分析:

第一个if语句结束后,b中保存a和b中的较大值;第二个if语句结束后,c中保存a和c中的较大值;第三个if语句结束后,c中保存b和c中的较大值;三次比较后,c中的值就是三个数中最大的。

(3)现实生活中,交换两盆水必须要借助第三个盆子;在程序设计中,要想实现两个变量中值的交换,就必须借助第三个变量。

4-25对于以下函数:

Y=x(-5

分别用:

(1)不嵌套的if语句

(2)嵌套的if语句(3)if-else语句(4)switch语句

(1)#include

main()

{intx,y。

printf(“请输入x的值:

\n”)。

scanf(“%d”,&x)。

if(x==0)

y=x-1。

if(x>-5&&x<0)

y=x。

if(x>0&&x<10)

y=x+1。

printf(“y=%d\n”,y)。

}

(2)#include

main()

{intx,y。

printf(“请输入x的值:

\n”)。

scanf(“%d”,&x)。

if(x>-5)

if(x<0)

y=x。

if(x>0)

if(x<10)

y=x+1。

if(x==0)

y=x-1。

Printf(“y=%d\n”,y)。

}

(3)#include

main()

{intx,y。

printf(“请输入x的值:

\n”)。

scanf(“%d”,&x)。

if(x>-5&&x<0)

y=x。

elseif(x==0)

y=x-1。

else

y=x+1。

Printf(“y=%d\n”,y)。

}

(4)#include

main()

{intx,y,i。

printf(“请输入x的值:

\n”)。

scanf(“%d”,&x)。

if(x>-5&&x<0)i=1。

if(x==0)i=2。

if(x>0&&x<10)i=3。

switch(i)

{case1:

y=x。

printf(“x=%d,y=%d\n”,x,y)。

break。

case2:

y=x-1。

printf(“x=%d,y=%d\n”,x,y)。

break。

case3:

y=x-1。

printf(“x=%d,y=%d\n”,x,y)。

}

}

程序总结:

对于这个程序设计我建议大家采用第一种方法,因为第一种方法是大众化的思路,鉴于上机考试是机器阅卷,希望大家不要在上机试卷上展现自己的个性。

大家可以在平常练习中,尝试多种方法解决同一问题,这样可以通过一个程序设计,巩固多个知识点。

第5章

5-17编写程序,求1-3+5-7+…-99+101的值。

方法一:

#include

main()

{ints,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+101=%d”,s)。

}

程序总结:

(1)循环结构可用循环语句来实现,循环语句有三种:

while,do-while,for,循环语句的使用场合是:

数之间有规律可循并且是重复执行某项操作。

(2)本程序设计是正负数交替求和,所以必须单独定义一个变量,通过每次乘以-1,来实现正负交替。

本题中的j就扮演了这个角色。

(3)while语句简介:

功能是可实现循环结构。

While与其后的括号之间无空格,括号里的表达式只要是合法的表达式即可,不过关系表达式最为常见。

While的管辖范围是紧跟在其后的一条“C语句”(可以是单纯的一条C语句,也可以是用花括号括起来的复合语句)。

程序设计最忌讳死循环,所以说循环体中必须要有使while后表达式为假的趋势,这样才能正常的跳出循环体,从而避免死循环的出现。

方法二:

#include

#include

main()

{inta,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+101=%d”,s)。

}

程序总结:

若程序中用到了数学函数,就必须把#include加上。

5-18编写程序,求e的值,e≈1+1/1!

+1/2!

+1/3!

+1/4!

+…

(1)用for循环,计算前50項。

(2)用while循环,要求直至最后一项的值小于10的-6次方。

(1)方法一:

#include

main()

{intm,n。

floate=1.0,i=1.0,t。

for(n=1。

n<=50。

n++)

{m=n。

for(t=1.0。

m>=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。

实现的是阶乘的求法。

方法二:

#include

main()

{floata,b,c,e。

e=1.0。

a=1.0。

c=0。

for(b=1.0。

b<50。

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)#include

main()

{floata=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=%f\n”,e)。

}

程序总结:

1乘以10的-6次方,在C语言中表示为1e-6。

5-19编写程序,输出从公元2000年至3000年所有闰年的年号,每输出10个年号换一行,判断公元年是否为闰年的条件是:

(1)公元年数如能被4整除,而不能被100整除,则是闰年。

(2)公元年数能被400整除也是闰年。

#include

main()

{inti,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)inti,j=0。

这条语句中的j=0非常必要,因为j的作用就是累计闰年的个数,在所有的程序设计中,具有累计功能的变量都需要初始化为零。

否则随机数会来捣乱,从而导致最后累计结果的无意义。

(2)if(j%10==0)这是换行的一贯表示形式。

(3)语句printf(“\n”)。

在程序的最后出现两次,这两次的作用是不一样的,前者实现的是每10个闰年换行一次。

后者的功能是让黑屏上的pressanykeytocontinue乖乖换行,从而提高程序输出结果的可读性。

5-20编写程序,打印以下图形:

*

***

*****

*******

*****

***

*

#include

main()

{inti,j,k。

for(i=3。

i>=0。

i--)

{for(k=1。

k<=i。

k++)

Printf(“”)。

for(j=0。

j<7-i*2。

j++)

printf(“*”)。

printf(“\n”)。

}

for(i=4。

i<7。

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循环的控制条件很难想出来,大家只要把这个题记住就可以,到时候稍微变一下型就可以。

第6章

6-19请编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的ASCII代码值,每行输出三对。

#include

main()

{intn=0。

charc。

while((c=getchar())!

=’\n’)

{n++。

printf(“ASCII=%d,c=%c”,c,c)。

if(n%3==0)

printf(“\n”)。

}

putchar(‘\n’)。

}

程序总结:

(1)字符型数据在内存中保存的是与之相对应的ASCII码值。

大家要牢记的ASCII代码值有:

数字字符’0’的ASCII值是48,字符‘a’的ASCII值是65,字符‘A’的ASCII值是97,字符‘’的ASCII值是32,这4个特殊字符的ASCII值必须记住。

其他的只要在它们的基础上递推就可以。

(2)在printf和scanf中所用到的%后的字母,取决于输入输出项在定义时所用的关键字。

Int与%d对应,float与%f对应,double与%lf对应,char与%c对应,longint与%ld对应,shortint与%hd对应。

(3)本题中的语句charc。

和printf(“ASCII=%d,c=%c”,c,c)。

貌似与

(2)中讲的理论相冲突,其实是可行的,由于字符型数据在内存中保存的是与之相对应的ASCII码值,ASCII码值都是整型数,所以char既可以与%c对应,也可以与%d对应。

(4)注意语句while((c=getchar())!

=’\n’)中括号的用法,很多同学容易把(c=getchar())外的这层括号忘掉,变成while(c=getchar()!

=’\n’),由于!

=的优先级要高于=,所以导致运算顺序的改变,最终引起结果的错误。

(5)putchar(‘\n’)。

的功能仍然是让黑屏上的pressanykeytocontinue乖乖换行,从而提高程序输出结果的可读性。

与printf(“\n”)。

是完全等价的。

(6)getchar()的功能是等待用户从键盘输入一个字符到内存,它的功能决定了它的写法必须是赋给一个字符型的内存变量,如本题的c=getchar()。

6-20请编写程序,输入一行数字字符(用回车结束),每个数字字符的前后都有空格。

请编程,把这一行中的数字转换成一个整数。

例如,若输入(代表Enter键):

2483,则输出整数:

2483。

#include

main()

{charch,inti=0。

while((ch=getchar())!

=’\n’)

if(ch>=’0’&&ch<=’9’)

i=i*10+ch-‘0’。

printf(“%d”,i)。

putchar(‘\n’)。

}

程序总结:

(1)ch>=’0’&&ch<=’9’不能写成’0’<=ch<=’9’。

数字字符转换成相应的数字,程序实现为:

ch=ch-‘0’。

大写字母转换成小写字母,程序实现为:

ch=ch-‘A’+’a’。

小写字母转换成大写字母,程序实现为:

ch=ch-‘a+’A’。

(2)while((c=getchar())!

=’\n’)

{if(ch>=’0’&&ch<=’9’)

i=i*10+ch-‘0’。

}

红色标记的这对儿花括号是完全没有必要的,因为if(ch>=’0’&&ch<=’9’)和i=i*10+ch-‘0’是一体的,是一条语句。

而while恰恰只需要对这一条语句负责,而不是对多条语句负责,所以花括号是多余的。

(3)大家要格外注意i=i*10+ch-‘0’。

这条语句,这条语句是本程序的一大亮点。

6-21请编写程序统计输入的行数,用!

号结束输入,!

号所在的行不计入行数。

#include

main()

{charch。

inti=0。

while((ch=getchar())!

=’!

’)。

if(ch==’\n’)i++。

printf(“%d”,i)。

putchar(‘\n’)。

}

程序总结:

本程序是要统计输入的行数,其实就是统计’\n’出现的次数。

6-22请编写程序统计输入的一行中小写字母的个数。

#include

main()

{charch。

inti=0。

while((ch=getchar())!

=’\n’)

if(ch>=’a’&&ch<=’z’)

i++。

printf(“%d”,i)。

putchar(‘\n’)。

}

程序总结:

ch>=’a’&&ch<=’z’不能写成’a’<=ch<=’z’。

6-23请编写输出以下图案的程序,图案的行数由输入的整数值确定(每行中字符之间没有空格)。

A

BBB

CCCCC

DDDDDDD

EEEEEEEEE

#include

main()

{inti,j,k,m,n。

charch。

printf(“Entern:

\n”)。

scanf(“%d”,&n)。

for(i=1。

i<=n。

i++)

{ch=’A’+i-1。

m=2*i-1。

for(k=n。

k>=i。

k--)

putchar(“”)。

for(j=1。

j<=m。

j++)

putchar(ch)。

printf(“\n”)。

}

}

第7

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

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

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