C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx
《C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx(18页珍藏版)》请在冰豆网上搜索。
C语言程序设计教程清华大学出版社陈明主编第3章答案
第3章习题解答
一、选择题
1.以下叙述中错误的是。
A)C语言是一种结构化程序设计语言
B)结构化程序由顺序、分支、循环三种基本结构组成
C)使用三种基本结构构成的程序只能解决简单回题
D)结构化程序设计提倡模块化的设计方法
解析:
结构化程序由顺序结构、循环结构和选择结构三种基本结构组成,并且由三种基本结构组成的算法结构可以解决任何复杂问题。
答案:
C
2.在下列选项中,不正确的赋值语句是。
A)++t;B)nl=(n2=(n3=0));C)k=i=j;D)a=b+c=1;
解析:
选项A中“++t;”相当于“t=t+1;”,是正确的;选项B相当于“nl=n2=n3=0;”,也是合法的;在选项C中,“k=i==j;”相当于“k=(i==1)”,也就是将括号内关系表达式的值赋给k,是正确的;选项D相当于“b+c=1;a=b+c;”,第一个语句中赋值号的左边出现了表达式,是错误的。
答案:
D
3.有以下程序:
/*文件路径名:
ex3_1_3\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inta=0,b=0;/*定义变量*/
a=10;/*给a赋值*/
b=20;/*给b赋值*/
printf("a+b=%d\n",a+b);/*输出计算结果*/
return0;/*返回值0,返回操作系统*/
}
程序运行后的输出结果是。
A)a+b=10B)a+b=30C)30D)出错
解析:
“printf("a+b=%d\n",a+b);”用于输出a+b的值,输出形式为a+b=30。
答案:
B
4.以下叙述中正确的是。
A)调用printf()函数时,必须要有输出项
B)调用putchar()函数时,必须在之前包含头文件stdio.h
C)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出
D)调用getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码
解析:
对于选项A,调用printf()函数时,不一定总有输出项,所以A错误;对于选项C,C语言中,整数可以以十进制、八进制和十六进制表示,而不存在十二进制的表示形式,所以B错误;对于选项D,getchar()读入字符时,从键盘输入的均被认为是字符形式存入到变量中,而不能输入该字符对应的ASCII码。
所以D错误。
对于选项B,由于putchar()是标准库函数,所以在程序开头必须包含头文件stdio.h。
答案:
B
5.有以下程序:
/*文件路径名:
ex3_1_5\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
charc1='1',c2='2';/*定义变量*/
c1=getchar();c2=getchar();/*输入c1,c2*/
putchar(c1);putchar(c2);/*输出c1,c2*/
return0;/*返回值0,返回操作系统*/
}
当运行时输入a<回车>后,以下叙述正确的是。
A)变量c1被赋予字符a,c2被赋予回车符
B)程序将等待用户输入2个字符
C)变量c1被赋予字符a,c2中仍是原有字符2
D)变量c1被赋予字符a,c2中将无确定值
解析:
函数getchar()用于从终端输入一个字符,包括回车符在内,所以本题中c1被赋值字符a,c2被赋予回车符。
答案:
A
6.设有定义:
“inta=2,b=3,c=4;”,则以下选项中值为0的表达式是。
A)(!
a==1)&&(!
b==0)B)(a>b)&&!
c||1C)a&&bD)a||(b+b)&&(c-a)
解析:
选项A中的值为(!
2==1)&&(!
3==0)=(0==1)&&(!
3==0)=0&&(!
3==0)=0。
选项B中的值为(2>3)&&!
4||1=0&&!
4||1=0||1=1。
选项C中的值为2&&3=1。
选项D中的值为2||(3+3)&&(4-2)=1。
答案:
A
7.有以下程序:
/*文件路径名:
ex3_1_7\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inta,b,d=25;/*定义变量*/
a=d/10%9;b=a&&(-1);/*计算a,b之值*/
printf("%d,%d\n",a,b);/*输出a,b*/
return0;/*返回值0,返回操作系统*/
}
程序运行后的输出结果是。
A)6,1B)2,1C)6,0D)2,0
解析:
由于d初值为25,所以a=d/10%9=2%9=2,b=2&&(-1)=1,所以输出结果应该是:
2.1。
答案:
B
8.在嵌套使用if语句时,C语言规定else总是。
A)和之前与其具有相同缩进位置的if配对B)和之前与其最近的if配对
C)和之前与其最近的且不带else的if配对D)和之前的第一个if配对
解析:
C语言的语法规定else子句总是与前面最近的不带else的if相结合。
答案:
C
9.有以下程序段:
intk=0,a=1,b=2,c=3;
k=a
b:
a;k=k>c?
c:
k;
执行该程序段后,k的值是。
A)3B)2C)1D)0
解析:
第一个条件表达式a
b:
a=1<2?
2:
1=2,所以这时k=2,第二个条件表达式k>c?
c:
k=2>3?
3:
2=2。
答案:
B
10.设有条件表达式“(EXP)?
i++:
j—”,则以下表达式中与"(EXP)”完全等价的是。
A)(EXP==0)B)(EXP!
=0)C)(EXP==1)D)(EXP!
=1)
解析:
条件表达式"(EXP)”为真表示EXP非0,也就是选项B。
答案:
B
11.下列叙述正确的是。
A)break语句只能用于switch语句
B)break语句必须与switch语句中的case配对
C)在switch语句中必须使用default
D)在switch语句中,不使用break语句在语法上也是正确的
解析:
break语句可在循环语句中使用;也可在case之后的语句中使用break语句;在switch语句中没有break在语法上也是正确的。
.
答案:
D
12.在以下给出的表达式中,与while(E)中的"(E)"不等价的表达式是。
A)(!
E==0)B)(E>0||E<0)C)(E==0)D)(E!
=0)
解析:
表示当E为假时,选项C中“(E==0)”为真,所以不等价,可知应选择选项C。
答案:
C
13.若有以下程序:
/*文件路径名:
ex3_1_13\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inty=10;/*定义变量*/
while(y--);/*while循环*/
printf("y=%d\n",y);/*输出y*/
return0;/*返回值0,返回操作系统*/
}
程序运行后的输出结果是。
A)y=0B)y=-1C)y=1D)while构成无限循环
解析:
当结束循环时,y--的值为0,先取出y的值作为表达式的值,所以y=0,然后y的值再自减1,所以最后y=-1。
答案:
B
14.有以下程序:
/*文件路径名:
ex3_1_14\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main(void)*/
{
intk=5,n=0;/*定义变量*/
do
{
switch(k)
{
case1:
case3:
n+=1;k--;break;
default:
n=0;k--;
case2:
case4:
n+=2;k--;break;
}
printf("%d",n);/*输出n*/
}while(k>0&&n<5);
printf("%\n");/*换行*/
return0;/*返回值0,返回操作系统*/
}
程序运行后的输出结果是。
A)235B)0235C)02356D)2356
解析:
do-while语句的特点是先执行循环体,然后再判断循环条件是否成立,当循环条件的值为0时循环结束。
第1次循环时,k的初值为5,进入switch(5),执行default,执行“n=0;k--;”后k=4,再执行“n+=2;k--”后n=n+2=2,k=3。
然后再输出n的值2。
第2次循环时,k的值为3,进入switch(3),执行case3,执行“n+=1;k--;”后n=n+1=3,k=2,然后再输出n的值3。
第3次循环时,k的值为2,进入switch
(2),执行case2,执行“n+=2;k--”后n=n+2=5,k=1,然后再输出n的值5,这时“(k>0&&n<5)”不成立,结束循环不。
答案:
A
15.若变量已正确定义,有以下程序段:
/*文件路径名:
ex3_1_15\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inti=0;/*定义变量*/
do{printf("%d,",i);}while(i++);
printf("%d\n",i);/*输出i*/
return0;/*返回值0,返回操作系统*/
}
其输出结果是。
A)0,0B)01C)1,1D)程序进入无限循环
解析:
第1次循环时,输出i的值0,然后条件“i++”的值为0,i的值再自加1和i=1,结束循环,再输出i的值1。
答案:
B
16.有以下程序:
/*文件路径名:
ex3_1_16\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inty=9;/*定义变量*/
for(;y>0;y--)
if(y%3==0)
printf("%d",--y);/*输出y*/
printf("\n");/*换行*/
return0;/*返回值0,返回操作系统*/
}
程序的运行结果是。
A)741B)963C)852D)875421
解析:
条件“y%3==0”表示y为3的倍数,可知当y为9,6和3时,将输出--y的值8,5和2。
答案:
C
17.有以下程序:
/*文件路径名:
ex3_1_17\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inti,j,x=0;/*定义变量*/
for(i=0;i<2;i++)
{
x++;/*x自加1*/
for(j=0;j<=3;j++)
{
if(j%2!
=0)/*j为奇数*/
continue;
x++;/*x自加1*/
}
x++;/*x自加1*/
}
printf("x=%d\n",x);/*输出x*/
return0;/*返回值0,返回操作系统*/
}
程序执行后的输出结果是。
A)x=4B)x=8C)x=6D)x=12
解析:
内层for循环,当j为奇数时,执行“continue;”继续下次内层循环,当j为偶数0,2时,执行“x++”,所以内层for循环语句实现x=x+2,故外层for循环语句单次循环实现x=x+4,所以程序执行后的输出结果为x=8。
答案:
B
二、填空题
1.若变量a,b已定义为int类型并赋值21和55,要求用printf()函数以a=21,b=55的形式输出,请写出完整的输出语句。
解析:
printf函数的一般格式为.“printf(格式控制,输出表列)”,输出a=21,b=55的格式控制为"a=%d,b=%d"。
答案:
printf("a=%d,b=%d",a,b);
2.以下程序运行后的输出结果是。
/*文件路径名:
ex3_2_2\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
intx=0210;/*定义变量*/
printf("%d\n",x);/*输出x*/
return0;/*返回值0,返回操作系统*/
}
解析:
C语言中以0打头的整数为八进制表示,x的十进制表示为2*64+8=136。
所以输出结果为130。
答案:
130
3.执行以下程序时输入1234567,则输出结果是。
/*文件路径名:
ex3_2_3\main.c*/
#include/*标准输入/出库头文件*/
intmain(void)/*主函数main()*/
{
inta=1,b;/*定义变量*/
scanf("%2d%2d",&a,&b);/*输入a,b*/
printf("%d%d\n",a,b);/*输出a,b*/
return0;/*返回值0,返回操作系统*/
}
解析:
题中两个变量的场宽都为2,所以输入1234567后,变量a的值为12,变量b的值为34。
答案:
1234
4.己定义“charch='$';inti=l,j;”,执行“j=!
ch&&i++”以后,i的值为。
解析:
由于!
ch的值为0,所以第1个表达式的值为假,这样整个表达式的值为假,这样不再执行“i++”,所以i的值为1。
答案:
1
5.以下程序运行后的输出结果是。
/*文件路径名:
ex3_2_5\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inta=10,b=20,c;/*定义变量*/
c=(a%b<1)||(a/b>1);/*计算c之值*/
printf("%d,%d,%d\n",a,b,c);/*输出a,b,c*/
return0;/*返回值0,返回操作系统*/
}
解析:
a的初值为10,b的初值为20,所以“a%b”的值为10,“(a%b<1)”的结果为假,“a/b”的结果为0,“(alb>1)”的结果为假,所以“(a%b<1)||(a/b>1)"的值为假(0),因此c的值为0。
答案:
10200
6.以下程序运行后的输出结果是。
/*文件路径名:
ex3_2_6\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
inta=3,b=4,c=5,t=99;/*定义变量*/
if(ba=c;c=t;/*赋值运算*/
if(ab=a;a=t;/*赋值运算*/
printf("%d%d%d\n",a,b,c);/*输出a,b,c*/
return0;/*返回值0,返回操作系统*/
}
解析:
由于a,b,c和t的初值为3,4,5和99,所以if语句的条件“b执行后a的值为5,b的值仍是4,c的值为99,再执行第二个if语句,由于此时“a因此输出结果是:
4599
答案:
4599
7.以下程序运行后的输出结果是。
/*文件路径名:
ex3_2_7\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
intx,a=1,b=2,c=3,d=4;/*定义变量*/
x=(a
a:
b;/*计算条件表达式之值*/
x=(xx:
c;/*计算条件表达式之值*/
x=(d>x)?
x:
d;/*计算条件表达式之值*/
printf("%d\n",x);/*输出x*/
return0;/*返回值0,返回操作系统*/
}
解析:
第一个条件表达式(a
a:
b=(1<2)?
1:
2=1;第二个条件表达式(xx:
c=(1<3)?
1:
3=1;第三个条件表达式(d>x)?
x:
d=(4>1)?
1:
4=1,所以结果为1。
答案:
1
8.当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行次。
/*文件路径名:
ex3_2_8\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
charch;/*定义变量*/
while((ch=getchar())=='0')
printf("#");/*输出#*/
printf("\n");/*换行*/
return0;/*返回值0,返回操作系统*/
}
解析:
“ch=getchar()”用于从终端读入一个字符赋给变量ch,输入字符'1'被赋给ch,由于'1'!
='0',所以循环体不执行,直接退出while循环,所以循环体执行的次数为0。
答案:
0
9.以下程序运行后的输出结果是。
/*文件路径名:
ex3_2_9\main.c*/
#include/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
{
charc1,c2;/*定义变量*/
for(c1='0',c2='9';c1printf("%c%c",c1,c2);/*输出c1,c2*/
printf("\n");/*换行*/
return0;/*返回值0,返回操作系统*/
}
解析:
for循环的循环变量c1的初值为'0',c2的初值为'9'。
第1次循环沓,输出字符c1,c2,也就是09。
执行c1++和c2--后,c1的值为'1',c2的值为'8'。
第2次循环沓,输出字符c1,c2,也就是18。
执行c1++和c2--后,c1的值为'2',c2的值为'7'。
第3次循环沓,输出字符c1,c2,也就是27。
执行c1++和c2--后,c1的值为'3',c2的值为'6'。
第4次循环沓,输出字符c1,c2,也就是36。
执行c1++和c2--后,c1的值为'4',c2的值为'5'。
第5次循环沓,输出字符c1,c2,也就是45。
执行c1++和c2--后,c1的值为'5',c2的值为'4',这时c1答案:
0918273645
10.若有以下程序段,且变量已正确定义和赋值:
for(s=1.0,k=1;k<=n;k++)
s=s+1.0/(k*(k+l));
printf("s=%f\n",s);
请填空,使下面程序段的功能与之完全相同:
s=1.0;k=1;
while(【1】)
{
s=s+1.0/(k*(k+l));
【2】;
}
printf("s=%f\n",s);
解析:
本题要求将for循环改写成while循环。
while循环与for循环的结束条件是相同的,因此,第1处应填写k<=n;while循环体内应改变循环变量的值,因此,第2处应填写k++。
答案:
【1】k<=n【2】k++
12.以下程序的功能是:
输出100以内(不含100)能被3整除且个