最新C复习试题.docx
《最新C复习试题.docx》由会员分享,可在线阅读,更多相关《最新C复习试题.docx(19页珍藏版)》请在冰豆网上搜索。
最新C复习试题
选择题
1.以下if语句语法正确的是(B)。
A.if(x>0)printf(“%f”,x)B.if(x>0){x=x+y;printf(“%f”,x);}
elseprintf(“%f”,-x);elseprintf(“%f”,-x);
C.if(x>0){x=x+y;printf(“%f”,x);};D.if(x>0){x=x+y;printf(“%f”,x)}
elseprintf(“%f”,-x);elseprintf(“%f”,-x);
2.下列关于C语言程序说法正确的是( D )
A.C语言程序总是从有定义的函数起顺序执行
B.在C语言程序中被调用函数必须在main函数中定义
C.C语言程序中的main函数必须放在程序的开始部分
D.C语言程序总是从main函数起开始执行
3.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符(C)。
A.必须为字母或下划线B.必须为下划线
C.必须为字母D.可以是字母、数字和下划线中的任一种字符
4.下面合法的C语言标识符是(D)
A.int_B.int
C.πD.file.c
5.若有inta,b;下面正确使用变量a,b的表达式是(B)
A.7.0%3.0B.(a+b)++
C.7++D.a+′a′+b
6.下面几种运算符中,优先级最低的是()
A.||B.,
C.=D.?
:
7.下面转义字符中,表示制表符的是(B)
A.\0B.\tC.\nD.\f
8.已知ch是字符型变量,下面不正确的赋值语句是(B)。
A.ch=5+9;B.ch='a+b';
C.ch='\0';D.ch='7'+6;
9.设有条件表达式(exp)?
a++:
b--,则下列表达式中能够与该表达式完全等价的表达式是(A)
A.(exp!
=0)?
a++∶b--B.(exp==0)?
a++∶b--
C.(exp==1)?
a++∶b--D.(exp!
=1)?
a++:
b--
10.执行while(表达式)循环的条件是( C )
A.当表达式的值为0时B.仅当表达式的值为1时
C.当表达式的值非0时D.当表达式的值不为1时
11.设有inta=3,b=-4,c=5;表达式(a>b)?
a&&c<0:
b的值是(A)
A.0B.1
C.3D.-4
12.设有intx=2,y,z;执行z=y=x++;后变量y的值是(C)
A.0B.1
C.2D.3
13.设有声明intx=1,y=2,z;执行z=x>y?
x+2:
y-2后变量z的值是(A)
A.0B.1
C.2D.3
14.关于break语句,以下说法不正确的是(C)
A.它可以用于循环语句中
B.它可以用于switch语句中
C.可以从最内层循环结构中直接跳出最外层循环结构
D.可以从当前switch结构中跳出
15.若有inta=8,b=5;语句printf(“%d”,a>b);的执行结果是(B)
A.0B.1
C.5D.8
16.下面程序的输出结果是(C)
main()
{inta=3,b=5;
a+=b;b+=a;
printf(“%d,%d”,a,b);}
A.3,5B.5,3
C.8,13D.13,21
17.若有inta=8,b=12,max,min;执行语句
if(a>b){max=a;min=b;}
else{max=b;min=a;}
的结果是(C)
A.max的值是8,min的值是12B.max的值是8,min的值是8
C.max的值是12,min的值是8D.max的值是12,min的值是12
18.执行下面程序段后,a的值是
inta=100;
do
{a++;}while(a>120);(B)
A.100B.101
C.120D.121
19.若有定义intch[5][4];则数组ch中的元素的个数是(D)
A.9B.12
C.15D.20
20.若有说明:
inta[10];则对a数组元素的正确引用是(A)。
A.a[10]B.a[10-10]
C.a(5)D.a[3.5]
21.若有定义:
inta[10];则数组元素的下标的下限和上限分别是( C )
A.0和1B.1和9
C.0和9D.1和10
22.若有定义chara[3][5];则数组a在内存中占用的字节数是(B)
A.8B.15
C.16D.30
23.对以下说明的正确理解是(B)。
inta[10]={6,7,8,9,10}
A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]
C.将5个初值依次赋给a[6]至a[10]D.因长度与初值个数不同,故语句错误
24.若有定义charstr[20];能使数组str得到字符串"Iamaboy"的正确输入方法是(A)
A.gets(str);B.str=getchar();
C.scanf("%c",str);D.scanf("%s",str);
25.有两个字符数组a,b,则以下正确的输入格式是(C)。
A.scanf("%s%s",&a,&b)B.gets(a,b)
C.scanf("%s%s",a,b)D.gets("a");gets("b")
26.若主函数调用funl函数,而funl函数调用fun2函数,这种逐级调用称为(D)
A.直接递归调用B.间接递归调用
C.并行调用D.嵌套调用
27.下面关于函数参数的说法中,不正确的是(B)
A.实参可以是常量、变量或表达式
B.形参可以是常量、变量或表达式
C.实参可以是数组元素或数组名
D.形参应与其对应的实参类型一致
28.在一个c源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是(D)
A.externB.register
C.autoD.static
29.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是(B)
A.地址传递B.单向值传递
C.由实参传给形参,再由形参传回给实参D.由用户指定方式
30.在C语言中,确定函数返回值的类型由( B )
A.return语句中的表达式类型决定B.调用该函数的主函数类型决定
C.调用函数时临时决定D.定义函数时所指定的函数类型决定
31.设有下面的结构体和结构变量定义:
Structtea
{
char*name;
floatprice,weight;
};
structteateal={"green_tea",2.0,28.5};
structtea*p_struct=&teal;
语句:
printf("%s,%.1f",p_struct—>name,p_struct—>price*p_struct—>weight);
的输出结果是()
A.57.0B.57.0,green_tea
C.green_tea,57.0D.green_tea
32.下列关于结构体类型定义正确的是( B )
A.structABCB.structABC
{inta{inta;
charbcharb;
char*pchar*p;
}}
C.structABCD.structABC
{inta;{inta,
charb;charb,
char*p;char*p,
};};
33.设有下面的结构体和结构变量定义,以下选项关于结构体类型变量赋值不正确的是()
structcar
{ longid:
char *name; };
structcarcarl;
A.carl.id=10101; B.carl.name="BlueSky";
C.carl.*name="BlueSky";D.carl.id=123456L;
34.设有下面的结构体和结构变量定义:
structstudent
{
longid:
char*name;
intmath;
};
structstudentstudl;
关于结构体类型变量赋值正确的是()
A.studl.id=1001;studl.name=″Tom″;
B.id=1001;*studl.name=″Tom″;
C.studl.id=1001;studl.*name=″Tom″;
D.studl.id=1001L;*studl.name=″Tom″;
35.下面关于结构体类型变量定义正确的是()
A.structbunding{
intarea=12345;
char*name="No1Hotel";
}bl;
B.structbuilding{
intarea=12345;
char*name="NolHotel";
}b1;.
C.building{
intarea=12345;
char*name="No1Hotel";
}b1;
D.STRUCTbuilding{
intarea=12345;
char*name="NolHotel";
}b1;
36.已知ch是字符型变量,下面不正确的赋值语句是(B)。
A.ch=95;B.ch=“a”;
C.ch='\n';D.ch='a'+6;
37.若有inta[]={1,2,3,4,5,6,7,8,9,10},且0≤i<10,则对数组元素地址正确表示的是(D)。
A.&a+1B.&a++
C.&aD.&a[i]
38.下面转义字符中,表示水平制表符的是(C)
A.\0B.\n
C.\tD.\’
39.在C程序中,若用基本数据类型所定义的变量调用函数,正确的说法是( )
A.由系统自动指定对应实参和形参是否共用存储单元
B.对应实参和形参各占一个独立的存储单元
C.对应实参和形参共用一个存储单元
D.可以由用户指定对应实参和形参是否共用存储单元
40.若希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,则该局部变量需要使用的存储类别是()
A.externB.registerC.autoD.static
41.C语言的auto型变量存储在()
A.动态存储区中B.静态存储区中
C.计算机CPU的寄存器中D.外存储器中
42.设p1和p2是指向同一个字符串的指针变量,且c为字符型变量,则以下不能正确执行的赋值语句是()
A.c=*p1+*p2;B.p2=*p1;
C.p1=p2;D.c=*p1*(*p2);
43.以下选项中,对指针变量p的正确操作是()
A.inta[5],*p;p=&a;B.inta[5],*p;p=a;
C.inta[5];int*p=a[5];D.inta[5];int*p,p2=a;*p=*p2;
44.对于for(表达式l;表达式2;表达式3)语句;控制循环结束的表达式是()
A.表达式1B.表达式2
C.表达式3D.表达式l和表达式3
45.下面叙述中不正确的是( )
A.不同函数中可以使用相同名字的变量
B.形式参数是局部变量
C.在一个函数内部定义的变量只能在本函数范围内有效
D.在一个函数内部的复合语句中定义的变量在本函数范围内有效
46.下面能正确进行字符串赋值操作的是()
A.chars[5]={"ABCDE"};B.chars[5]={′A′,′B′,′C′,′D′,′E′};
C.char*s;s="ABCDE";D.char*s;scanf("%s",s);
47.下面程序段的运行结果是()
chars*s="abcde";
s+=2printf("%d",s);
A.cdeB.字符′c′
C.字符′c′的地址D.无确定的输出结果
程序填空(类似实验六、实验七、实验八中的题目)
阅读分析题
1.写出下列程序的运行结果。
main()
{inta=10,b=8,c;
c=a;
a=b;
b=c;
printf(″a=%d,b=%d\n″,a,b);
}
2.写出以下程序的功能。
如果输入14,写出程序的输出结果。
voidmain(void)
{intx;
scanf(″%d″,&x);
if(x%5==0&&x%7==0)
printf(″yes″);
else
printf(″no″);
}
3.写出下面程序的功能;如果输入6和9,写出程序的输出结果。
main()
{inta,b,x,y;
scanf(″%d%d″,&a,&b);
x=a*a+b*b;
if(x>100)
{y=x/100;printf(″%d″,y);}
else
printf(″%d″,a+b);
}
4.阅读下面的程序并回答问题
main()
{chara[20]=″1234567890″;
inti;
i=8;
printf(″%s\n″,&a[i-3]);
}
(1)数组中a[10]号元素中存储的是什么字符?
(2)请写出程序的运行结果。
5.写出下面程序的功能及运行结果。
main()
{
intn=1,sum=0;
do{
sum=sum+n;
n+=2;
}while(n<100);
printf(″sum=%d\n″,sum);
}
6.写出下面程序的功能和运行结果。
intfun(inta[][4])
{inti,j,k,tem
tem=a[0][0];
for(I=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]return(tem);
}
main()
{intb[3][4]={{1,3,-5,7},{2,4,-6,8},{10,20,-30,40}};
printf(″%d\n″,fun(b));
}
7.阅读下列程序并写出运行结果。
voidmain(void)
{
intx=11;
switch(x-1){
caseO:
printf("x=%d\n",x++);
break:
case10:
printf("x=%d\n",x*2);
case20:
printf("x=%d\n",x*4);
default:
printf("x=%d\n",x);
}
}
8.阅读下列程序并写出运行结果。
main()
{floatx;inta=0;
scanf("%f",&x);
switch(x/10-5)
{case7:
a++;
case6:
a++;printf("%d,",a);
case5:
a++;break;
case4:
a++;
default:
a++;printf("%d,",a);
case1:
a+=2:
}
printf("%d\n",a);
}
(1)当程序运行后输入115.5后,写出程序的执行结果。
(2)当再次运行程序后输入45后,写出程序的执行结果。
9.下列程序中字符串中各单词之间有一个空格,写出程序的输出结果。
#include
#include
main()
{charstr1[]=″Howdoyoudo″;
puts(str1);
strcpy(str1+str1en(str1)/2,″esshe″);
printf(″%s\n″,str1);
}
10.写出下列程序的功能和运行结果。
#include
reverse(char*s)
{char*t,ch;
for(t=s+strlen(s)-1;s{ch=*s;*s=*t;*t=ch;}
}
main()
{char*s1=″123456″;
reverse(s1);
printf(″%s\n″,s1);
}
11.阅读下列程序,当依次输入11,l2,l3,14,16这5个数时,请写出程序的运行结果。
voidmain(void)
{
intx,i,s=O;
for(i=O;i<5;i++){
scanf("%d",&x);
if(x%2)continue;
printf("%d\t",x);
s+=x;
}
printf("\n");
printf("s=%d\n",s);
}
12.阅读下列程序并写出运行结果。
voidf1(char*t,char*s);
voidmain(void)
{
chars1[20]="abcdl2345",t1[20]="xyz";
printf("%s\n%s\n",s1,t1);
f1(t1,s1);
printf("%s\n",t1);
}
voidf1(char*t,char*s)
{
while((*t=*s)!
=′\0′){
t++;
s++;
}
}
13.阅读下列程序序并写出运行结果。
intfun(inty);
voidmain(void)
{
intx[4]={3,5,7,0},s=0,i=0;
while(x[i]){
s+=fun(x[i]);
i++;
printf("s=%d\n",s);
}
}
intfun(inty)
{
staticinta=O;
a=a+y;
returna;
}
14.阅读下面程序,写出运行结果。
#include
#include
voidf(char*s)
{
char*t,c,*p=s;
for(t=s+strlen(s)-1;s{
c=*s,*s=*t,*t=c;
printf("%s\n",p);
}
}
voidmain(void)
{
chara[20]="abcdefg";
f(a);
}
15.阅读下列程序序并写出运行结果。
main()
{ints,p;
s=p=5;
p=++s;
p++;++p;
printf(″%d\n″,p);
}
16.阅读下列程序序并写出运行结果。
voidf()
{inta=3;
staticintb=4;
a=a+1;
b=b+1;
printf(〃a=%d,b=%d\n〃,a,b);
}
voidmain()
{
f();
f();
f();
}
17.阅读下列程序序并写出运行结果。
voidmain()
{intx=1,y=1,i=1;
do
{x=++x+y;y=x+y--;i++;
printf(″x=%dy=%d\n″,x,y);
}while(i<=3);
}
18.阅读下列程序序并写出运行结果。
voidmain(void)
{inta[]={10,20,30,40,50,60},*p;
p=a;
p++;
*(p+3)+=1;
printf("%d\n",*p);
printf("%d\n",*(p+3));
}
编程
1.从键盘输入10个整数存放到数组中,求该数组中所有正数的累加和并输出。
2.若有n行n列数组,试编写一程序,分别求出两条对角线元素之和。
(从键盘输入n*n个整型数,n≤20)
3.从键盘输入10个整数,编程求其中大于3且小于100的数的平均值并输出结果。
4.从键盘输入10个整数存放到数组中,计算数组中下标为偶数的所有元素的积。
5.编程求20至100之间素数的累加和并输出该累加和。
6.从键盘上输入30个整数,输出其中能被3整除的数,并求出所有能被3整除的数之和。