C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx

上传人:b****3 文档编号:4927127 上传时间:2022-12-11 格式:DOCX 页数:18 大小:27.78KB
下载 相关 举报
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx_第1页
第1页 / 共18页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx_第2页
第2页 / 共18页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx_第3页
第3页 / 共18页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx_第4页
第4页 / 共18页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx

《C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx(18页珍藏版)》请在冰豆网上搜索。

C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.docx

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(b

a=c;c=t;/*赋值运算*/

if(a

b=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=(x

x:

c;/*计算条件表达式之值*/

x=(d>x)?

x:

d;/*计算条件表达式之值*/

printf("%d\n",x);/*输出x*/

return0;/*返回值0,返回操作系统*/

}

解析:

第一个条件表达式(a

a:

b=(1<2)?

1:

2=1;第二个条件表达式(x

x:

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';c1

printf("%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整除且个

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

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1