C语言综合练习题及详解.docx

上传人:b****3 文档编号:4919438 上传时间:2022-12-11 格式:DOCX 页数:33 大小:76.10KB
下载 相关 举报
C语言综合练习题及详解.docx_第1页
第1页 / 共33页
C语言综合练习题及详解.docx_第2页
第2页 / 共33页
C语言综合练习题及详解.docx_第3页
第3页 / 共33页
C语言综合练习题及详解.docx_第4页
第4页 / 共33页
C语言综合练习题及详解.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

C语言综合练习题及详解.docx

《C语言综合练习题及详解.docx》由会员分享,可在线阅读,更多相关《C语言综合练习题及详解.docx(33页珍藏版)》请在冰豆网上搜索。

C语言综合练习题及详解.docx

C语言综合练习题及详解

综合练习题

一、从下列四个供选择的答案中选出正确的一个答案

1、语句printf(“%%d%d”,123);将输出:

A)%123%dB)%%d123C)%d123D)上述语句语法有错

“%%”格式表示输出一个“%”。

2、执行下列程序段后,a值为:

inta,b;

a=15;b=12;

a=(a--==b++)?

a%5:

a/5;

A)0B)2.8C)4D)2

先计算a--==b++的值:

a--的值为15,执行后a=14;b++的值为12,执行后b=13;15==12为假

执行a/5即14/5值为2

结果:

a=2

3、判断字符变量c的值为数字(’0’---’9’)则返回1,否则返回0,可用表达式:

A)‘0’<=c<=‘9’B)‘0’<=c&&c<=‘9’C)‘0’<=c||c<=‘9’D)以上均不是

4、对于intx,y;语句if(x<0)y=-1;elseif(!

x)y=0;elsey=1;等价于:

A)y=0;if(x>=0)if(x)y=1;elsey=-1;

B)if(x!

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

C)if(x<0)y=-1;if(x!

=0)y=1;elsey=0;

D)y=-1;if(x!

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

语句if(x<0)y=-1;elseif(!

x)y=0;elsey=1;等价于:

if(x<0)

y=-1;

else{

if(!

x)

y=0;

else

y=1;

}

即:

-1x<0

y=0x=0

1x>0

5、循环for(i=0,j=5;++i!

=--j;)printf(“%d%d”,i,j);将执行

A)6次B)3次C)0次D)无限次

i=0,j=5,(++i1)!

=(--j4)成立:

i=1,j=4

i=1,j=4,(++i2)!

=(--j3)成立:

i=2,j=3

i=2,j=3,(++i3)!

=(--j2)成立:

i=3,j=2

……

6、下列程序段执行后s值为:

inti=5,s=0;

doif(i%2)continue;elses+=i;while(--i);

A)15B)9C)6D)以上均不是

写成规范形式:

do

if(i%2)

continue;

else

s+=i;

while(--i);

i=5,s=0:

i%2=1:

i=4

i=4,s=0:

i%2=0:

s=0+4=4;i=3

i=3,s=4:

i%2=1:

i=2

i=2,s=4:

i%2=0:

s=4+2=6;i=1

i=1,s=6:

i%2=1:

i=0

7、对于inta,要使((1<<2>>1)|a)==a;则a可以是:

A)2B)6C)10D)2,6,10均可

1:

0000000000000001

1<<2:

0000000000000100

1<<2>>1:

0000000000000010

(1<<2>>1)|2:

0000000000000010

(2)

(1<<2>>1)|6:

0000000000000110(6)

(1<<2>>1)|10:

0000000000001010(10)

8、对于以下宏定义:

#defineSQ(x)x*x

#defineDD(x,y)SQ(x)-SQ(y)

宏调用DD(2*3,2+3)执行后值为:

A)43B)11C)25D)以上均不是

DD(2*3,2+3)

SQ(2*3)-SQ(2+3)

2*3*2*3-2+3*2+3

43

9、对于以下结构定义:

struct{intlen;

char*str;

}*p;

*p->str++中的++加在

A)指针str上B)指针p上C)str所指的内容上D)以上均不是

优先级:

“->”>“*”=“++”,++是右结合

*p->str++*((p->str)++)

例子:

假如有

p

len12

strHello,world!

\0

则*p->str++的值为‘H’,执行后,str指向’e’单元.

10、将s所指节点加到p所指节点之后(如下图),其语句应为:

next.

........

pnext

s

A)s->next=p+1;p->next=s;

B)p->next=s;s->next=p->next;

C)s->next=p->next;p->next=s->next;

D)s->next=p->next;p->next=s;

11、语句if(a>b)k=0;elsek=1;(inta,b,k)等价于:

A)k=(a>b)?

1:

0;B)k=a>b;C)k=a<=b;D)以上均不是

12、对于inti;charc,s[20];从输入序列123ab45efg中将123读入i;’b’读入c;“45efg”读入s,则scanf语句应写为:

A)scanf(“%da%c%s”,i,c,s)B)scanf(“%d%*c%c%s”,&i,&c,s);

C)scanf(“%da%c%s”,&i,&c,&s)D)scanf(“%d%c%c%s”,&i,&c,s);

13、若有以下说明和语句,已知int和double类型分别占2和8个字节,则sizeof(st)的值为:

structst{

chara[10];

union{

inti;

doubley;

}

};

A)18B)20C)12D)以上均不是

14、对于以下程序段,运行后i值为:

enumWEEKS{1,2,3,4,5,6,7};

enumWEEKSa=1;

inti=0;

switch(a){

case1:

i=1;

case2:

i=2;

default:

i=3;

}

A)1B)0C)3D)上述程序有语法错误

15、对于以下递归函数f,调用f(4),其返回值为:

intf(intn)

{returnf(n-1)+n;}

A)10B)11C)0D)以上均不是

16、某一程序TEST.C,编译后运行:

TEST123456ABC则相应的argc及argv[3]分别为:

A)3“456”B)3“ABC”C)4“456”D)4“ABC”

argv[0]“TEST”

argv[1]“123”

argv[2]“456”

argv[3]“ABC”

17、如下程序段:

intc[]={1,7,12};

int*k;

k=c;

printf("nextkis%d",*++k);

其输出应为:

A)2B)7C)1D)以上均不对

k1c[0]

7c[1]

12c[2]

18、如果变量xx有如下类型:

struct{

chara1;1

inta2;2

}xx;

如果sizeof(xx)的值为3,则:

union{

chara1;

inta2;

inta3;

}yy;

则sizeof(yy)函数的返回值应为:

A)2B)4C)5D)定义有错

19、对于enum{RAIN,CLOUD,CLEAR}weather;做如下操作:

⑴weather=1;

⑵weather=CLOUD;下列哪个说法是对的。

A)⑴是错的B)⑵是错的C)⑴与⑵是一样的D)以上都错

20、设inta1=7,a2=1,xx;进行如下操作xx=(a1<<1)&~(a2<<2)后xx的值为:

A)0B)1C)10D)以上都错

7:

0000000000000111

7<<1:

0000000000001110

1<<2:

0000000000000100

~(1<<2):

1111111111111011

&0000000000001010

0000000000001010(10)

21、执行i=3;if(i>3)if(i<4)i=1elsei=2;后i的值应为:

A)1B)2C)3D)语句错误

22、执行下列程序:

#defineMA(x,y)((x)*(y))

i=5;

i=MA(i,i+1)-7;

后变量i的值应为:

A)30B)19C)23D)1

MA(i,i+1)-7

→((i)*(i+1))–7

→(5*6)–7

→23

23、执行下列程序:

inti,j;

i=3/2+7/2==5;

j=45%11+(((7>8)?

14:

21)==14);

后变量i,j的值应为:

A)i=0j=1B)i=1j=1

C)i=0j=2D)i=1j=2

i=((3/2+7/2)==5)=((1+3)==5)=(4==5)=0;

j=1+(21==14)=1+0=1

24、如果charcc[]="12345",做sizeof(cc)后的返回值应为

A)2B)5C)6D)1

sizeof()返回参数对象的字节数:

这里的参数是字符数组cc,有6个元素.

25、如果inti=16,j=23;执行printf("%x--%o",i,j)后输出为:

A)10--23B)10--27C)16--23D)16--27

26、执行下列程序:

#defineMA(x,y)(x)*(y)

inti=2;

i=3/MA(i,i+1)+5;

printf(“%d\n”,i);

其输出应为:

A)5B)8C)0D)以上都错

3/MA(i,i+1)+5

→3/(i)*(i+1)+5

→3/2*3+5

→8

27、有一函数:

intf(inta){

autointb=0;

staticintc=3;

b=b+1;

c=c+1;

return(a+b+c);

}

如果有inti,j;则执行两次调用:

i=f

(2);j=f

(2)后,i,j值为:

A)i=7,j=7B)i=7,j=8

C)i=8,j=7D)i=8,j=8

注意静态局部变量staticintc;的含义

第一次调用f

(2):

开始时:

b=0,c=3

执行:

b=0+1=1,c=3+1=4;

返回:

a+b+c=2+1+4=7;

调用结束后:

静态局部变量c=4保持不变;

第二次调用f

(2):

开始时:

b=0,c=4

执行:

b=0+1=1,c=4+1=5;

返回:

a+b+c=2+1+5=8;

调用结束后:

静态局部变量c=5保持不变;

28、有一函数:

intf(char*s){

intk=0;

while(*s)k=k*10+*s++-’0’;

return(k);

}

调用f(“1234”)的返回结果是:

A)“1234”B)1234C)“4321”D)4321

while循环等价于:

while(*s)k=k*10+(*s++)–‘0’;

该函数的作用:

将数字字符串转换成相应的整数.

29、staticinta[]={1,2,3},*p,*q;

p=a+1;

q=p++;

执行该程序段后,p和q所指向的单元的内容分别为:

A)(*p)=1,(*q)=2B)(*p)=2,(*q)=3

C)(*p)=3,(*q)=2D)以上都错

1a[0]

p2a[1]

3a[2]

a

30、staticstruct{

intx,y[3];

}a[3]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p;

p=a;

则*((int*)(p+1)+2)=?

A)3B)7C)10D)以上都错

 

p1

a[0]

2

3

4

p+15

a[1]

6

7

8

9

a[2]

10

11

12

 

二、填空题

1、用for循环打印147101316192225,其语句应为:

for(i=1;i<=9;i++)printf(“%3d”,_3*i-2__);

2、执行完下列语句段后,i,j值分别为:

___355,350__

inti,j;

j=10*(i=5);

i+=j*=i+2;

第一条语句执行后:

i=5,j=50

执行第二条语句:

i+=j*=i+2

→i+=(j*=(i+2))

→i+=(j*=7)

→i+=(j=50*7)

→i=5+350=355,j=350

3、执行完下列语句段后,i值为:

__5__

staticinta[3][4]={{1,2,3},{4,5,6}},i;

i=a[0][5];

a[0][0]1X

a[0][1]2X+2

a[0][2]3X+4

a[0][3]?

X+6

a[1][0]4X+8

a[1][1]5X+10

a[1][2]6X+12

a[1][3]?

X+14

a[2][0]?

X+16

a[2][1]?

X+18

a[2][2]?

X+20

a[2][3]?

X+22

a[0][5]的地址:

X+(0*4+5)*2=X+10,即对应于a[1][1]。

4、执行完下列语句段后,i值为:

__4___

inti;

intf(intx)

{staticintk=0;

x+=k++;

returnx;

}

i=f

(2);

i=f(3);

5、执行完下列语句段后,i值为:

__18__

inti;

intf(intx)

{return((x>0)?

x*f(x-1):

3);}

i=f(f

(1));

调用f

(1):

(1>0)成立,执行1*f(0)=f(0),

调用f(0)=3

所以,f

(1)=3;

调用f(3):

f(3)=3*f

(2)

f

(2)=2*f

(1)=2*3=6

所以f(3)=3*6=18

6、执行完下列语句段后,s和f值分别为:

__”%s%lf”,12.4__

chars[20];

doublef;

sscanf(“%s%lf12.4%s%f12.5”,“%s%lf”,s,&f);

函数sscanf()的一般形式:

sscanf(char*buffer,char*format,var1,var2,var3,…)

它的含义:

从缓冲区buffer中按照格式字符串format读入变量var1,var2,var3,…的值。

7、对于charc;若已知其值为小写字母,将其转换为相应大写字母的表达式为___c–‘a’+‘A’______

8、将p说明为字符数组指针,数组大小为10,可写为:

__char(*p)[10];__

9、用typedef定义类型CP,以表示一个指向含有10个字符型元素的指针数组类型。

typedefchar*CP[10];

四个步骤:

(1)char*ptr[10];

(2)char*CP[10];

(3)typedefchar*CP[10];

(4)CP*ptr[10];

10、如下函数

voidf(char*s,char*t)

{inti;

i=0;

while(s[i]=t[i])i++;

}

等价于:

voidf(char*s,char*t)

{while(_*s++_=*t++);

}

11、inti=0,s=0;

while(i

等价于

inti,s;

for(_i=0,s=0;i

12、head为指向以下结构的链表指针,统计链表中所有inf域值之和(s)的程序段为:

structnlist{

intinf;

structnlist*next;

}*head,*p;

longs;

for(p=head,s=0;_p!

=NULL_;p=p->next)

s+=__p->inf__;

13、下列程序判断字符串s是否对称,对称则返回1,否则返回0;如f(“abcba”)返回1,f(“abab”)返回0;

intf(__chars[]_)abcba\0

{inti=0,j=0;

while(s[j])j++;

for(j--;i

return__i>=j__;

}

14、下面是用二分法从数组v[n]中查找数x的函数,返回值为x所在下标(若找到)或-1(没找到):

binsearch(intx,intv[],intn)

{intlow,high,mid;

low=0;high=n-1;

while(low<=high){

mid=_(low+high)/2_;

if(x

elseif(x>v[mid])low=mid+1;

elsereturn__mid_;

}

return-1;

}

15、下面程序验证哥德巴赫猜想,即寻找2到1000间满足“偶数=素数1+素数2”(如10=3+7)的所有偶数。

素数指只能被1和自身整除的正整数,如1,2,3,17等。

#include

#defineMAX500

intprime(intn)/*判断n是否为素数*/

{inti;

for(i=2;i<=n-1;i++)

if(!

(n%i))break;

return_i==n_;

}

main()

{inti,j;

for(i=1;i<=500;i++)

for(j=1;j<2*i;j+=2)

if(_prime(j)&&prime(2*i-j)_){

printf(“%d=%d+%d\n”,2*i,j,2*i-j);/*若2*i为两个素数之和*/

break;

}}

16、对于整型变量i,j执行scanf("%d%*d%d",&i,&j);当输入23456后

i=_2_j=_4__

17、对于int*p,*q,i=5,j=6;执行:

p=&i;

q=p;

p=&j;后(*p)=_6_,(*q)=__5__

18、f(intm)

{

inti,j;

for(i=0;i

for(j=m-1;j>=0;j--)

printf(“%1d%c",i+j,j?

'*':

'#');

}

如果调用f(3)将输出__2*1*0#3*2*1#4*3*2#__

19、voidf(int*a,intb)

{

staticintk=0;

*a+=++k;

b+=2;

}

若执行i=2;j=4;

f(&i,j);

f(&j,i)后i=__3__,j=__6___

i23j4i3j46

k01k12

ab46ab35

20、用for循环打印012012012;

for(i=1;i<=9;i++)printf("%2d",__(i-1)%3__);

21、定义一个返回整型的函数指针p,应写为_int(*p)();_

22、定义字符指针数组arr,数组大小为20,应写为__char*arr[20];__

23、程序A

voidf(charcc[])

{

charch;

inti=0,j=0;

while(cc[i]!

=NULL)i++;

i--;

for(;j

ch=cc[j];

cc[j]=cc[i];

cc[i]=ch;

}

}

等价于程序B

voidf(char*cc)

{

char*p1,*p2,ch;

p1=p2=cc;

w

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

当前位置:首页 > 法律文书 > 调解书

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

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