C复习题 C.docx
《C复习题 C.docx》由会员分享,可在线阅读,更多相关《C复习题 C.docx(11页珍藏版)》请在冰豆网上搜索。
![C复习题 C.docx](https://file1.bdocx.com/fileroot1/2022-12/1/573e339f-7b85-49f2-935e-2478bd0f5759/573e339f-7b85-49f2-935e-2478bd0f57591.gif)
C复习题C
一.单选题
(1)以下有4组用户标识符,其中合法的一组是
A)forB)4dC)f2_G3D)WO-RD
(2)以下选项中合法的字符常量是
A)"B"B)'\010'C)68D)D
(3)假定x和y为double型,x=2,则表达式y=x+3/2的值是
A)3.500000B)3C)2.000000D)3.000000
(4)设x、y均为整型变量,且x=10y=3,则以下语句的输出结果是
printf("%d,%d\n",x--,--y);
A)10,3B)9,3C)9,2D)10,2
(5)以下程序的输出结果是
main()
{inta=3;
printf("%d\n",(a+=a-=a*a));
}
A)-6B)12C)0D)-12
(6)设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为
A)0B)1C)2D)3
(7)阅读以下程序:
main()
{
intx;
scanf("%d",&x);
if(x--<5)printf("%d",x);
elseprintf("%d",x++);
}
程序运行后,如果从键盘上输入5,则输出结果是
A)3B)4C)5D)6
(8)t为int类型,进人下面的循环之前,t的值为0
while(t=l)
{……}
则以下叙述中正确的是
A)循环控制表达式的值为0B)循环控制表达式的值为1
C)循环控制表达式不合法D)以上说法都不对
(9)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是
A)地址传递B)单向值传递
C)双向值传递D)传递方式由用户指定
(10)以下函数值的类型是
fun(floatx)
{
floaty;
y=3*x-4;
returny;
}
A)intB)不确定C)voidD)float
(11)以下程序的输出结果是
main()
{
charc='z';
printf("%c",c-25);
}
A)aB)ZC)z-25D)y
(12)若有说明:
inti,j=2,*p=&j;,则能完成i=j赋值功能的语句是
A)i=*p;B)p*=*&j;C)i=&j;D)i=**p;
(13)以下定义语句中,错误的是
A)inta[]={1,2};B)char*a[3];
C)chars[10]="test";D)intn=5,a[n];
(14)假定int类型变量占用两个字节,其有定义:
intx[10]={0,2,4};,则数组x在内存中所占字节数是
A)3B)6C)10D)20
(15)以下程序的输出结果是
main()
{
inti,a[10];
for(i=9;i>=0;i--)a[i]=10-i;
printf("%d%d%d",a[2],a[5],a[8]);
}
A)258B)741C)852D)369
(16)以下数组定义中不正确的是
A)inta[2][3];
B)intb[][3]={0,1,2,3};
C)intc[100][100]={0};
D)intd[3][]={{1,2},{1,2,3},{1,2,3,4}};
(17)以下程序的输出结果是
main()
{
inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
}
A)0650B)1470C)5430D)输出值不定
(18)以下程序的输出结果是
main()
{
charst[20]="hello\0\thg";
printf(%d%d\n",strlen(st),sizeof(st));
}
A)99B)520C)1320D)2020
(19)以下选项中,不能正确赋值的是
A)chars1[10];s1="Ctest";
B)chars2[]={'C','t','e','s','t'};
C)chars3[20]="Ctest";
D)char*s4="Ctest\n"
(20)以下程序的输出结果是
structHAR
{intx,y;structHAR*p;}h[2];
main()
{
h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf("%d%d\n",h[0].p->x,h[1].p->y);
}
A)12B)23C)14D)32
(21)以下程序的输出结果是
main()
{
inta,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=10)break;
if(b%3==1)
{b+=3;continue;}
}
printf("%d\n",a);
}
A)101B)6C)5D)4
(22)以下程序的输出结果是
unionmyun
{
struct
{intx,y,z;}u;
intk;
}a;
main()
{
a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);
}
A)4B)5C)6D)0
(23)以下程序的输出结果是
inta,b;
voidfun()
{a=100;b=200;}
main()
{
inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
A)100200B)57C)200100D)75
(24)以下程序的输出结果是
#defineM(x,y,z)x*y+z//带参宏定义
main()
{
inta=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a));
}
A)19B)17C)15D)12
(25)下面的程序执行后,文件test.t中的内容是
#include
voidfun(char*fname,char*st)
{
FILE*myf;
myf=fopen(fname,"w");
fputs(st,myf);
fclose(myf);
}
main()
{
fun("test","newworld!
");
fun("test","hello!
")
}
A)hello!
B)newworld!
hello!
C)newworld!
D)hello!
rld!
二、填空题
(1)语句:
x++;++x;x=x+1;x=1+x;执行后都使变量x的值增1,请写出一条同一功能的赋值语句()。
(2)以下程序运行后的输出结果是()。
voidmain()
{
inti=10,j=0;
do{j=j+i;i--;}while(i-->2);
printf("%d\n",j);
}
(3)设有以下程序:
voidmain()
{
intn1,n2;
scanf("%d",&n2);
while(n2!
=0)
{
n1=n2%10;
n2=n2/10;
printf("%d",n1);
}
}
程序运行后,如果从键盘上输入1298;则输出结果为()。
(4)以下程序输出的最后一个值是()。
intff(intn)
{
staticintf;
f=f+n;
returnf;
}
voidmain()
{
inti;
for(i=1;i<=5;i++)printf("%d\n",ff(i));
}
(5)以下函数的功能是:
求x的y次方,请填空。
doublefun(doublex,inty)
{
inti;
doublez;
for(i=1,z=x;____;i++)_____;
returnz;
}
(6)设有以下程序:
voidmain()
{
inta,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
执行该程序后,a的值为(),b的值为()。
(7)若已定义:
inta[10],i;,以下fun函数的功能是:
在第一个循环中给10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。
请填空。
fun(inta[])
{
inti;
for(i=1;i<=10;i++)_____=i;
for(i=0;i<5;i++)_____=a[i];
}
(8)若有定义语句:
chars[100],d[100];inti=0;,且s中已赋字符串,请填空以实现字符串拷贝。
(注:
不得使用逗号表达式)
while(s[i]){d[i]=____;i++;}
d[i]=’\0’;
(9)以下程序段用于构成一个简单的单向链表,请填空。
structSTRU
{
intx,y;
floatrate;
___________p;
}a,b;
a.x=0;a.y=0;a.rate=0;a.p=&b;
b.x=0;b.y=0;b.rate=0;b.p=NULL;
(10)若有如下结构体说明:
structSTRU
{
inta,b;charc;doubled:
structSTRUp1,p2;
};
___________t[20];
请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型.
三、改错题
注意:
在/*********found**********/下一行改,不得增行或删行,也不得更改程序的结构!
1.给定函数fun的功能是:
先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。
请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。
intfun()
{
inta[3][3],sum;
inti,j;
/*********found**********/
______;
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
/*********found**********/
scanf("%d",a[i][j]);
}
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("Sum=%d\n",sum);
}
2.给定函数fun的功能是:
将从键盘上输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用'.'结束输入。
请改正函数中的错误,使程序能输出正确的结果。
intfun(char*c,intstatus)
{
/***********found**********/
if(c=='')return1;
else
{
if(status&&*c<='z'&&*c>='a')
/***********found**********/
c+='A'-'a';
return0;
}
}
3.给定函数fun的功能是:
计算整数n的阶乘。
请改正函数中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。
doublefun(intn)
{
longresult=1;
while(n>1&&n<30)
/*********found*********/
result*=--n;
/*********found*********/
return________;
}
习题答案
一、单选题
1.C2.B3.D4.D5.D6.C7.B8.C
9.B10.D11.A12.A13.D14.D15.C16.D
17.A18.B19.A20.D21.D22.D23.B24.D
25.A
二、填空题
1.x+=12.303.89214.15
5.i9.structSTRU10.structSTRU
三、改错题
1.sum=0;scanf("%d",&a[i][j]);
2.if(*c=='')return1;*c+='A'-'a';
3.result*=n--;returnresult;