c语言《程序设计基础》课后习题参考答案与解析Word文件下载.doc
《c语言《程序设计基础》课后习题参考答案与解析Word文件下载.doc》由会员分享,可在线阅读,更多相关《c语言《程序设计基础》课后习题参考答案与解析Word文件下载.doc(40页珍藏版)》请在冰点文库上搜索。
第2章程序设计基础知识
一、单选题
1、C2、A3、C4、A5、C6、C7、D8、C
9、D10、A11、D12、A13、C14、C15、BA
16、B17D
1.答案:
C。
这里考察的是用户标识符的定义。
用户标识符由字母、数字、下划线组成。
且必须以字母或下划线开头,区分大小写,且不能与C语言已有的32个关键字同名。
由于选择不合法的用户标识符, A项的A、P_0、Do都是合法的用户标识符;
B项的_A是合法的;
D项的_123、temp、INT也都是合法的。
只有C选项的标识符都是错误的用户标识符。
2.答案:
A。
这里考察的是整型常量的概念。
B项当中01a不正确,C
项当中的0668不是正确的八进制常量,D项当中的2e5是float型常量。
3.答案:
这里考察的是字符常量的定义。
字符常量是用单撇号括起来的单个字符或转义字符。
所以答案是C。
4.答案:
字符变量只能包含一个字符。
5.答案:
这里考察的是转义字符的正确表示。
C项的’074’是错误的转义字符,正确表示方法是’\074’。
6.答案:
字符变量只能包含一个字符,而C项的c=’yes’是错误的。
7.答案:
D。
这里考察的是输入格式的控制。
输入格式要与scanf语句中字符串格式相对应。
8.答案:
这里考察的是输出格式和字符对应的ASCII码值。
’A’的ASCII码值是65,’Y’字符的ASCII码值是89。
9.答案:
这里考察输入格式和输出结果形式。
由于输入格式不正确,所以输出的是不确定值。
10.答案:
这里考察的是标识符的特点区分大小写,变量sum和变量sUM是两个不同的变量,sum并没有参加运算,所以它的值不边仍然是7。
11.答案:
%运算符要求两边的运算数必须是整型。
12.答案:
这里考察的是复合赋值运算。
a%=b+1;
等价与a=a%(b+1);
由于a=10,b=4;
所以运算后a的值是0。
13.答案:
这里考察的是在变量定义类型是进行赋值操作。
要求 a,b,c都赋值为5,且为int类型。
只有C正确。
14.答案:
这里考察的是类型的自动转换,只要有单精度类型或双精度类型参加运算,结果都是double(双精度)类型。
15.答案:
B,A。
这里考察的是逻辑表达式的运算过程。
表达式1&
表达式2,若表达式1的值是0的话,结果就是0,表达式2就不参加运算。
要注意:
赋值表达式的值是左边赋值变量的值。
所以答案为B,A。
16.答案:
这里考察的是逗号表达式运算过程是从第1个表达式开始运算,然后依次运行到最后一个表达式。
逗号表达式的值是最后表达式的值,且注意逗号运算符优先级低于赋值运算符。
所以表达式
(a=2,b=5,b++,a+b)运算过程a=2—>
b=5—>
b++—>
a+b=8;
结果是8。
17.答案:
这里考察的是条件表达式的结合性是从右向左。
所以
k<
a?
k:
c<
b?
c:
a;
等价于k<
a?
k:
(c<
a);
先运算c<
a;
的值
是1,然后计算k<
1;
的值是1。
二、填空题
1、-32768-327672、字母,数字,下划线3、分号(;
)
4、30,155、186、0
7、-2648、79、0
10、111、y%2==112、x<
z||y<
z
13、014、(x>
2&
&
x<
3)||x<
-1015、1
1、编写程序,输入一个长方形的二边长,输出其面积。
inta,b,s;
/*a,b作为长方形的两个边长,s为面积。
printf(“请输入两个边长\n”);
scanf(“%d%d”,&
a,&
b);
s=a*b;
printf(“Thearea:
%d\n“,s);
}
2、设置半径为r=2.9,编程求圆周长和圆面积
#include“stdio.h”
#definePI3.14
main()
floatr,L,S;
L=2*PI*r;
S=PI*r*r;
printf(“L=%f,S=%f\n“,L,S);
3、输入一个华氏温度,输出相应的摄氏温度。
二者的换算公式是:
c=5/9(F–32),其中F表示华氏温度,c表示摄氏温度。
main()
{
floatc,F;
printf(“请输入一个华氏温度:
\n”);
scanf(“%f”,&
F);
c=(float)5/9*(F-32);
printf(“F=%f,c=%f\n”,F,c);
}
第3章程序设计初步
1、C2、C3、B4、B5、B
这里考察的是if-else语句和表达式中有增量和减量的执行过程。
if(m++>
5)printf(“%d\n”,m);
elseprintf(“%d\n”,m++);
先执行m>
5的值是0,然后执行m=m+1;
得到m=6;
由于m>
5的值是0所以执行else语句,应先输出m的值是6,然后m再自增一个单位变成7。
2.答案:
这里考察的是if语句的嵌套。
根据else子句总是与之前最近的if语句配对来进行选择满足条件的答案。
这里也考察的是if语句的嵌套。
同理:
if(x<
y)
if(y<
0)z=0;
elsez+=1;
等价与if(x<
y){if(y<
0)z=0;
elsez+=1;
}因此答案是B。
根据else子句总是与之前最近的if语句配对。
由于B项:
if(x=y)&
(x!
=0)x+=y;
if后的条件表达式没有用圆括号括起来。
正确的是:
if((x=y)&
=0))x+=y;
二、根据要求完成程序填空
1、z>
yz>
xy>
x2、ch>
=‘A’&
ch<
=’Z’ch=ch-32
3、x<
0x/10y!
=2
1、编写一个程序,要求用户从终端键入两个整数数值。
检测这两个数,判定第一个数是否能被第二数整除,并在终端上显示相应的信息。
inta,b;
/*a为第一个数,b为第二个数*/
printf(“Pleaseinputtwonumbers:
\n”);
scanf(“%d%d”,&
a,&
b);
if(a%b==0)
printf(“%d能被%d整除。
\n”,a,b);
else
printf(“%d不能被%d整除。
2、有3个整数a,b,c,由键盘输入,输出其中最大的数。
main()
inta,b,c,max;
printf(“Pleaseinputthreenumbers:
scanf(“%d%d%d”,&
b,&
c);
if(a>
b)max=a;
elsemax=b;
if(max<
c)max=c;
printf(“Themaxis%d\n”,max);
3、给出一百分制成绩,要求输出成绩等级A、B、C、D、E。
其中90分以上为A,80~89分为B,70~79为C,60~69为D,60分以下为E。
main()
floatscore;
intgrade;
printf(“Pleaseinputascore:
\n”);
scanf(“%f“,&
score);
grade=(int)score/10;
switch(grade)
{case10:
case9:
printf(“gradeisA\n”);
break;
case8:
printf(“gradeisB\n”);
case7:
printf(“gradeisC\n”);
case6:
printf(“gradeisD\n”);
default:
printf(“gradeisE\n”);
4、新世纪百货进行打折促销活动,消费金额(P)越高,折扣(d)越大,标准如下:
消费金额折扣
P<
1000%
100≤P<
2005%
200≤P<
50010%
500≤P<
100015%
P≥100020%
编程实现从键盘输入消费金额,输出折扣率和实付金额(f)。
要求分别用 if语句和switch语句实现。
(1)用if语句编程实现如下
floatP,d,f;
printf(“输入消费金额:
scanf(“%f”,&
P);
if(P<
100)d=0;
if(P>=100&
P<
200)d=0.05;
if(P>=200&
500)d=0.10;
if(P>=500&
1000)d=0.15;
if(P>=1000)d=0.20;
f=P*(1-d);
printf(“折扣是%f,则实付金额为%f\n”,d,f);
}
(2)用switch语句编程实现如下
#include“stdio.h”
main()
{
floatP,d,f;
intc;
printf(“输入消费金额:
scanf(“%f”,&
c=(int)P/100;
switch(c)
{case0:
d=0;
case1:
d=0.05;
break;
case2:
case3:
case4:
d=0.10;
case5:
case6:
case7:
case8:
case9:
d=0.15;
default:
d=0.20;
}
f=P*(1-d);
printf(“折扣是%f,则实付金额为%f\n”,d,f);
第4章循环结构程序设计
一、单项选择
1、A2、D3、C4、D5、B
6、D7、B8、B
二、按要求完成程序填空
1、c!
=’\n’c>=’0’&
c<
=’9’
2、i%3==2&
i%5==3&
i%7==2j%5==0
3、i<
10j%3!
=0
三、编程题
1、编程求n的阶乘(n由键盘输入)。
{
intn,i;
longfac;
fac=1;
printf(“Inputanumber:
”);
scanf(“%d”,&
n);
i=1;
while(i<
=n)
{fac=fac*i;
i++;
printf(“%d!
is%ld\n”,n,fac);
2、计算1!
+2!
+3!
+…+10!
的值。
方法一
inti=1,j;
doublefac,sum=0;
=10)
{j=1;
fac=1;
while(j<
=i)
{fac=fac*j;
j++;
sum=sum+fac;
i++;
printf(“1!
=%.0f\n”,sum);
方法二:
#include“stdio.h”
main()
{
inti,j;
doublefac,sum=0;
for(i=1;
i<
=10;
i++)
{
for(j=1,fac=1;
j<
=i;
j++)
fac=fac*j;
}
方法三:
inti;
doublefac,sum;
sum=0;
fac=1;
for(i=1;
i<
10;
i++)
{
fac=fac*i;
3、求Sn=a+aa+aaa+…+aaa…a(n个a)的值,其中a是一个数字。
例如:
3+33+333+3333(此时n=4),n由键盘输入。
#include“stdio.h”
inta,n,i;
longSn,t;
Sn=0;
printf(“Pleaseinputa:
scanf(“%d”,&
printf(“Pleaseinputn:
t=a;
=n;
i++)
{Sn=Sn+t;
t=t*10+a;
printf(“Sn=%ld\n”,Sn);
4、打印出所有的“水花仙数”,所谓“水花仙数”是指一个3位数,其各位数字立方和等于该数本身。
例如,153是一个水花仙数。
intt,a,b,c,n;
/*变量n为统计水花仙数的个数*/
n=0;
for(t=100;
t<
1000;
t++)
{a=t/100;
b=(t–a*100)/10;
c=t%10;
if(a*a*a+b*b*b+c*c*c==t)
{n++;
if(n%6==0)
printf(“\n”);
printf(“%5d”,t);
6、每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一个的2倍,直至购买的苹果个数达到不超过100的最大值。
编写程序求每天平均花多少钱?
程序如下
#include“stdio.h”
main()
intday,num,sum;
floatmoney,every;
sum=0;
num=2;
for(day=1;
num<
100;
)
{sum=sum+num;
day++;
num=num*2;
money=sum*0.8;
every=money/day;
printf(“every=%f\n”,every);
7、变成完成用一元人民币换成一分、二分、五分的所有兑换方案,即输出所有满足搭配要求的1分币个数,2分币个数,5分币个数。
程序如下:
{
intone,two,five;
for(one=0;
one<
=100;
one++)
for(two=0;
two<
=50;
two++)
for(five=0;
five<
=20;
five++)
if(one+two*2+five*5==100)
printf(“one=%d,two=%d,five=%d\n”,one,two,five);
第5章模块化程序设计---函数
1、B2、B3、A4、A5、D
6、D7、B8、B9、B10、A
二、编程题
1、已知三角形的三边长,编一实现求三角形面积的功能函数。
说明:
用海伦公式来求面积,但要注意输入的三边长要符合构成三角形的条件。
SΔ=(其中:
s=(a+b+c)/2)
#include“stdio.h”
#include“math.h”
floatArea(inta,intb,intc)
floats,area;
s=(float)(a+b+c)/2;
if((a+b>
c)&
(a-b)<
c)
area=sqrt(s*(s-a)*(s-b)*(s-c));
else
area=0;
returnarea;
{
inta,b,c;
floatarea;
floatArea(int,int,int);
printf(“请输入三角形的三边长\n”);
scanf(“%d%d%d”,&
a,&
b,&
c);
area=Area(a,b,c);
if(area!
=0)
printf(“area=%f\n”,area);
eles
printf(“error!
\n”);
2、写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
#include“stdio.h”
intprime(intn)
intt,a=1;
for(t=2;
t<
=n/2;
if(n%t==0)
a=0;
returna;
intn;
printf(“inputanumber:
scanf(“%d”,&
n);
if(prime(n)==1)
printf(“%disprime\n”,n);
eles
printf(“%disnotprime\n”,n);
3、编写函数