C语言综合练习题精选及详解.docx
- 文档编号:9477095
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:29.89KB
C语言综合练习题精选及详解.docx
《C语言综合练习题精选及详解.docx》由会员分享,可在线阅读,更多相关《C语言综合练习题精选及详解.docx(16页珍藏版)》请在冰豆网上搜索。
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
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
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);
15、对于以下递归函数f,调用f(4),其返回值为:
intf(intn)
{returnf(n-1)+n;}
A)10B)11C)0D)以上均不是
17、如下程序段:
intc[]={1,7,12};
int*k;
k=c;
printf("nextkis%d",*++k);
其输出应为:
A)2B)7C)1D)以上均不对
k1c[0]
7c[1]
12c[2]
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
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保持不变;
二、填空题
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
7、对于charc;若已知其值为小写字母,将其转换为相应大写字母的表达式为___c–‘a’+‘A’______
11、inti=0,s=0;
while(i 等价于 inti,s; for(_i=0,s=0;i 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__ 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#__ 20、用for循环打印012012012; for(i=1;i<=9;i++)printf("%2d",__(i-1)%3__); 24、程序A: intf(intn) { if(n<=1) returnn; else returnf(n-1)+f(n-2); } 等价于程序B: intf(intn) { _intt0,t1,t_; t0=0;t1=1;t=n; while(_n>=2_){ t=_t0+t1_; t0=t1; t1=t; n--; } return_t_; } 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)。 A[0]A[1]A[2]A[3]A[4]A[5] voidf(_intA[],intn,intx_)2391215x { intt,i; i=n;A[n+1]=_x_;i while((i>=0)&&(_A[i]>A[i+1]_)){ t=A[i]; A[i]=A[i+1]; A[i+1]=t; i--; } n++; } 三、程序阅读理解,并回答相应问题 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时,上述程序运行后, 第一行将输出_12109511110743_第二行将输出_12111010975431_ 函数p1()的功能: 将参数数组的每个元素按从大到小的顺序排列。 函数p2()的功能: 将两个参数数组中的每个元素(已经降序排列)混合在一起,并按从大到小的顺序输出。 6、#include #defineF(k)k+3.14 #defineP(a)printf("a=%d\n",(int)(a)) #defineP1(a)P(a);putchar('\n'); #defineP2(a,b)P(a);p1(b); main() { intx=1; { intx=2; P(x*F (2)); } { for(;x<10;x+=50) P2(x,9.15*x+32); } } 请写出该程序中有关宏定义的展开式,并给出该程序的运行结果。 有关展开: P(x*F (2)); printf(“a=%d\n”,(int)(x*F (2))); printf(“a=%d\n”,(int)(x*2+3.14)); P2(x,9.15*x+32); →P(x);P1(9.15*x+32); P(x);printf(“a=%d\n”,(int)(x)); P1(9.15*x+32)P(9.15*x+32);putchar(‘\n’); P(9.15*x+32);printf(“a=%d\n”,(int)(9.15*x+32)); printf(“a=%d\n”,(int)(x));printf(“a=%d\n”,(int)(9.15*x+32));putchar(‘\n’); 全部展开,并整理,得: main() { intx=1; { intx=2; printf(“a=%d\n”,(int)(x*2+3.14)); } { for(;x<10;x+=50) printf(“a=%d\n”,(int)(x)); printf(“a=%d\n”,(int)(9.15*x+32)); putchar(‘\n’); } 运行结果: a=7 a=1 a=498
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 综合 练习题 精选 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)