C语言程序设计教程 清华大学出版社 陈明主编 第3章答案Word文档格式.docx
《C语言程序设计教程 清华大学出版社 陈明主编 第3章答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程 清华大学出版社 陈明主编 第3章答案Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
![C语言程序设计教程 清华大学出版社 陈明主编 第3章答案Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/11/bfb64415-5138-4d15-9e59-833170c6cc69/bfb64415-5138-4d15-9e59-833170c6cc691.gif)
return0;
/*返回值0,返回操作系统*/
}
程序运行后的输出结果是。
A)a+b=10B)a+b=30C)30D)出错
“printf("
”用于输出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。
5.有以下程序:
ex3_1_5\main.c*/
charc1='
1'
c2='
2'
;
/*定义变量*/
c1=getchar();
c2=getchar();
/*输入c1,c2*/
putchar(c1);
putchar(c2);
/*输出c1,c2*/
当运行时输入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。
7.有以下程序:
ex3_1_7\main.c*/
inta,b,d=25;
/*定义变量*/
a=d/10%9;
b=a&
(-1);
/*计算a,b之值*/
%d,%d\n"
a,b);
/*输出a,b*/
A)6,1B)2,1C)6,0D)2,0
由于d初值为25,所以a=d/10%9=2%9=2,b=2&
(-1)=1,所以输出结果应该是:
2.1。
8.在嵌套使用if语句时,C语言规定else总是。
A)和之前与其具有相同缩进位置的if配对B)和之前与其最近的if配对
C)和之前与其最近的且不带else的if配对D)和之前的第一个if配对
C语言的语法规定else子句总是与前面最近的不带else的if相结合。
9.有以下程序段:
intk=0,a=1,b=2,c=3;
k=a<
b?
b:
a;
k=k>
c?
c:
k;
执行该程序段后,k的值是。
A)3B)2C)1D)0
第一个条件表达式a<
a=1<
2?
2:
1=2,所以这时k=2,第二个条件表达式k>
k=2>
3?
3:
2=2。
10.设有条件表达式“(EXP)?
i++:
j—”,则以下表达式中与"
(EXP)”完全等价的是。
A)(EXP==0)B)(EXP!
=0)C)(EXP==1)D)(EXP!
=1)
条件表达式"
(EXP)”为真表示EXP非0,也就是选项B。
11.下列叙述正确的是。
A)break语句只能用于switch语句
B)break语句必须与switch语句中的case配对
C)在switch语句中必须使用default
D)在switch语句中,不使用break语句在语法上也是正确的
break语句可在循环语句中使用;
也可在case之后的语句中使用break语句;
在switch语句中没有break在语法上也是正确的。
.
12.在以下给出的表达式中,与while(E)中的"
(E)"
不等价的表达式是。
E==0)B)(E>
0||E<
0)C)(E==0)D)(E!
=0)
表示当E为假时,选项C中“(E==0)”为真,所以不等价,可知应选择选项C。
13.若有以下程序:
ex3_1_13\main.c*/
inty=10;
/*定义变量*/
while(y--);
/*while循环*/
y=%d\n"
y);
/*输出y*/
A)y=0B)y=-1C)y=1D)while构成无限循环
当结束循环时,y--的值为0,先取出y的值作为表达式的值,所以y=0,然后y的值再自减1,所以最后y=-1。
14.有以下程序:
ex3_1_14\main.c*/
intmain(void)/*主函数main(void)*/
intk=5,n=0;
do
{
switch(k)
{
case1:
case3:
n+=1;
k--;
break;
default:
n=0;
case2:
case4:
n+=2;
}
printf("
%d"
n);
/*输出n*/
}while(k>
0&
n<
5);
%\n"
);
/*换行*/
A)235B)0235C)02356D)2356
do-while语句的特点是先执行循环体,然后再判断循环条件是否成立,当循环条件的值为0时循环结束。
第1次循环时,k的初值为5,进入switch(5),执行default,执行“n=0;
”后k=4,再执行“n+=2;
k--”后n=n+2=2,k=3。
然后再输出n的值2。
第2次循环时,k的值为3,进入switch(3),执行case3,执行“n+=1;
”后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>
5)”不成立,结束循环不。
15.若变量已正确定义,有以下程序段:
ex3_1_15\main.c*/
inti=0;
do{printf("
%d,"
i);
}while(i++);
%d\n"
/*输出i*/
其输出结果是。
A)0,0B)01C)1,1D)程序进入无限循环
第1次循环时,输出i的值0,然后条件“i++”的值为0,i的值再自加1和i=1,结束循环,再输出i的值1。
B
16.有以下程序:
ex3_1_16\main.c*/
inty=9;
for(;
y>
0;
y--)
if(y%3==0)
printf("
--y);
/*输出y*/
\n"
/*换行*/
程序的运行结果是。
A)741B)963C)852D)875421
条件“y%3==0”表示y为3的倍数,可知当y为9,6和3时,将输出--y的值8,5和2。
17.有以下程序:
ex3_1_17\main.c*/
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=%d\n"
x);
/*输出x*/
程序执行后的输出结果是。
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。
二、填空题
1.若变量a,b已定义为int类型并赋值21和55,要求用printf()函数以a=21,b=55的形式输出,请写出完整的输出语句。
printf函数的一般格式为.“printf(格式控制,输出表列)”,输出a=21,b=55的格式控制为"
a=%d,b=%d"
。
printf("
2.以下程序运行后的输出结果是。
ex3_2_2\main.c*/
intx=0210;
/*输出x*/
C语言中以0打头的整数为八进制表示,x的十进制表示为2*64+8=136。
所以输出结果为130。
130
3.执行以下程序时输入1234567<
CR>
则输出结果是。
ex3_2_3\main.c*/
/*标准输入/出库头文件*/
inta=1,b;
scanf("
%2d%2d"
&
a,&
b);
/*输入a,b*/
%d%d\n"
题中两个变量的场宽都为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*/
inta=10,b=20,c;
c=(a%b<
1)||(a/b>
1);
/*计算c之值*/
%d,%d,%d\n"
a,b,c);
/*输出a,b,c*/
a的初值为10,b的初值为20,所以“a%b”的值为10,“(a%b<
1)”的结果为假,“a/b”的结果为0,“(alb>
1)”的结果为假,所以“(a%b<
1)"
的值为假(0),因此c的值为0。
10200
6.以下程序运行后的输出结果是。
ex3_2_6\main.c*/
/*包含库函数printf()所需要的信息*/
intmain(void)/*主函数main()*/
inta=3,b=4,c=5,t=99;
/*定义变量*/
if(b<
a&
a<
c)t=a;
/*条件成立时将a赋值给t*/
a=c;
c=t;
/*赋值运算*/
if(a<
c&
b<
c)t=b;
/*条件成立时将b赋值给t*/
b=a;
a=t;
%d%d%d\n"
/*返回值0,返回操作系统*/
由于a,b,c和t的初值为3,4,5和99,所以if语句的条件“b<
c”为假,不执行"
t=a;
”,但后面的“a=c;
”与此if语句无关,仍被执行。
执行后a的值为5,b的值仍是4,c的值为99,再执行第二个if语句,由于此时“a<
c”为真,从而执行“t=b;
”,执行后t的值为4,紧随执行其后的“b=a;
”,执行后a的值为4,b的值是5,c的值为99。
因此输出结果是:
4599
7.以下程序运行后的输出结果是。
ex3_2_7\main.c*/
intx,a=1,b=2,c=3,d=4;
/*定义变量*/
x=(a<
b)?
a:
b;
/*计算条件表达式之值*/
x=(x<
c)?
x:
c;
x=(d>
x)?
d;
/*计算条件表达式之值*/
第一个条件表达式(a<
b=(1<
2)?
1:
2=1;
第二个条件表达式(x<
c=(1<
3)?
3=1;
第三个条件表达式(d>
d=(4>
1)?
4=1,所以结果为1。
8.当执行以下程序时,输入1234567890<
,则其中while循环体将执行次。
ex3_2_8\main.c*/
charch;
while((ch=getchar())=='
0'
)
#"
/*输出#*/
“ch=getchar()”用于从终端读入一个字符赋给变量ch,输入字符'
被赋给ch,由于'
='
,所以循环体不执行,直接退出while循环,所以循环体执行的次数为0。
9.以下程序运行后的输出结果是。
ex3_2_9\main.c*/
charc1,c2;
for(c1='
9'
c1<
c2;
c1++,c2--)
%c%c"
c1,c2);
for循环的循环变量c1的初值为'
c2的初值为'
第1次循环沓,输出字符c1,c2,也就是09。
执行c1++和c2--后,c1的值为'
,c2的值为'
8'
第2次循环沓,输出字符c1,c2,也就是18。
7'
第3次循环沓,输出字符c1,c2,也就是27。
3'
6'
第4次循环沓,输出字符c1,c2,也就是36。
4'
5'
第5次循环沓,输出字符c1,c2,也就是45。
,这时c1<
c2不成立,所以结束循环。
0918273645
10.若有以下程序段,且变量已正确定义和赋值:
for(s=1.0,k=1;
k<
=n;
k++)
s=s+1.0/(k*(k+l));
s=%f\n"
s);
请填空,使下面程序段的功能与之完全相同:
s=1.0;
k=1;
while(【1】)
【2】;
本题要求将for循环改写成while循环。
while循环与for循环的结束条件是相同的,因此,第1处应填写k<
=n;
while循环体内应改变循环变量的值,因此,第2处应填写k++。
【1】k<
=n【2】k++
12.以下程序的功能是:
输出100以内(不含100)能被3整除且个