C语言习题详细解答Word格式.docx

上传人:b****6 文档编号:19530931 上传时间:2023-01-07 格式:DOCX 页数:49 大小:48.36KB
下载 相关 举报
C语言习题详细解答Word格式.docx_第1页
第1页 / 共49页
C语言习题详细解答Word格式.docx_第2页
第2页 / 共49页
C语言习题详细解答Word格式.docx_第3页
第3页 / 共49页
C语言习题详细解答Word格式.docx_第4页
第4页 / 共49页
C语言习题详细解答Word格式.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

C语言习题详细解答Word格式.docx

《C语言习题详细解答Word格式.docx》由会员分享,可在线阅读,更多相关《C语言习题详细解答Word格式.docx(49页珍藏版)》请在冰豆网上搜索。

C语言习题详细解答Word格式.docx

等含有不同类型的相关数据,应自定义结构体类型

D)若只处理"

真"

和"

假"

两种逻辑值,应使用逻辑类型

【解析】C语言中没有逻辑类型,若只处理"

或"

两种逻辑值,可以使用整型数"

1"

0"

表示,故选D。

第02章基本数据类型

1.有以下定义:

inta;

longb;

doublex,y;

则以下选项中正确的表达式是。

A)a%(int)(x-y)B)a=x!

=y;

C)(a*y)%bD)y=x+y=x

【解析】A)选项中如果x与y的值相等那么取余时就会有除数为0的情况。

C)选项中取余的两个数据都应为整数,不能有一方为实型变量,而a*y的结果为double型。

D)选项表达式本身就错误,不能给表达式赋值。

所以,本题答案为B)。

2.有以下程序

#include<

stdio.h>

main()

{ ints,t,A=10;

doubleB=6;

s=sizeof(A);

t=sizeof(B);

printf("

%d,%d\n"

,s,t);

}

在VC6平台上编译运行,程序运行后的输出结果是

A)2,4B)4,4C)4,8D)10,6

【解析】sizeof的作用就是返回一个对象或者类型所占的内存字节数。

在VC6中整型占4个字节,双精度实型占8个字节,所以选C)。

3.若有定义:

doublea=22;

inti=0,k=18;

则不符合C语言规定的赋值语句是。

A)a=a++,i++;

B)i=(a+k)<

=(i+k);

C)i=a%11;

D)i=!

a;

【解析】C语言中取余运算符两侧的操作数只能是整型(若为char型,则会自动转换成整型)。

4.有以下程序:

#include<

stdio.h>

{ int a=1,b=0;

%d,"

,b=a+b);

%d\n"

,a=2*b);

程序运行后的输出结果是________。

A)0,0B)1,0

C)3,2D)1,2

【解析】执行第一个printf语句时,b=a+b=1,所以输出1,执行第二个printf语句时,a=2*b=2,所以输出结果为2。

5.若有定义语句:

inta=3,b=2,c=1;

,以下选项中错误的赋值表达式是。

A)a=(b=4)=3;

B)a=b=c+1;

C)a=(b=4)+c;

D)a=1+(b=c=4);

【解析】在A)选项中,赋值语句b=4先把4赋值给整型变量b,之后执行(b=4)=3是把常量3赋值给常量4,但是由于C语言规定赋值运算符的左侧只能是变量,不能是常量或者表达式,因此A)选项错误。

6.有以下定义:

A)a%(int)(x-y)B)a=x!

7.若有定义语句:

int x=10;

,则表达式x-=x+x的值为________。

A)-20B)-10

C)0D)10

【解析】x-=x+x可化为:

x=x-(x+x),由于x初始值为10,所以计算后,x=10-20=-10,因此选B)。

二.填空题

1.以下程序的功能是:

将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。

请填空。

{intx=256;

%d-%d-%d\n"

__,x/10%10,x/100);

参考答案:

x%10

【解析】x=256,x%10=6。

2.以下程序运行后的输出结果是。

{inta;

a=(int)((double)(3/2)+0.5+(int)1.99*2);

printf("

,a);

}

3

【解析】本题中3/2=1,(double)(3/2)=1,(int)1.99*2=1*2=2,因此(int)(1+0.5+2)=(int)3.5=3。

3.若有定义语句:

inta=5;

,则表达式:

a++的值是____。

5

【解析】a++的含义是在使用a值以后,使a值加1,所以a++的值为5。

4.若有语句doublex=17;

inty;

,当执行y=(int)(x/5)%2;

之后y的值为____。

1

【解析】y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。

5.设变量a和b已正确定义并赋初值。

请写出与a-=a+b等价的赋值表达式____。

a=-b

【解析】a-=a+b等价于a=a-(a+b),等价于a=-b。

第03章顺序结构

一.选择题

1.有以下程序

{chara,b,c,d;

scanf("

%c%c"

&

a,&

b);

c=getchar();

d=getchar();

%c%c%c%c\n"

a,b,c,d);

当执行程序时,按下列方式输入数据(从第1列开始,<

CR>

代表回车,注意,回车也是一个字符)

12<

34<

则输出结果是

A)1234B)12C)12D)12

334

【解析】程序根据用户输入分别给字符型变量a、b、c、d赋值为'

1'

、'

2'

<

'

3'

,因此输出到屏幕得到选项C中的格式。

2.有以下程序段:

char ch;

int k;

ch=′a′;

k=12;

%c,%d,"

,ch,ch,k);

k=%d\n"

,k);

已知字符a的ASCII码值为97,则执行上述程序段后输出结果是

A)因变量类型与格式描述符的类型不匹配输出无定值

B)输出项与格式描述符个数不符,输出为零或不定值

C)a,97,12k=12

D)a,97,k=12

【解析】输出格式控制符%c表示将变量以字符的形式输出;

输出格式控制符%d表示将变量以带符号的十进制整型数输出。

所以第一个输出语句输出的结果为a,97,第二个输出语句输出的结果为k=12,所以选项D)为正确答案。

3.有以下程序

{chara[30],b[30];

scanf("

%s"

gets(b);

%s\n%s\n"

,a,b);

程序运行时若输入:

howareyou?

Iamfine<

回车>

A)howareyou?

Iamfine

B)how

areyou?

Iamfine

C)howareyou?

D)howareyou?

解析】scanf函数会把空格字符作为输入的字符串之间的分隔符,因此字符串a为"

how"

gets()函数读取字符串时,直至接受到换行符或EOF时才停止,并将读取的结果存放在指针所指向的字符数组中,因此其余输入的内容赋值给b。

1.以下程序运行后的输出结果是  。

{ inta=200,b=010;

%d%d\n"

,a,b);

2008

【解析】整型变量a的值为200,b的值"

010"

是用八进制表示的"

10"

即十进制的"

8"

,最后输出格式均为%d,即十进制格式,所以输出为"

2008"

2.有以下程序(说明:

字符0的ASCIl码值为48)

{charc1,c2;

%d"

,&

c1);

c2=c1+9;

%c%c\n"

,c1,c2);

若程序运行时从键盘输入48<

,则输出结果为。

09

【解析】本题中通过ASCII码对字符变量赋值,由于字符0的ASCII码是48,因此字符变量c1为0,c2的ASCII码比c1大9,因此c2为9。

第04章选择结构

1.若变量已正确定义,在if(W)printf("

中,以下不可替代W的是。

A)a<

>

b+cB)ch=getchar()C)a==b+cD)a++

【解析】在C语言中,表示不等于不能用"

"

,而只能使用"

!

="

其他选项均满足题目的要求。

2.当变量c的值不为2、4、6时,值也为"

的表达式是。

A)(c==2)||(c==4)||(c==6)

B)(c>

=2&

&

c<

=6)||(c!

=3)||(c!

=5)

C)(c>

c<

=6)&

(c%2)

D)(c>

(c%2!

=1)

【解析】满足表达式(c>

=6)的整型变量c的值是2,3,4,5,6。

当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!

=3和c!

=5中至少有一个为真,即不论c为何值,选项B)中表达式的值都为"

正确答案为B)。

3.已知字母A的ASCII码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是。

A)kk>

=′A′&

kk<

=′Z′

B)!

(kk>

=′A′||kk<

=′Z′)

C)(kk+32)>

=′a′&

(kk+32)<

D)isalpha(kk)&

(kk<

91)

【解析】C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在'

A'

和'

Z'

之间就可以了,选项A)和C)符合此要求。

在选项D)中,函数isalpha用来确定一个字符是否为字母,大写字母的ASCII码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。

本题答案选B)。

#include<

stdio.h>

main()

{ inta=l,b=2,c=3,d=0;

 if(a==l&

b++==2)

 if(b!

=2||c--!

=3)

  printf("

%d,%d,%d\n"

,a,b,c);

 elseprintf("

A)1,2,3

B)1,3,2

C)l,3,3

D)3,2,1

【解析】程序首先执行第一个判断语句,a==1成立;

b++==2,先判断b是否为2,再进行b加1操作,执行后b的值为3。

继续执行第二个判断语句,注意程序此时进行逻辑或运算,b!

=2的值为真,因此条件表达式b!

=3的值为真,程序便不再执行第二个逻辑语句c--!

=3,而直接进行输出操作。

因此,本题正确答案为C)。

5.执行以下程序段后,w的值为________。

 int w='

,x=14,y=15;

 w=((x‖y)&

(w<

a'

));

A)-1

B)NULL

C)1

D)0

【解析】根据题目所给条件可知,x||y为1,w<

为1,1&

1结果为1。

因此正确答案为C)。

6.若变量已正确定义,有以下程序段:

int a=3,b=5,c=7;

if(a>

b)a=b;

 c=a;

if(c!

=a)c=b;

其输出结果是

A)程序段有语法错

B)3,5,3

C)3,5,5

D)3,5,7

【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。

所以正确答案为选项B)。

7.有以下程序段:

 int a,b,c;

 a=10;

 b=50;

 c=30;

 if(a>

b)a=b, b=c;

 printf("

a=%db=%dc=%d\n"

程序的输出结果是________。

A)a=10b=50c=10

B)a=10b=50c=30

C)a=10b=30c=10

D)a=50b=30c=50

【解析】该题考查if条件语句,当条件为真时,将b值赋给a,c值赋给b;

当条件为假时,将a值赋给c。

该题中if条件为假,所以将a的值赋给c,故a=10b=50c=10。

8.有以下程序:

#include <

{ int x=1,y=2,z=3;

 if(x>

y)

 if(y<

z) printf("

,++z);

 else printf("

,++y);

,x++);

程序的运行结果是________。

A)331

B)41

C)2

D)1

【解析】该题目考查if条件语句。

else语句和最近的一个if语句配对。

由于x>

y为假,所以直接执行最后一行代码。

9.有以下程序:

{ int x=1,y=0,a=0,b=0;

switch(x)

{ case1:

switch(y)

{ case0:

a++;

break;

case1:

b++;

case2:

a++;

case3:

a=%d,b=%d\n"

程序的运行结果是

A)a=1,b=0

B)a=2,b=2

C)a=1,b=1

D)a=2,b=1

【解析】本题考查了switch结构的内容。

在C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号作用,并不是在该处进行条件判断。

本题程序在执行完内部switch结构后,继续执行了外部switch结构的case2分支。

最后a和b的值分别为2和1。

1.在C语言中,当表达式值为0时表示逻辑值"

,当表达式值为  时表示逻辑值"

非0

【解析】本题一定要明确一个概念,即:

所有非0的数(并不只是"

),在c语言中都表示逻辑值为"

2.设x为int型变量,请写出一个关系表达式__,用以判断x同时为3和7的倍数时,关系表达式的值为真。

(x%3==0)&

(x%7==0)

【解析】x%3==0能保证x是3的倍数,x%7==0能保证x是7的倍数,(x%3==0)&

(x%7==0)能保证x是3的倍数并且x是7的倍数。

{inta=1,b=2,c=3,d=0;

if(a==1)

if(b!

=2)

if(c==3)d=1;

elsed=2;

elseif(c!

=3)d=3;

elsed=4;

elsed=5;

d);

程序运行后的输出结果是__。

4

【解析】a==1为真,b!

=2为假,c!

=3为假,所以d=4。

4.有以下程序

{intx;

x);

if(x>

15)printf("

,x-5);

10)printf("

,x);

5)printf("

,x+5);

若程序运行时从键盘输入12<

,则输出结果为。

1217

【解析】本题中输入12时,第一条if的条件x>

15不满足因此不执行,第二条if的条件x>

10满足因此输出12,第三条if的条件x>

5满足因此输出17。

5.以下程序运行后的输出结果是。

{intx=10,y=20,t=0;

if(x==y)t=x;

x=y;

y=t;

,x,y);

200

【解析】本题中if选择的条件x==y不满足,因此直接执行后面的x=y和y=t,则x的值为20,y的值为0。

第05章循环结构

1.以下不构成无限循环的语句或语句组是

A)n=0;

do{++n;

}while(n<

=0);

B)n=0;

while

(1){n++;

C)n=10;

while(n);

{n--;

D)for(n=0,i=1;

i++)

n+=i;

【解析】项A)中变量n的值,先自加1,再进行循环条件判断,此时循环条件n<

=0不成立,跳出循环。

所以正确答案为A)。

{inty=10;

while(y--);

y=%d\n"

,y);

程序执行后的输出结果是

A)y=0B)y=-1

C)y=lD)while构成无限循环

【解析】当y减为1时判断while(y--),此时满足条件,但是y变成0。

下次循环判断while(y--)时,因为y为0不满足条件跳出循环,但是此时也要执行y--,所以y变成了-1。

打印输出时输出-1。

3.有以下程序:

{ int i=5;

 do

 { if(i%3==1)

if(i%5==2)

{ printf("

*%d"

,i);

 break;

 }

 i++;

 } while(i!

=0);

\n"

);

A)*7

B)*3*5

C)*5

D)*2*6

【解析】整个程序中只有对i增加的语句而没有对i减少的语句,所以2、3都不可能出现,选项B)和D)错误。

而i=5时第一个if语句的表达式为假,所以选项C)也错误。

4.以下程序段中的变量已正确定义:

 for(i=0;

i<

4;

i++,i++)

  for(k=l;

k<

3;

k++);

*"

程序段的输出结果是________。

A)********

B)****

C)**

D)*

【解析】本题考察for循环语句,注意第二个for语句的后面有一个分号,即printf函数不属于循环体,无论循环执行多少次,printf("

)语句只执行一次。

因此,本题正确答案为D)。

5.有以下程序

{inta=1,b=2;

for(;

a<

8;

a++){b+=a;

a+=2;

%d,%d\n"

a,b);

程序运行后的输出结果是

A)9,18B)8,11C)7,11D)10,14

【解析】初始值a=1,b=2,第一次循环:

b=b+a=2+1=3,a=a+2=1+2=3,a=a+1=3+1=4;

第二次循环:

b=b+a=3+4=7,a=a+2=4+2=6,a=a+1=6+1=7;

第三次循环:

b=b+a=7+7=14,a=a+2=7+2=9,a=a+1=9+1=10,故本题答案选D。

6.有以下程序:

{ int  i,j;

 for(i=3;

i>

=1;

i--)

 { for(j=1;

j<

=2;

j++)printf("

,i+j);

 printf("

 }

A)234B)432

345543

C)23D)45

3434

4523

【解析】该题目主要考查for嵌套循环,要注意循环变量i和j的取值范围。

输出结果为变量i和j的和。

8.设变量已正确定义,以下不能统计出一行中输入

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

当前位置:首页 > 党团工作 > 党团建设

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

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