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

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

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

《C语言程序设计》课后习题详细答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计》课后习题详细答案.docx(64页珍藏版)》请在冰点文库上搜索。

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

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

《全国计算机等级考试二级教程——C语言程序设计》

习题分析与详细解答

第一章程序设计基本概念习题分析与解答

1.1【参考答案】EXE

1.2【参考答案】[1].C[2].OBJ[3].EXE

1.3【参考答案】[1]顺序结构[2]选择结构[3]循环结构

第二章C程序设计的初步知识习题分析与解答

一、选择题

2.1【参考答案】B)

2.2【参考答案】D)

2.3【参考答案】B)

2.4【参考答案】A)

2.5【参考答案】C)

2.6【参考答案】A)

2.7【参考答案】B)

2.8【参考答案】B)

2.9【参考答案】D)

2.10【参考答案】C)

2.11【参考答案】B)

2.12【参考答案】B)

2.13【参考答案】A)

二、填空题

2.14【参考答案】[1]11[2]12

2.15【参考答案】[1]4.2[2]4.2

2.16【参考答案】[1]{[2]}[3]定义[4]执行

2.17【参考答案】[1]关键字[2]用户标识符

2.18【参考答案】[1]int[2]float[3]double

2.19【参考答案】floata1=1.0,a2=1.0;

或floata1=1,a2=1;(系统将自动把1转换为1.0)

2.20【参考答案】存储单元

2.21【参考答案】3.5

2.22【参考答案】[1]a*b/c[2]a/c*b[3]b/c*a

2.23【参考答案】把10赋给变量s

2.24【参考答案】[1]位[2]1位二进制数据(0或1)

2.25【参考答案】[1]8[2]127[3]01111111[4]-128[5]10000000

2.26【参考答案】[1]32767[2]-32768[3]1000000000000000

2.27【参考答案】[1]十[2]八[3]十六

三、上机改错题

2.28【分析与解答】

第1行的错误:

(1)include是一个程序行,因此在此行的最后不应当有分号(;)。

第2行的错误:

(1)main()是主函数的起始行,不是语句,因此最后不应当有分号(;)。

(2)在同一行上的/*mainfunction*/显然是注释;C语言规定:

注释由/*开头,由*/结束,但在*号和/之间不得插入任何空格,而在此处“/*”和“*/”之间存在空格,因此,/*mainfunction*/的写法是错误的,而应写成:

/*mainfunction*/。

第3行的错误:

(1)在主函数的起始行main()的后面是函数体,函数体由左花括号({}开始。

但在函数体的第一行:

float的前面缺少了左花括号({}。

(2)在同一行上的/*/*risradius*/,/*sisareaofcircular*/*/显然是注释;C语言规定:

注释由/*开头,由*/结束,并且开头的/*将去找最近的*/去配对,因此在/*/*risradius*/中,第一个/*与radius后的那个*/配上了对,结果紧跟在后面的那个逗号(,)落在了注释的外面,而构成了一个多余符号,为此,在编译时将报告“语法错”。

/*sisareaofcircular*/*/中第一个*/就结束了注释,第一个*/就成了多余的了。

第6行的错误:

(1)printf(″%f\n″,s)应当是一条输出语句,但在最后缺少了一个分号。

(2)printf(″%f\n″,s);是程序的最后一条语句,程序应当结束;但缺少了程序体结束所需的右花括号());此右花括号可以放在printf(″%f\n″,s);的后面,也可以放在printf(″%f\n″,s);的下一行上。

2.27【分析与解答】

第2行的错误:

在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.16【参考答案】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=-200

j=2500

3.22【参考答案】[1]12[2]0[3]0

3.23【参考答案】[1]一条语句[2]分号(或;)

3.24【参考答案】分号(;)

3.25【参考答案】

[1]:

10025.811.89234

[2]:

100

25.81

1.89234

[3]:

10025.811.89234

3.26【参考答案】x=127,x=127,x=177,x=7f,x=127

3.27【参考答案】x=127,x=127,x=$127,x=$000127,x=%06d

3.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从定义和计算结果来看都是double类型,因此,第四行scanf语句格式串中的格式说明不应当用%d而应当用%lf;且每一个变量之前应该加地址运算符&。

(4)第七行的printf语句中应当把%d都改成%lf或%f;按输出要求在格式串中应添加相应的原样输出的字符;因为下一个printf的输出从新的一行开始,因此在本输出语句的格式串的最后应当加换行符——\n。

(5)第八行的printf语句中应当把格式串整理合并放在输出项的前面,输出项放在后面,%d都改成%lf或%f;中间的\n删去。

(6)请同学们自己写出修改后的程序,并上机调试。

3.30【分析与解答】

(1)分析:

可用算术式560÷60把分钟换算成小时和分钟,商数就是小时数,余数就是分钟数。

(2)确定变量的名字和定义变量的类型:

在程序中把小时数放在变量h中,把分钟数放在变量m中。

这两个变量的类型可以是整型(本题中采用整型),也可以是实型。

(3)确定所用算法:

求560÷60的商数,在C语言中可以用整除的算法,语句是h=560/60;。

求余数可用求余运算符%:

560%60,其值放入变量m中的语句是:

m=560%60;。

(4)设计输出格式。

若输出的形式定为:

小时:

分钟,则按此形式设计输出语句。

(5)把以上内容放在主函数的一对花括号中。

(6)编写程序如下:

main()

{inth,m;

h=560/60;

m=560%60;

printf(″Theresult:

%3d:

%3d\n″,h,m);

}

运行结果是:

Theresult:

9:

20

3.31【分析与解答】

(1)确定变量的名字和定义变量的类型。

若用a存放1500,用b存放350;用q存放商数,用r存放余数,所有变量应定义成int类型。

(2)设计输入语句从终端输入1500和350;在输入语句之前,应当设计一个输出语句,用以提示输入。

(3)可用整除求商数,结果放在变量q中。

可用求余运算符%求两数之余数,结果放在变量r中。

(4)设计输出语句。

输出a、b、q、r。

(5)把以上内容放在主函数的一对花括号中。

本题的程序与3.30相似,请大家参考上题并根据本题的解释自己编程,并上机调试。

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)若要求对小数点后第二位数进行四舍五入,则可对原数加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()

{doublea,b,c,ave;

printf(″Entera,b,c:

″);

scanf(″%lf%lf%lf″,&a,&b,&c);

ave=(a+b+c)/3;

printf(″ave=%f\n″,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=%f\n″,a,b,c,ave);

}

3.33【分析与解答】

(1)关于对变量中的数进行交换的算法请参考3.7题中的解释和《教程》中有关的例题。

(2)定义4个整型变量a、b、c和t,变量a、b、c分别存放读入的3个整数,t用作临时存储单元。

(3)设计输入语句,以及在此之前用于提示输入的(printf)语句。

(4)输出a、b、c中的值,以便于比较。

(5)交换的步骤如下:

①把c中的值赋给t。

②把b中的值赋给c。

③把a中的值赋给b。

④把t中的值赋给a。

经过以上步骤,已按要求进行了交换。

(6)输出a、b、c中的值。

(7)编写程序如下:

main()

{inta,b,c,t;

printf(″Entera,b,c:

\n″);

scanf(″%d%d%d″,&a,&b,&c);

printf(″

(1)a=%d,b=%d,c=%d\n″,a,b,c);

t=c;c=b;b=a;a=t;

printf(″

(2)a=%d,b=%d,c=%d\n″,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][JB>1|][JB>1|]

4.14【参考答案】[1]:

!

[KG-*2](逻辑非)

[2]:

<、>、<=、>=(小于、大于、小于等于、大于等于)

[3]:

==、!

[KG-*2]=(等于、不等)

[4]:

&&(逻辑与)[5]:

[JB>1|][JB>1|](逻辑或)。

4.15【参考答案】!

4.16【参考答案】[1]a=b或a1|]x[JB>1|]>4

4.17【参考答案】1

4.18【参考答案】[1]x<=0[2]1

4.19【参考答案】[1]3[2]2[3]2

4.20【参考答案】*#

三、编程题

4.21【分析与解答】相关内容请参考《教程》4.2节和4.4节。

(1)改写如下:

switch(a/10)

{default:

m=5;break;

case0:

case1:

case2:

m=1;break;

case3:

m=2;break;

case4:

m=3;break;

case5:

m=4;break;

};

(2)本题中对a的判断条件有一定的规律可寻;关键是,在switch语句后的表达式中利用了a/10,从而简化了case标号。

4.22【分析与解答】

编写本题的程序,首先要解决如何计算学生当前的年龄(设存放实足年龄的变量是age)。

(1)如果当前的月份大于生日的月份,则学生的实足年龄age=y1-y0。

(2)如果当前的月份等于生日的月份,就要看日数,当前的日数大于或等于生日的日数,则学生的实足年龄age=y1-y0。

(3)如果不满足以上的条件,就可断定当前的日期没有超过生日日期,就是说学生的年龄应当是age=y1-y0-1。

以上3条,用C语言可以描述如下:

if((m1>m0)[JB>1|][JB>1|](m1==m0&&d1>=d0))age=y1-y0;

elseage=y1-y0-1;

读者可以参考以上语句写出程序,也可以根据分析写出与此形式不同的语句和程序。

4.23【分析与解答】

(1)若输入的整数a是奇数,输出:

oddnumber,是偶数输出:

evennumber。

(2)若一个a是偶数,它就能被2除尽,即a%2==0,输出evennumber;若是奇数,

它就不能被2除尽,即a%2!

〖KG-*2〗=0,输出oddnumber。

读者可以参考以上给出的算法,写出相应的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语句,并编写出完整的程序。

4.25【分析与解答】

(1)本题已给出了非常明确的条件,只要写出正确的条件判断语句就可基本完成程序的编写。

(2)由给出的函数可知,只有x的值在规定的范围内时,才求出y的值,因此程序应当对输入的x进行判断,若超过范围就不求y的值。

(3)现以使用if[CD#*2]else语句为例写出程序供参考。

main()

{intx,y;

printf(″Enterx:

″);scanf(″%d″,&x);

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

{if(x==0)y=x-1;

elseif(x<10&&x>0)y=x+1;

elseif(x<0&&x>-5)y=x;

printf(″x=%dy=%d\n″,x,y);

}

printf(″***END***\n\n″);

}

第五章循环结构习题分析与解答

一、选择题(单选题)

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]6

5.12【参考答案】程序段无限循环,没有输出结果

5.13【参考答案】-1

5.14【参考答案】11

5.15【参考答案】[1]d=1.0[2]k++[3]k<=n

5.16【参考答案】[1]x>=0[2]x

三、编程题

5.17【分析与解答】

(1)本题的基本算法是求累加值。

累加项的值有规律的递增,每一项的绝对值比前一项增2,因此可以利用循环的控制变量的递增来得到累加项的绝对值。

例如:

for(i=1;i<=101;i+=2)…

(2)按所给的算式可以看到,累加项的符号是在交叉改变的,为此应当在循环体内设

置一个变量,使它的符号按此规律交叉改变,这可用:

s=-s;来实现,s的初值为1;当s的值为1时,赋值后s中新的值为-1,当s的值为-1时,赋值后s中新的值为1。

用s去乘累加项,将使累加项的符号也随之有规律地改变。

(3)若累加和放在变量sum中,累加项放在变量t中,按照以上叙述,for循环体内的语句可以设计如下:

s=-s;t=s*i;sum=sum+t;

(4)sum的值是51。

(5)请读者自己对变量做出正确的定义并赋初值,设计输出语句,完善程序。

5.18【分析与解答】

(1)本题的基本算法是求累加值。

累加项的分子部分都是1;分母的值有规律的递增,依次为1!

、2!

、…、n!

,即,若第i-1项的累加项为

t(i-1),则第i项的累加项是t(i-1)*i,在程序中可用表达式:

t=t/i(i从1变化到n)来表示。

(2)根据以上分析,若用变量t来存放累加项,当i的值从1变化到n时,可用以下语句来实现累加:

t=t/i;e+=t;

(3)为了实现累加过程,以上语句应当放在循环内,循环控制变量从1变化到n。

(4)若用for循环,按题目要求已指定n的值是50。

若用while循环,并没有指定n的值,但已指定了循环结束的条件,当t的值小于10-4结束循环。

(5)现例示用while循环来求e值的部分程序:

i=1;e=1.0;t=1.0;

while(t>=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年的年数可用一个for循环来取得。

(2)对每一年,用以上指定的条件来进行判断,若满足条件即为闰年,进行输出。

(3)按输出的要求,需要设一个变量用于统计一行中输出的个数,若在一行上已连续输出了5个年数,就需输出一个换行符,使下一个输出项在新的一行上开始;若用变量n来做此统计,则当表达式n%5==0时就应输出一个换行符,同时使n重新置0值。

(4)若变量y代表年数,if语句的逻辑表达式可以写成如下:

(y%4==0&&y%100!

=0[JB>1|][JB>1|]y%400==0)

(5)以下程序段供参考:

for(y=1880;y<=2000;y++)

if(y%4==0&&y%100!

[KG-*2]=0[JB>1|][JB>1|]y%400==0)

{printf(″%d″,y);

n++;

if(n%5==0)

{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<=k;i++)printf(″*″);

printf(″\n″);

}

在下半部依次是5、3、1个;因此可以用以下的程序段来实现这样的输出:

for(k=5;k>=1;k--,k--)

{for(i=1;i<=k;i++)printf(″*″);

printf(″\n″);

}

以上程序段从第一列起输出的结果如下:

*

***

*****

*******

*****

***

*

现在我们已完成了在每行输出指定数目的*号。

(3)输出结果与题目要求不同,它们的区别是:

按题目每一行之前有不同的空格,而这里则是所有的行都在第一列上开始输出*号;所以接着就应当解决这一问题。

(4)分析题目要求,每行第一个*号位置的缩进是有规律的,假定中间这一行第一个*号位置是在第一列,则可看出,第一至第三行的缩进分别是3、2、1个空格;而图形下半部的缩进数则刚好相反。

这可在以上循环中添加输出连续空格的for循环来实现,对于上半部程序如下:

b=3;

for(k=1;k<=7;k++,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【参考答案】-1

6.13【参考答案】1

6.14【参考答案】ctype.h

6.15【参考答案】0

6.16【参考

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

当前位置:首页 > 工作范文 > 行政公文

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

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