c语言习题doc.docx

上传人:b****9 文档编号:25318827 上传时间:2023-06-07 格式:DOCX 页数:34 大小:25.73KB
下载 相关 举报
c语言习题doc.docx_第1页
第1页 / 共34页
c语言习题doc.docx_第2页
第2页 / 共34页
c语言习题doc.docx_第3页
第3页 / 共34页
c语言习题doc.docx_第4页
第4页 / 共34页
c语言习题doc.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

c语言习题doc.docx

《c语言习题doc.docx》由会员分享,可在线阅读,更多相关《c语言习题doc.docx(34页珍藏版)》请在冰豆网上搜索。

c语言习题doc.docx

c语言习题doc

1.C语言中,int型数据在计算机内部是由()表示的。

答:

int型数据在计算机内部是由16位补码表示的。

2.下列可以作为C语言用户标识符的是()。

A)_123B)a1b2c3C)intD)123abc

答:

A)和B)

C语言标识符必须是以英文字母(a到z)、或者下划线_开头的字符串。

字符串中只能包含英文字母、下划线和数字(0到9)。

但字符串不能是C语言中的32个保留字(例如int,short,long,unsigned,float,char,if,switch,for,while等)。

3.在C语言中,如果下面的变量都是int类型,则输出的结果是()。

sum=pad=5,pAd=sum++,pAd++,++pAd;

printf("%d\n",pad);

答:

输出结果是5。

因为C语言是字母大小写敏感的,也就是说区分大小写字母。

pad和pAd是两个不同的变量。

4.以下程序的输出结果是()。

#include

main()

{

printf("%d\n",NULL);

}

答:

0

因为stdio.h头文件中NULL的定义如下:

#defineNULL0

5.下面程序的输出是()。

main()

{intx=10,y=3;

printf("%d\n",y=x/y);

}

答:

3

因为两个同类型的数据作算术运算,其结果仍为该类型。

即整数除以整数,商仍为整数。

10/3的商为3。

6.下面程序的输出是()。

main()

{intx=023;

printf("%d\n",--x);

}

答:

18

因为023是一个八进制数,表达式--x的值为022,按照%d带符号的十进制数输出,结果为18。

注意:

023是八进制数;23是十进制数;0x23是十六进制数。

7.在C语言中,不正确的int类型的常数是()。

A)32768B)0C)037D)0xAF

答:

A)

8.执行下面程序中的输出语句后a的值是()。

main()

{inta;

printf("%d\n",(a=3*5,a*4,a+5));

}

答:

15

因为在计算逗号表达式a=3*5,a*4,a+5时,依次计算下面3个表达式:

a=3*5(结果变量a的值为15,该赋值表达式的值也为15)

a*4(该算术表达式的值为60)

a+5(该算术表达式的值为20,输出函数printf输出20)

逗号表达式的值为20,但变量a的值认为15。

9.以下程序的输出结果是()。

#include

main()

{inta=2,c=5;

printf("a=%%d,b=%%d\n",a,c);

}

A)a=%2,b=%5B)a=2,b=5C)a=%%d,b=%%dD)a=%d,b=%d

答:

D)

因为%%是格式说明符,输出%,其它原样输出。

如果输出函数语句改成printf("a=%%%d,b=%%%d\n",a,c);,那么输出结果为A)。

10.以下程序的输出结果是()。

#include

main()

{inta,b,d=241;

a=d/100%9;

b=(-1)&&(-1);

printf("%d,%d\n",a,b);

}

A)6,1B)2,1C)6,0D)2,0

答:

B)

241/100的值为2,2%9的值为2。

(-1)&&(-1)的值为1。

在逻辑运算中,非0的值为真,真“与”真结果为真,关系和逻辑运算的结果如果为真用“1”表示,如果为假用“0”表示。

11.请选出以下语句的输出结果()。

printf("%d\n",strlen("\t\"\065\xff\n"));

答:

5

函数strlen的功能是计算字符串长度。

那么字符串"\t\"\065\xff\n"包含多少个字符呢?

\t是横向跳格字符;\”是字符”;\065是ASCII码值为八进制数065的字符;\xff是ASCII码值为十六进制数0xff的字符;\n是换行字符。

该字符串共有5个字符。

注意:

记住常用的转义字符。

12.下面程序的输出结果是()。

inti=65536;

printf("%d\n",i);

答:

-1

因为int型变量i在C语言中是用16位补码表示的,而65535变成二进制数为111111*********1,因此i的值为111111*********1,按照带符号的十进制数%d输出-1,因为111111*********1是-1的补码。

13.若有说明和语句:

inta=5;

a++;

此处表达式a++的值是()。

答:

表达式a++的值是5表达式计算后,变量a的值是6。

14.若k为int变量,则以下语句()。

k=8567;

printf("|%-06d|\n",k);

答:

|8567|

两个|原样输出,格式符%-06d说明输出变量k的值长度为6且左对齐。

15.若x为float型变量,则以下语句()。

x=213.82631;

printf("%-4.2f\n",x);

答:

213.83

16.若x为double变量,则以下语句()。

x=213.82631;

printf("%-6.2e\n",x);

答:

2.14e+02

17.若ch为char型变量,k为int型变量(已知字符a的ASCII十进制代码为97),则执行下列语句

ch='a';

k=12;

printf("%x,%o,",ch,ch,k);

printf("k=%%d\n",k);

输出为()。

答:

61,141,k=%d

18.若有以下定义:

chars=’\092’;

则该语句()。

A).使s的值包含1个字符

B).定义不合法,s的值不确定

C).使s的值包含4个字符

D).使s的值包含3个字符

答:

B)

因为字符’\092’中的092应该是八进制数,但八进制数中不可能出现9。

19.执行以下语句后,输出结果是()。

inta=1;

printf("%d,%d",a,a++);

答:

2,1

因为C语言中函数的实参计算顺序是从右至左。

即首先计算a++,然后计算a。

20.以下程序的输出结果是()。

#include

main()

{

inti=010,j=10;

printf("%d,%d\n",++i,j--);

}

A)11,10B)9,10C)010,9D)10,9

答:

B)

010是八进制数。

21.已知字母A的ASCII码为65,以下程序的输出结果是()。

  #include

main()

{

charc1='A',c2='Y';

printf("%d,%d\n",c1,c2);

}

答:

65,89

22.以下语句

inta=110,b=017;

printf("%x,%d\n",a++,++b);

输出结果是()

答:

6e,16

110的十六进制数为6e,八进制数017加1为020,等于十进制数16。

23.以下程序

main()

{inti=3,j=2,a,b,c;

a=(--i==j++)?

--i:

++j;

b=i++;

c=j;

printf("%d,%d,%d\n",a,b,c);

输出结果是()

答:

1,1,3

24.请读程序

#include

main()

{

inta;floatb,c;

scanf("%2d%3f%4f",&a,&b,&c);

printf("\na=%d,b=%f,c=%f",a,b,c);

}

若运行时从键盘上输入9876543210表示回车),则上面程序的输出结果是()。

答:

a=98,b=765.000000,c=4321.000000

25.请读程序片段(字符串内没有空格字符):

printf("%d\n",strlen("AST\n012\1\\"));

上面程序的输出结果是()。

答:

9

字符串中包含9个字符,分别是AST\n012\1\\。

26.以下程序的输出结果是()

main()

{inti=-1;

printf("%d,%u\n",i,i);

答:

-1,65535

1.判断型char变量c1是否为小写字母的正确表达式为()。

A)'a'<=c1<='z'

B)(c1>=a)&&(c1<=z)

C)('a'>=c1)||('z'>=c1)

D)(c1>='a')&&(c1<='z')

答:

D)

2.程序的运行结果是()。

main()

{

inta=1,b=2,c=3,d=4,m=2,n=2;

(m=a>b)&&(n=c>d);

printf("%d",n);

}

答:

2

首先计算m=a>b,因为关系运算符>优先级高于赋值运算符=,a>b的结果为假(0),赋值后m的值为0。

因为C语言计算逻辑表达式0&&(n=c>d)时,已经知道结果为0,因此n=c>d就不计算了。

N的值仍为2。

3.执行以下语句后a的值为();b的值为()。

inta,b,c;

a=b=c=1;

++a||++b&&++c;

答:

a的值为2;b的值为1。

4.程序的运行结果是()。

main()

{

intx=10,y=20,z=30;

if(x>y)

z=x;x=y;y=z;

printf("%d,%d,%d",x,y,z);

}

答:

20,30,30

因为if(x>y)

z=x;x=y;y=z;

是三条语句,即:

if(x>y)z=x;

x=y;

y=z;

而不是:

if(x>y)

{z=x;x=y;y=z;}

5.程序的运行结果是()。

main()

{

intm=5;

if(m++>5)printf("%d\n",m);

elseprintf("%d\n",m--);

}

答:

6

因为表达式m++>5的值为假,m的值为6,执行语句printf("%d\n",m--);时输出6,m的值又变为5。

6.程序的运行结果是()。

main()

{

inta=100,x=10,y=20,m=5,n=0;

if(x

if(y!

=m)

a=1;

else

if(n)a=10;

a=-1;

printf("%d\n",a);

}

答:

-1

在if嵌套中,else总是与它上面最近的if结合,因此本程序变为:

if(x

{if(y!

=m)

a=1;

else

if(n)a=10;

}

a=-1;

最后变量a的值为-1。

7.若有条件表达式(exp)?

a++:

b--;则以下表达式中能完全等价于

表达式(exp)的是()

A)(exp==0)B)(exp!

=0)

C)(exp==1)d)(exp!

=1)

答:

B)

因为表达式(exp)的意义是:

当变量exp的值为0时表示假;当变量exp的值为非0时表示真。

因此它与(exp!

=0)等价。

8.程序的运行结果是()。

main()

{

intk=4,a=3,b=2,c=1;

printf("%d\n",k

k:

c

c:

a);

}

答:

1

因为运算符?

的结合性是自右至左。

因此首先计算c

c:

a,结果为1,然后计算k

k:

1,结果仍为1。

9.已知A=7.5,B=2,C=3.6,表达式

A>B&&C>A||!

A

C>B的值是()。

答:

0

10.当m=2,n=1,a=1,b=2,c=3时,执行完

d=(m=a!

=b)&&(n=b>c)后,n=(),m=()。

答:

n=0,m=1

因为首先计算关系运算a!

=b,结果为真即1,再计算赋值运算m=1;再计算b>c,结果为假即0,赋值n=0;最后d的值为假即0。

11.程序的运行结果是()。

main()

{

intx,y,z;

x=1;y=2;z=3;

x=y--<=x||x+y!

=z;

printf("%d,%d",x,y);

}

答:

1,1

因为关系运算符优先级高于逻辑运算符,因此首先计算y--<=x,结果表达式的值为假(0),y的值为1;再计算x+y!

=z,结果为真

(1),x的值为真

(1)。

12.以下程序

main()

inti=0,j=0,k=6;

if((++i>0)||(++j>0))k++;

printf(”%d,%d,%d\n”,i,j,k);

输出结果是()

答:

1,0,7

首先计算++i>0,结果表达式的值为真,变量i的值为1。

在计算1||(++j>0)时,因为结果为真

(1),C语言不再计算表达式(++j>0)了。

因为if()中的逻辑表达式值为真,因此计算k++,结果k值7。

13.程序的运行结果是()。

main()

{

inta=2,b=7,c=5;

switch(a>0)

{case1:

switch(b<0)

{case1:

printf("@");break;

case2:

printf("!

");break;

}

case0:

switch(c==5)

{case0:

printf("*");break;

case1:

printf("#");break;

default:

printf("?

");break;

}

default:

printf("&");

}printf("\n");

}

答:

#&

因为表达式a>0的值为真

(1),计算case1:

后面的语句

switch(b<0)

{case1:

printf("@");break;

case2:

printf("!

");break;

}

由于表达式b<0的值为假(0),因此本语句执行结束。

又由于本语句后面无break语句,因此继续执行

switch(c==5)

{case0:

printf("*");break;

case1:

printf("#");break;

default:

printf("?

");break;

}

结果输出#,由于上面的语句后面也无break语句,因此继续执行语句

printf("&");

输出&。

14.下面程序的输出是()。

main()

{inta=-1,b=4,k;

k=(a++<=0)&&(!

(b--<=0));

printf("%d%d%d\n",k,a,b);

}

答:

103

关系表达式a++<=0的值为真(即1),因为首先判断-1<=0,然后执行a++,变量a的值为0;

关系表达式!

(b--<=0)的值为真(即1),因为首先判断4<=0,然后执行b--,变量b的值为3,最后执行逻辑非运算!

逻辑表达式(a++<=0)&&(!

(b--<=0))的值为真(即1),执行赋值运算后,变量k的值为1。

15.下面的程序片段所表示的数学函数关系是()。

y=-1;

if(x!

=0)

if(x>0)y=1;

elsey=0;

A)y=-1(x<0)B)y=1(x<0)C)y=0(x<0)D)y=-1(x<0)

0(x=0)-1(x=0)-1(x=0)1(x=0)

1(x>0)0(x>0)1(x>0)0(x>0)

答:

C)

16.下面程序的输出是()。

main()

{intx=100,a=10,b=20,ok1=5,ok2=0;

if(a

if(b!

=15)

if(!

ok1)

x=1;

else

if(ok2)x=10;

x=-1;

printf("%\n",x);

}

A)-1B)0C)1D)下面定的值

答:

A)

因为语句x=-1;并不在if语句之中。

17.与y=(x>0?

1:

x<0?

-1:

0)功能相同的if语句是()。

a)if(x>0)y=1;b)if(x)

elseif(x<0)y=-1;if(x>0)y=1;

elsey=0;elsey=-1;

c)y=-1;d)y=0;

if(x)if(x>0)

if(x>0)y=1;if(x>0)y=1;

elseif(x==0)y=0;elsey=-1;

elsey=-1;

答:

A)

18.设a=6,b=-8,c=3,以下逻辑表达式的值为()。

'd'&&(a>b)&&(b>c)&&(a-c)

答:

0

19.若执行下面的程序时从键盘上输入3和4,则输出是()。

main()

{inta,b,s;

scanf("%d%d",&a,&b);

s=a;

if(a

s=s*s;

printf("%d\n",s);

}

答:

16

20.下面的程序

main()

{intx=3,y=0,z=0;

if(x=y+z)printf("****");

elseprintf("####");

答:

####

21.两次运行下面的程序,如果从键盘上分别输入6和4,则输出的结果是()。

main()

{intx;

scanf("%d",&x);

if(x++>5)printf("%d",x);

elseprintf("%d\n",x--);

}

答:

75

22.假定所有变量均已正确说明,下列程序段运行后x值是()。

a=b=c=0;x=35;

if(!

a)x--;

elseif(b);if(c)x=3;

elsex=4;

答:

4

该程序:

a=b=c=0;

x=35;

if(!

a)x--;elseif(b);

if(c)x=3;elsex=4;

23.以下两条if语句合并成一条if语句为()。

if(a<=b)x=1;

elsey=2;

if(a>b)printf("****y=%d\n",y);

elseprintf("####x=%d\n",x);

答:

if(a<=b){x=1;

printf("####x=%d\n",x);

}

else{y=2;

printf("****y=%d\n",y);

}

1.下面程序段的运行结果是()。

x=y=0;

while(x<15)y++,x+=++y;

printf("%d,%d",y,x);

答:

8,20

y++,x+=++y;是一个逗号表达式语句,首先计算y++,然后计算x+=++y。

2.程序的运行结果是()。

#include

main()

{

intc=0;

while(c<=2)

{c++;

printf("%d\n",c);

}

}

答:

1

2

3

3.输入2473,下面程序的运行结果是()。

#include

main()

{

intc;

while((c=getchar())!

='\n')

switch(c-'2')

{case0:

case1:

putchar(c+4);

case2:

putchar(c+4);break;

case3:

putchar(c+3);

default:

putchar(c+2);break;

}

printf("\n");

}

答:

668977

第一次函数getchar()从键盘读取字符2,变量c的值为字符2,因此c-'2'的值为0,执行case0:

后面的语句putchar(c+4);和putchar(c+4);执行break;语句后,switch语句执行结束。

此次输出字符66。

4.下面程序段输出结果为()。

intx=3;

do{printf("%d\n",x-=2);}while(!

(--x));

答:

1

-2

5.不是无限循环的语句为()。

A)for(y=0,x=1;x>++y;x=i++)i=x;

B)for(;;x++=i);

C)while

(1){x++;}

D)for(i=10;;i--)sum+=i;

答:

A)

6.下面程序段的运行结果是()。

for(y=1;y<10;)y=((x=3*y,x+1),x-1);

printf("x=%d,y=%d",x,y);

答:

x=15,y=14

执行完第1次循环后x=3y=2

执行完第2次循环后x=6y=5

执行完第3次循环后x=15y=14

7.程序的运行结果是()。

#include

main()

{

inta,b;

for(a=1,b=1;a<=100;a++)

{if(b>=20)break;

if(b%3==1){b+=3;continue;}

b-=5;

}

printf("%d\n",a);

}

答:

8

8.下面程序段不是无限循环的是()。

A)inti=100;

while

(1)

{i=i%100+1;

if(i>100)break;

}

B)for(;;);

C)intk=0;

do{++k;}while(k>=0);

D)ints=36;

while(s);--s;

答:

C)

i值只能是从1到100之间变化,i>100永远是假,因此break永远也不会被执行。

for循环语句的第2个表达式没有,意味着永远为真。

每次循环k的值加1,当k的值为32767时,再执行++k,k的值变为-32768,循环结束。

因为语句—s并不在循环中,while(s);永远执行一个空语句。

9.下面程序段()。

x=3;

do{y=x--;

if(!

y){printf("*");continue;}

printf("#");

}while(1<=x<=2);

A)输出##B)输出##*

C)无限循环D)含有不合法的控制表达式

答:

C)

第一次循环执行y=x--;后x和y的值分别为2和3,因此输出1个#。

执行1<=x<=2时由于逻辑运算符<=的结合性是从左至右,因此首先计算1<=x,结果为真(即1),然后计算1<=2,结果仍为真,再次执行循环。

可以看出无论1<=x为真(即1)或者为假(即0),1<=x<=2的值始终为真,因此循环为无限循环。

10.程序的运行结果是()。

#include

main()

{intk=0;charc='A';

do{switch(c++)

{case'A':

k++;break;

case'B':

k--;

case'C':

k+=2;break;

case'D':

k=k%2;continue;

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

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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