C语言练习题选择题100道.docx
《C语言练习题选择题100道.docx》由会员分享,可在线阅读,更多相关《C语言练习题选择题100道.docx(53页珍藏版)》请在冰点文库上搜索。
C语言练习题选择题100道
题目部分,(卷面共有100题,300.0分,各大题标有题量和总分)
一、单项选择题(100小题,共300.0分)
(3分)[1]
以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,‘A’,‘B’,‘C’);则符合程序段运行结果的选项是
voidmove(chargetone,charputone)
{
printf(“%c-->%c\n”,getone,putone);
}
voidhanoi(intn,charone,chartwo,charthree)
{
if(n==1)move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
A、A-->CB、A-->CC、A-->CD、A-->C
A-->BA-->BA-->BA-->B
C-->BC-->AC-->BC-->B
B-->AA-->BA-->CA-->C
C-->BB-->CB-->AA-->B
A-->CA-->CB-->CB-->C
A-->BA-->BA-->CA-->C
(3分)[2]
以下不正确的说法是
C语言规定A、实参可以是常量、变量或表达式
B、形参可以是常量、变量或表达式
C、实参可以为任意类型
D、形参应与其对应的实参类型一致
(3分)[3]
以下正确的描述是
在C语言程序中A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用可以嵌套
C、函数的定义和函数的调用均不可以嵌套
D、函数的定义和函数的调用均可以嵌套
(3分)[4]
以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。
#include
#include
main()
{
floatx,y,z,sum;
scanf(“%f%f%f”,&x,&y,&z);
sum=f(【1】)+f(【2】);
printf(“sum=%f\n”,sum);
}
floatf(floata,floatb)
{
floatvalue;
value=a/b;
return(value);
}
【1】A、x-y,x+yB、x+y,x-yC、z+y,z-yD、z-y,z+y
【2】A、x-y,x+yB、x+y,x-yC、z+y,z-yD、z-y,z+y
(3分)[5]
以下错误的描述是
函数调用可以A、出现在执行语句中
B、出现在一表达式中
C、做为一个函数的实参
D、做为一个函数的形参
(3分)[6]
下面函数调用语句含有实参的个数为
func((exp1,exp2),(exp3,exp4,exp5));
A、1B、2C、4D、5
(3分)[7]
C语言规定,函数返回值的类型是由
A、return语句中的表达式类型所决定
B、调用该函数时的主调函数类型所决定
C、调用该函数时系统临时决定
D、在定义该函数时所指定的函数类型所决定
(3分)[8]
C语言允许函数值类型缺省定义,此时该函数值隐含的类型是
A、float型
B、int型
C、long型
D、double型
(3分)[9]
以下程序有语法性错误,有关错误原因的正确说法是
main()
{
intG=5,k;
voidprt_char();
……
k=prt_char(G);
……
}
A、语句voidprt_char();有错,它是函数调用语句,不能用void说明
B、变量名不能使用大写字母
C、函数说明和函数调用语句之间有矛盾
D、函数名不能使用下划线
(3分)[10]
以下正确的说法是
A、定义函数时,形参的类型说明可以放在函数体内
B、return后边的值不能为表达式
C、如果函数值的类型与返回值类型不一致,以函数值类型为准
D、如果形参与实参的类型不一致,以实参类型为准
(3分)[11]
若调用一个函数,且此函数中没有return语句,则正确的说法是
该函数A、没有返回值
B、返回若干个系统默认值
C、能返回一个用户所希望的函数值
D、返回一个不确定的值
(3分)[12]
以下正确的说法是
在C语言中A、实参和与其对应的形参各占用独立的存储单元
B、实参和与其对应的形参共占用一个存储单元
C、只有当实参和与其对应的形参同名时才共占用存储单元
D、形参是虚拟的,不占用存储单元
(3分)[13]
以下正确的函数形式是
A、doublefun(intx,inty)
{z=x+y;returnz;}
B、fun(intx,y)
{intz;returnz;}
C、fun(x,y)
{intx,y;doublez;z=x+y;returnz;}
D、doublefun(intx,inty)
{doublez;z=x+y;returnz;}
(3分)[14]
以下正确的函数定义形式是
A、doublefun(intx,inty)
B、doublefun(intx;inty)
C、doublefun(intx,inty);
D、doublefun(intx,y);
(3分)[15]
以下正确的说法是
A、用户若需调用标准库函数,调用前必须重新定义
B、用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C、系统根本不允许用户重新定义标准库函数
D、用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调
(3分)[16]
建立函数的目的之一是
A、提高程序的执行效率B、提高程序的可读性
C、减少程序的篇幅D、减少程序文件所占内存
(3分)[17]
C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参传回给实参
D、由用户指定传递方式
(3分)[18]
若用数组名作为函数调用的实参,传递给形参的是
A、数组的首地址
B、数组第一个元素的值
C、数组中全部元素的值
D、数组元素的个数
(3分)[19]
以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。
请选择填空。
sub(intk,intn)
{
inta1,a2;
a2=【1】;
a1=k-【2】;
if((k%3==0&&a2==5)||(k%3==0&&a1==5))
{
printf(“%d”,k);
n++;
returnn;
}
elsereturn-1;
}
main()
{
intn=0,k,m;
for(k=10;k<=99;k++)
{
m=sub(k,n);
if(m!
=-1)n=m;
}
printf(“\nn=%d”,n);
}
【1】A、k*10B、k%10C、k/10D、k*10%10
【2】A、a2*10B、a2C、a2/10D、a2%10
(3分)[20]
下面程序的功能是将小写字母变成对应大写字母后的第二个字母。
其中y变成A,z变成B。
请选择填空。
#include
main()
{
charc;
while((c=getchar())!
=‘\n’)
{
if(c>=‘a’&&c<=‘z’)
{
【1】;
if(c>‘Z’)
【2】;
}
printf(“%c”,c);
}
}
【1】A、c+=2B、c-=32C、c=c+32+2D、c-=30
【2】A、c=‘B’B、c=‘A’C、c-=26D、c=c+26
(3分)[21]
一个C语言程序是由
A、一个主程序和若干子程序组成
B、函数组成
C、若干过程组成
D、若干子程序组成
(3分)[22]
C语言规定:
在一个源程序中,main函数的位置
A、必须在最开始
B、必须在系统调用的库函数的后面
C、可以任意
D、必须在最后
(3分)[23]
以下叙述不正确的是
A、一个C源程序可由一个或多个函数组成
B、一个C源程序必须包含一个main函数
C、C程序的基本组成单位是函数
D、在C程序中,注释说明只能位于一条语句的后面
(3分)[24]
以下叙述正确的是
A、在C程序中,main函数必须位于程序的最前面
B、C程序的每行中只能写一条语句
C、C语言本身没有输入输出语句
D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误
(3分)[25]
一个C程序的执行是从
A、本程序的main函数开始,到main函数结束
B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C、本程序的main函数开始,到本程序文件的最后一个函数结束
D、本程序文件的第一个函数开始,到本程序main函数结束
(3分)[26]
在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是
A、externB、registerC、autoD、static
(3分)[27]
以下程序的正确运行结果是
main()
{
inta=2,i;
for(i=0;i<3;i++)printf(“%4d”,f(a));
}
f(inta)
{
intb=0;
staticintc=3;
b++;c++;
return(a+b+c);
}
A、777B、71013C、7911D、789
(3分)[28]
凡是函数中未指定存储类型的局部变量,其隐含的存储类别为
A、自动(auto)B、静态(static)
C、外部(extern)D、寄存器(register)
(3分)[29]
以下程序的正确运行结果是
#include
voidnum()
{
externintx,y;
inta=15,b=10;
x=a-b;
y=a+b;
}
intx,y;
main()
{
inta=7,b=5;
x=a+b;
y=a-b;
num();
printf(“%d,%d\n”,x,y);
}
A、12,2B、不确定C、5,25D、1,12
(3分)[30]
以下程序的正确运行结果是
#defineMAX10
inta[MAX],i;
main()
{
printf(“\n”);sub1();sub3(a);sub2();sub3(a);
}
sub2()
{
inta[MAX],i,max;
max=5;
for(i=0;i}
sub1()
{
for(i=0;i}
sub3(inta[])
{
inti;
for(i=0;iprintf(“\n”);
}
A、024681012141618
01234
B、01234
024681012141618
C、0123456789
01234
D、024681012141618
024681012141618
(3分)[31]
以下不正确的说法为
A、在不同函数中可以使用相同名字的变量
B、形式参数是局部变量
C、在函数内定义的变量只在本函数范围内有效
D、在函数内的复合语句中定义的变量在本函数范围内有效
(3分)[32]
以下正确的说法是
如果在一个函数中的复合语句中定义了一个变量,则该变量
A、只在该复合语句中有效
B、在该函数中有效
C、在本程序范围内均有效
D、为非法变量
(3分)[33]
折半查找法的思路是:
先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值。
如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。
函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;返回-1。
请选择填空。
binary(inta[10],intm)
{
intlow=0,high=9,mid;
while(low<=high)
{
mid=(low+high)/2;
if(melseif(m>a[mid])【2】;
elsereturn(mid);
}
return(-1);
}
【1】A、high=mid-1B、low=mid+1C、high=mid+1D、low=mid-1
【2】A、high=mid-1B、low=mid+1C、high=mid+1D、low=mid-1
(3分)[34]
若使用一维数组名作函数实参,则以下正确的说法是
A、必须在主调函数中说明此数组的大小
B、实参数组类型与形参数组类型可以不匹配
C、在被调函数中,不需要考虑形参数组的大小
D、实参数组名与形参数组名必须一致
(3分)[35]
已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式为
inta[3][4];
f(a);
A、f(intarray[][6])
B、f(intarray[3][])
C、f(intarray[][4])
D、f(intarray[2][5])
(3分)[36]
以下程序的正确运行结果是
#include
main()
{
intk=4,m=1,p;
p=func(k,m);printf(“%d”,p);
p=func(k,m);printf(“%d\n”,p);
}
func(inta,intb)
{
staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
A、8,17B、8,16C、8,20D、8,8
(3分)[37]
下面程序的运行结果是
#include
main()
{
inti,j,a=0;
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
{
if(j%2)break;
a++;
}
a++;
}
printf(“%d\n”,a);
}
A、4B、5C、6D、7
(3分)[38]
下面程序的运行结果是
#include
main()
{
inti;
for(i=1;i<=5;i++)
{
if(i%2)printf(“*”);
elsecontinue;
printf(“#”);
}
printf(“$\n”);
}
A、*#*#*#$B、#*#*#*$C、*#*#$D、#*#*$
(3分)[39]
下面程序的运行结果是
#include
main()
{
inti,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<=3;j++)
{
if(j%2)continue;
x++;
}
x++;
}
printf(“x=%d\n”,x);
}
(3分)[40]
下面程序的运行结果是
#include
main()
{
inta,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5;
}
printf(“%d\n”,a);
}
A、7B、8C、9D、10
(3分)[41]
下面程序的功能是将从键盘输入的偶数写成两个素数之和。
请选择填空。
#include
#include
main()
{
inta,b,c,d;
scanf(“%d”,&a);
for(b=3;b<=a/2;b+=2)
{
for(c=2;c<=sqrt(b);c++)if(b%c==0)break;
if(c>sqrt(b))d=【1】;elsebreak;
for(c=2;c<=sqrt(d);c++)if(d%c==0)break;
if(c>sqrt(d))printf(“%d=%d+%d\n”,a,b,d);
}
}
【1】A、a+bB、a-bC、a*bD、a/b
(3分)[42]
下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。
#include
main()
{
intn,sum=0;
n=2345;
do{
sum=sum+【1】
n=【2】
}while(n);
printf(“sum=%d”,sum);
}
【1】A、n%10B、(n%10)*(n%10)C、n/10D、(n/10)*(n/10)
【2】A、n/1000B、n/100C、n/10D、n%10
(3分)[43]
若运行以下程序时,从键盘输入3.62.4(表示回车),则下面程序的运行结果是_________。
#include
#include
main()
{
floatx,y,z;
scanf(“%f%f”,&x,&y);
z=x/y;
while
(1)
{
if(fabs(z)>1.0){x=y;y=z;z=x/y;}
elsebreak;
}
printf(“%f\n”,y);
}
(3分)[44]
若i为整型变量,则以下循环执行次数是
for(i=2;i==0;)printf(“%d”,i--);
A、无限次B、0次C、1次D、2次
(3分)[45]
对for(表达式1;;表达式3)可理解为
A、for(表达式1;0;表达式3)
B、for(表达式1;1;表达式3)
C、for(表达式1;表达式1;表达式3)
D、for(表达式1;表达式3;表达式3)
(3分)[46]
下面有关for循环的正确描述是
A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、在for循环中,不能用break语句跳出循环体
D、for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
(3分)[47]
下面程序的运行结果是
#include
main()
{
inta=1,b=10;
do{b-=a;a++;}while(b--<0);
printf(“a=%d,b=%d\n”,a,b);
}
A、a=3,b=11B、a=2,b=8C、a=1,b=-1D、a=4,b=9
(3分)[48]
若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是
#include
main()
{
charc;
intv0=0,v1=0,v2=0;
do{
switch(c=getchar())
{
case‘a’:
case‘A’:
case‘e’:
case‘E’:
case‘i’:
case‘I’:
case‘o’:
case‘O’:
case‘u’:
case‘U’:
v1+=1;
default:
v0+=1;v2+=1;
}
}while(c!
=‘\n’);
printf(“v0=%d,v1=%d,v2=%d\n”,v0,v1,v2);
}
A、v0=7,v1=4,v2=7B、v0=8,v1=4,v2=8
C、v0=11,v1=4,v2=11D、v0=12,v1=4,v2=12
(3分)[49]
下面程序的运行结果是
#include
main()
{
inty=10;
do{y--;}while(--y);
printf(“%d\n”,y--);
}
A、-1B、1C、8D、0
(3分)[50]
下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除。
请选择填空。
#include
main()
{
inti=0,j,k;
do{i++;k=316-13*i;}while(【1】);
j=k/11;
printf(“316=13*%d+11*%d”,i,j);
}
A、k/11B、k%11C、k/11==0D、k%11==0
(3分)[51]
以下不是无限循环的语句为
A、for(y=0,x=1;x>++y;x=i++)i=x
B、for(;;x++=i);
C、while
(1){x++;}
D、for(i=10;;i--)sum+=i;
(3分)[52]
下面程序是从键盘输入学号,然后输出学号中百位数字是3的学号,输入0时结束循环。
请选择填空。
#include
main()
{
longintnum;
scanf(“%ld”,&num);
do{
if(【1】)printf(“%ld”,num);
scanf(“%ld”,&num);
while(2】);
}
【1】A、num%100/10==3B、num/100%10==3
C、num%10/10==3D、num/10%10==3
【2】A、n=n-2B、n=nC、n++D、n-=1
(3分)[53]
下面程序段的运行结果是
for(y=1;y<10;)y=((x=3*y,x+1),x-1);
printf(“x=%d,y=%d”,x,y);
A、x=27,y=27B、x=12,y=13C、x=15,y=14D、x=y=27
(3分)[54]
若有如下语句
intx=3;
do{printf(“%d\n”),x-=2;}while(!
(--x));
则上面程序段
A、输出的是1B、输出的是1和-2C、输出的是3和0D、是死循环
(3分)[55]
以下描述中正确的是
A、由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B、do-while循环由do开始,用while结束,在while(表达式)后面不能写