C语言综合练习题.docx
《C语言综合练习题.docx》由会员分享,可在线阅读,更多相关《C语言综合练习题.docx(24页珍藏版)》请在冰豆网上搜索。
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)C)4D)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;
5、循环for(i=0,j=5;++i!
=--j;)printf(“%d%d”,i,j);将执行
A)6次B)3次C)0次D)无限次
6、下列程序段执行后s值为:
inti=5,s=0;
doif(i%2)continue;elses+=i;while(--i);
A)15B)9C)6D)以上均不是
`
7、对于inta,要使((1<<2>>1)|a)==a;则a可以是:
A)2B)6C)10D)2,6,10均可
8、对于以下宏定义:
#defineSQ(x)x*x
#defineDD(x,y)SQ(x)-SQ(y)
宏调用DD(2*3,2+3)执行后值为:
A)43B)11C)25D)以上均不是
,
9、对于以下结构定义:
struct{intlen;
char*str;
}*p;
*p->str++中的++加在
A)指针str上B)指针p上C)str所指的内容上D)以上均不是
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值为:
enum{1,2,3,4,5,6,7}WEEKS;
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、某一程序,编译后运行:
TEST123456ABC则相应的argc及argv[3]分别为:
A)3“456”B)3“ABC”C)4“456”D)4“ABC”
17、如下程序段:
intc[]={1,7,12};
int*k;
k=c;
;
printf("%d",*++k);
其输出应为:
A)2B)7C)1D)以上均不对
18、如果变量xx有如下类型:
struct{
chara1;
inta2;
}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)以上都错
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
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
24、如果charcc[]="12345",做sizeof(cc)后的返回值应为
A)2B)5C)6D)1
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)以上都错
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
《
28、有一函数:
intf(char*s){
intk=0;
while(*s)k=k*10+*s++-’0’;
return(k);
}
调用f(“1234”)的返回结果是:
A)“1234”B)1234C)“4321”D)4321
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)以上都错
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)以上都错
二、填空题
1、用for循环打印147101316192225,其语句应为:
for(i=1;i<=9;i++)printf(“%3d”,_______);
2、执行完下列语句段后,i,j值分别为:
_________
inti,j;
,
j=10*(i=5);
i+=j*=i+2;
3、执行完下列语句段后,i值为:
_______
staticinta[3][4]={{1,2,3},{4,5,6}},i;
i=a[0][5];
4、执行完下列语句段后,i值为:
________
inti;
intf(intx)
…
{staticintk=0;
x+=k++;
returnx;
}
i=f
(2);
i=f(3);
5、执行完下列语句段后,i值为:
________
inti;
intf(intx)
(
{return((x>0)x*f(x-1):
3);}
i=f(f
(1));
6、执行完下列语句段后,s和f值分别为:
_________
chars[20];
doublef;
sscanf(“%s%lf%s%”,“%s%lf”,s,&f);
7、对于charc;若已知其值为小写字母,将其转换为相应大写字母的表达式为_________
?
8、对于如下类型定义A:
typedefint(*A[10])();
也可以用以下方式分开定义:
typedef______________;/*先定义PT*/
typedefPTA[10];
9、将p说明为字符数组指针,数组大小为10,可写为:
_________________
10、如下函数
voidf(char*s,char*t)
{inti;
i=0;
while(s[i]=t[i])i++;
}
等价于:
voidf(char*s,char*t)
{while(_______=*t++);
}
11、inti=0,s=0;
)
while(i等价于
inti,s;
for(____________________);
12、head为指向以下结构的链表指针,统计链表中所有inf域值之和(s)的程序段为:
structnlist{
intinf;
structnlist*next;
}*head,*p;
/
longs;
for(p=head,s=0;_________;p=p->next)
s+=____________;
13、下列程序判断字符串s是否对称,对称则返回1,否则返回0;如f(“abcba”)返回1,f(“abab”)返
回0;
intf(___________)
{inti=0,j=0;
while(s[j])j++;
for(j--;i*
return_________;
}
14、下面是用二分法从数组v[n]中查找数x的函数,返回值为x所在下标(若找到)或-1(没找到):
binsearch(intx,intv[],intn)
{intlow,high,mid;
low=0;high=n-1;
while(low<=high){
mid=__________;
if(x《
elseif(x>v[mid])low=mid+1;
elsereturn_________;
}
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______;
}
main()
{inti,j;
for(i=1;i<=500;i++)
for(j=1;j<2*i;j+=2)
if(_____________){
《
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=______j=________
}
17、对于int*p,*q,i=5,j=6;执行:
p=&i;
q=p;
p=&j;后(*p)=______,(*q)=_______
18、f(intm)
{
inti,j;
for(i=0;ifor(j=m-1;j>=0;j--)
~
printf(“%1d%c",i+j,j'*':
'#');
}
如果调用f(3)将输出____________
19、voidf(int*a,intb)
{
staticintk=0;
*a+=++k;
b+=2;
}
~
若执行i=2;j=4;
f(&i,j);
f(&j,i)后i=_______,j=_________
20、用for循环打印012012012;
for(i=1;i<=9;i++)printf("%2d",__________);
21、定义一个返回整型的函数指针p,应写为________
22、定义字符指针数组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;
while(______)
(
p2++;
p2--;
while(p1ch=*p2;
____=*p1;
____=ch;
____;
p2--;
}
}
^
24、程序A:
intf(intn)
{
if(n<=1)
returnn;
else
returnf(n-1)+f(n-2);
}
等价于程序B:
)
intf(intn)
{
_______;
t0=0;t1=1;t=n;
while(______){
t=______;
t0=t1;
t1=t;
n--;
}
!
return______;
}
25、下列函数strcmp(s1,s2)是字符串比较,根据s1,s2大小分别返回负数(s1(s1>s2).请将缺少的部分补上。
strcmp(___________)
{
for(;*s1!
=_______;++s1,++s2)
if(*s1!
=*s2)break;
&
return(_______);
}
26、下列函数f(A,n,x)将正整数x插入已从小到大排序好的数组A中.数组A当前分量个数为
n.例如,当A的前5个分量为(2,3,9,12,15),n=5时,调用f(A,n,10)后,n变为6,A的前6个
量为:
(2,3,9,10,12,15)。
voidf(________)
{
intt,i;
i=n;A[n+1]=______;
…
while((i>=0)&&(______)){
t=A[i];
A[i]=A[i+1];
A[i+1]=t;
i--;
}
n++;
}
27、本程序从一个文件中读出内容,除去其中的数字后写入另一文件。
请将程序
[
中所缺的部分补上。
#include<>
intmain()
{
FILE*fr,*to;
intcc;
if(______){
printf("Cannotopenfile-->");
return1;
}
—
if(______){
printf("Cannotopenfile-->");
return1;
}
while((cc=getc(fr))!
=EOF)
if(cc<'0'||cc>'9')_______;
______;
}
三、程序阅读理解,并回答相应问题
"
1、#include<>
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
main()
{ints,i;
for(s=0,i=0;i<3;i++)
s+=*(*a+i);
printf(“%d”,s);
for(s=0,i=0;i<3;i++)
s+=**(a+i);
printf(“%d”,s);
\
}
问题:
上述程序运行后,将输出_______________
2、#include<>
intx,y,z,w;
voidp(intx,int*y)
{intz;
++x;
++*y;
z=x+*y;
w+=x;
!
printf(“%3d%3d%3d%3d\n”,x,*y,z,w);
}
main()
{x=y=z=w=2;
p(y,&x);
printf(“%3d%3d%3d%3d\n”,x,y,z,w);
}
问题:
上述程序运行后,第一行将输出_______________
第二行将输出_______________
3、#include<>
—
inta[2][5];
voidp1(intv[])
{inti,j,temp;
for(i=1;i<5;i++)
for(j=i-1;j>=0&&v[j]temp=v[j];v[j]=v[j+1];v[j+1]=temp;
}
}
voidp2(intv1[],intv2[])
{inti=0,j=0;
}
while(i<5&&j<5)
if(v1[i]>v2[j])printf("%d",v1[i++]);
elseprintf("%d",v2[j++]);
while(i<5)printf("%d",v1[i++]);
while(j<5)printf("%d",v1[j++]);
printf("\n");
}
main()
{inti,j;
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
p1(a[0]);
p1(a[1]);
for(i=0;i<2;i++)
for(j=0;j<5;j++)
printf("%d",a[i][j]);
printf("\n");
p2(a[0],a[1]);
}
'
问题:
当输入59112107311410时,上述程序运行后,
第一行将输出_______________第二行将输出______________
4、#include<>
voidp(intr[],ints,intt)
{
inti,j,x;
i=s;j=t;x=r[s];
while(iwhile((i=x))/*NOTE1*/
j--;
~
r[i]=r[j];
while((ii++;
r[j]=r[i];
}
r[i]=x;
}
main()
{
inti,n,a[100];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
p(a,1,n);