C语言习题.docx
《C语言习题.docx》由会员分享,可在线阅读,更多相关《C语言习题.docx(41页珍藏版)》请在冰豆网上搜索。
C语言习题
一、单选(共100分)单项选项题
1.以下叙述中错误的是()。
A、可以通过赋初值的方式确定数组元素的个数
B、数组名代表的是数组所占存储区的首地址,其值不可改变
C、当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
答案:
C
2.()可以不进行函数类型说明。
A、以上都是
B、被调函数的定义在主调函数定义之前时
C、在所有函数定义前,已在函数外预先说明了被调函数类型
D、被调函数的返回值是整型或字符型时
3..以下正确的说法是()。
A、用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用
B、用户可以重新定义标准库函数,如若此,该函数将失去原有定义
C、系统不允许用户重新定义标准库函数
D、用户若需要调用标准库函数,调用前必须重新定义
4.有以下程序
#include
voidmain()
{
intn,*p=NULL;
*p=&n;
printf(“Inputn:
”);scanf(“%d”,&p);printf(“outputn:
”);
printf(“%d\n”,p);
}
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是
A、printf(“%d\n”,p);
B、*p=&n;
C、scanf(“%d”,&p)
D、intn,*p=NULL;
5.以下关于编译预处理的叙述中不正确的是()
A、预处理命令是在正式编译之前先行被处理的
B、预处理命令行必须位于源程序的开始部分
C、一条有效的预处理命令行必须单独占据一行
D、C源程序中凡是以“#”号开始的控制行都是预处理命令行
6.设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应选择的存储类别是()。
A、auto或register
B、register
C、static
D、auto
答案:
C
7.在C语言中,switch语句后一对圆括号中表达式的类型()。
A、只能是整型或实型
B、只能为int型
C、可以是整型或字符型
D、可以是任何类型
答案:
D
8.以下关于return语句的叙述中正确的是()。
A、没有return语句的自定义函数在执行结束时不能返回到调用处
B、一个自定义函数中可以根据不同情况设置多条return语句
C、定义成void类型的函数中可以有带返回值的return语句
D、一个自定义函数中必须有一条return语句
9.若要用下面的程序片段使指针变量P指向一个存储型变量的动态存储单元:
int*p;
p=______malloc(sizeof(int));
空格应填入()。
A、(int*)
B、int*
C、(*int)
D、int
10.下列语句组中,正确的是
A、chars[7];s={"Olympic"};
B、chars[7];s="Olympic";
C、char*s;s={"Olympic"};
D、char*s;s="Olympic";
答案:
D
11.下面说法正确的是:
A、在C程序中,注释说明只能位于一条语句的后面
B、一个C源程序必须包含一个main函数
C、C程序的基本组成单位是函数
D、一个C源程序可由一个或多个函数组成
12.实参和形参之间的数据是()传递。
A、用户指定
B、值
C、互传
D、地址
13.以下叙述中错误的是
A、用typedef可以为各种类型起别名,但不能为变量起别名
B、可以用typedef将已存在的类型用一个新的名字来代表
C、用typedef定义新的类型名后,原有类型名仍有效
D、可以通过typedef增加新的类型
14.对下述程序段正确的描述是()。
#include
main()
{intx=0,y=0,z=0;
if(x=y+z)
printf("***");
else
printf("###");
}
A、输出###
B、输出***
C、可以编译,但不能通过连接,因而不能运行
D、有语法错误,不能通过编译
答案:
A
15.以下函数按每行8个输出数组中的数据
voidfun(int*w,intn)
{inti;
for(i=0;i{_____________
printf(“%d”,w[i]);
}
printf(“\n”);
}
下划线处应填入的语句是
A、if(i%8==0)continue;
B、if(i/8==0)continue;
C、if(i%8==0)printf(“\n”);
D、if(i/8==0)printf(“\n”);
答案:
C
16.在C语言中,函数返回值的类型最终取决于()
A、函数定义时形参的类型
B、return语句中表达式值的类型
C、调用函数时主调函数所传递的实参类型
D、函数定义时在函数首部所说明函数类型
17.设有语句:
inta=1,b=2,*p1=&a,*p2=&b;以下可使指针p1指向变量b的语句是()。
A、*p1=p2
B、*p1=*p2
C、p1=p2
D、p1=*p2
18.若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是()
A、main()
{
floatfun(inti,intj);
……x=fun(i,j);……
}
floatfun(inta,intb){……}
B、floatfun(inta,intb){……}
main()
{……x=fun(i,j);……}
C、floatfun(int,int);
main()
{……x=fun(2,10);……}
floatfun(inta,intb){…..}
D、main()
{……x=fun(2,10);……}
floatfun(inta,intb){……}
19.以下函数调用语句中含有()个实参。
func((exp1,exp2),(exp3,exp4,exp5));
A、5
B、2
C、4
D、1
20.voidmain()
{
intx[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("%d\n",s[2]);
}
执行后输出结果是()
A、6
B、0
C、5
D、随机值
答案:
B
21.以下程序的输出结果是:
#include
main()
{
intnum=0;
while(num<=2)
{
num++;
printf("%d\n",num);
}
}
A、1
B、123
C、12
D、1234
答案:
B
22.若变量已正确定义,要求程序段完成求5!
的计算,不能完成此操作的程序段是:
A、i=1;p=1;do{p*=i;i++;}while(i<=5);
B、for(i=1;i<=5;i++){p=1;p*=i;}
C、i=1;p=1;while(i<=5){p*=i;i++;}
D、for(i=1,p=1;i<=5;i++)p*=i;
23.若变量已正确定义,有以下程序段:
#include
main()
{
inta=3,b=5,c=7;
if(a>b)a=b;c=a;
if(c!
=a)c=b;
printf("%d,%d,%d\n",a,b,c);
}
其输出结果是:
A、3,5,7
B、3,5,3
C、3,5,5
D、程序段有语法错误
答案:
B
24.对下述程序,()是正确的判断。
#include
main()
{
intx,y;
scanf("%d,%d",&x,&y);
if(x>y)
x=y;y=x;
else
x++;y++;
printf("%d,%d",x,y);
}
A、若输入数据4和3,则输出4和4
B、若输入数据3和4,则输出4和5
C、若输入数据4和3,则输出3和4
D、有语法错误,不能通过编译
答案:
D
25.设x和y均为int型变量,则执行下面的循环后,y的值为()。
for(y=1,x=1;y<=50;y++)
{
if(x>=10)break;
if(x%2==1)
{
x+=5;
continue;
}
x-=3;
}
A、8
B、4
C、6
D、2
答案:
26.表达式18/4*sqrt(4.0)/8值的数据类型为()。
A、不确定
B、float
C、double
D、int
答案:
C
27.有以下程序
main()
{intm,n,p;scanf("m=%dn=%dp=%d",&m,&n,&p);printf("%d%d%d\n",m,n,p);}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是()
A、123456789
B、m=123n=456p=789
C、m=123,n=456,p=789
D、m=123n=456p=789
答案:
D
28.在下列选项中,没有构成死循环的程序段是()。
A、ints=36;
while(s);
B、for(;;)
C、intk=1000;
do{++k;}
while(k>=1000);
D、inti=100;
while
(1)
{i=i%100+1;
if(i>100)break;
}
29.有以下程序
#include
voidfun(inta[],intn)
{
inti,t;
for(i=1;i{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
}
main()
{
intk[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2;i<8;i++)printf("%d",k[i]);
printf("\n")
}
程序运行的结果是()。
A、321678
B、876543
C、1098765
D、325678
答案:
D
30.请选出以下语句的输出结果是()。
printf("%d\n",strlen("\t\"\065\xff\n"));
A、输出项不合法,无正常输出
B、14
C、8
D、5
答案:
D
31.下面程序的输出结果是()。
#include
main()
{
inti,k,a[10],p[3];
k=5;
for(i=0;i<10;i++)a[i]=i;
for(i=0;i<3;i++)p[i]=a[i*(i+1)];
for(i=0;i<3;i++)k+=p[i]*2;
printf("%d\n",k)
}
A、23
B、21
C、22
D、20
答案:
B
32.C语言中目标文件的后缀是:
A、.h
B、.obj
C、.exe
D、.c
答案:
B
33.负数在计算机的存储形式:
A、原码、反码、补码任意一种
B、反码
C、补码
D、原码
答案:
A
34.下面函数的功能是()。
intfunl(char*x)
{
char*y=x;
while(*y++);
return(y-x-1);
}
A、将字符串x连接到字符串y后面
B、比较两个字符串的大小
C、将字符串x复制到字符串y
D、求字符串的长度
35.以下程序的运行结果是()
#defineMIN(x,y)(x)<(y)?
(x):
(y)
voidmain()
{
inti=10,j=15,k;
k=10*MIN(i,j);
printf(“%d\n”,k);
}
A、150
B、15
C、100
D、10
答案:
B
36.下面正确的字符常量是()。
A、''
B、'\\''
C、'W'
D、"a"
答案:
C
37.请读下面的程序。
#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、10
B、8
C、9
D、7
答案:
B
38.在说明语句:
int*f();中,标志符f代表的是()。
A、一个返回值为指针型的函数名
B、一个用于指向一维数组的行指针
C、一个用于指向函数的指针变量
D、一个用于指向整型数据的指针变量
39.下面四个选项中,开关条件的选项是()。
A、if
B、switch
C、signed
D、auto
40.有以下程序
#include
intf(intx,inty)
{
return((y-x)*x);
}
main()
{
inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
程序运行后的输出结果是()。
A、7
B、9
C、8
D、10
答案:
B
41.下面的程序中()有错误(每行程序前面的数字是行号)。
1#include
2main()
3{
4floata[3]={0,0};
5inti;
6for(i=0;i<3;i++)scanf("%d",&a[i]);
7for(i=1;i<3;i++)a[0]=a[0]+a[i];
8printf("%f\n",a[0]);
9}
A、第8行
B、第4行
C、第6行
D、没有
42.运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为:
#include
voidmain()
{intm,n;
printf("Enterm,n:
");
scanf("%d%d",&m,&n);
while(m!
=n)
{
while(m>n)m-=n;
while(n>m)n-=m;
}
printf("m=%d\n",m);
}
A、m=-1
B、m=2
C、m=1
D、m=3
答案:
C
43.有以下程序
#include
main()
{
intx=8;
for(;x>0;x--)
{
if(x%3){printf("%d,",x--);continue;}
printf("%d,",--x);
}
}
程序的运行结果是:
A、8,5,4,2,
B、8,7,5,2,
C、9,7,6,4,
D、7,4,2,
答案:
A
44.以下选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是:
A、switch(a==1)
{case1:
a=b;break;
case0:
a++;
}
B、switch(a==1)
{case0:
a=b;break;
case1:
a++;
}
C、switch(a)
{default:
a++;break;
case1:
a=b;
}
D、switch(a){
case1:
a=b;break;
default:
a++;
}
45.下述程序输出的结果是()。
#include
voidfun1()
{
intx=0;
x++;
printf("%d,",x);
}
voidfun2()
{
staticintx;
x++;
printf("%d,",x);
}
main()
{
inti;
for(i=0;i<3;i++)
{
fun1();
fun2();
}
}
A、1,1,2,1,3,1,
B、1,1,1,1,2,3,
C、1,1,1,2,1,3,
D、1,1,2,2,1,3,
答案:
C
46.设有定义:
floata=2,b=4,h=3;下面表达式与代数式子(a+b)*h/2结果不相同的是()。
A、(a+b)*h*1/2
B、(1/2)*(a+b)*h
C、9
D、(a+b)*h/2
47.设有说明int(*ptr)[m];其中的标志符ptr是()。
A、具有m个指针元素的一维指针数组,每个元素都只能指向整型量
B、指向m个整型变量的函数指针
C、一个指向具有m个整型元素的一维数组的指针
D、m个指向整型变量的指针
48.以下程序段()。
inta=10;
while(a);--a;
A、有语法错误.
B、循环执行10次
C、循环执行一次
D、是死循环
49.已有定义intx;f1oaty;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345678,则y值为
A、123.000000
B、45.000000
C、678.000000
D、无定值
答案:
50.若有定义:
inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是()。
A、0.000000
B、2.750000
C、3.500000
D、2.500000
答案:
D
51.在C语言中,一维数组的定义方式为:
类型说明符数组名;
A、[常量]
B、[整型表达式]
C、[整型常量]或[整型常量表达式]
D、[整型常量表达式]
答案:
C
52.#include
voidfun(int*a,int*b)
{int*c;
c=a;a=b;b=c;
}
voidmain()
{intx=3,y=5,*p=&x,*q=&y;
fun(p,q);printf(“%d,%d,”,*p,*q):
fun(&x,&y);printf(“%d,%d\n”;*p,*q);
}
程序运行后的输出结果是
A、5,3,5,3
B、3,5,3,5
C、5,3,3,5
D、3,5,5,3
答案:
B
53.在C的源程序中如果使用了开平方根函数sqrt,则在源程序中应包含下面()预编译命令
A、#include
B、#include
C、#include
D、#include
54.关于循环嵌套,以下哪种说法是错误的:
A、循环嵌套跳转时,禁止跳入同层的另一循环中。
B、循环嵌套跳转时,禁止从外层跳入内层。
C、外层循环可以包含两个以上内循环,彼此之间可以相互交叉。
D、三种循环可以相互嵌套,层数不限。
55.下面对函数嵌套的叙述中,正确的叙述为()。
A、函数定义和调用均可以嵌套
B、函数定义不可以嵌套,但函数调用可以嵌套
C、函数定义和调用均不能嵌套
D、函数定义可以嵌套,但函数调用不能嵌套
56.有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是()。
A、gets(a);gets(b);
B、scanf("%s%s",&a,&b);
C、getchar(a);getchar(b);
D、gets(a,b);
57.设函数fun的定义形式为:
voidfun(charch,floatx){…}
则以下对函数fun的调用语句中,正确的是().
A、fun(32,32);
B、t=fun('D',16.5);
C、fun('65',2.8);
D、fun("abc",3.0);
58.调用一个函数,此函数中没有return语句,下列说法正确的是:
该函数()。
A、返回一个不确定的值
B、返回若干个系统默认值
C、能返回一个用户所希望的函数值
D、没有返回值
59.若有说明:
intn=2,*p=&n,*q=p;,则以下非法的赋值语句是()。
A、p=n;
B、*p=*q;
C、n=*q;
D、p=q;
答案:
A
60.在宏定义#definePI3.1415926中,用宏名PI代替一个()
A、字符串
B、单精度数
C、双精度数
D、常量
答案:
A
61.sizeof(double)是()。
A、一个整型表达式
B、一个双精度型表达式
C、一个不合法的表达式
D、一种函数调用
答案:
A
62.以下对字符数组的描述中错误的是()。
A、不可以用关系运算符对字符数组中的字符串进行比较
B、字符数组中的字符串可以整体输入、输出
C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D、字符数组中可以存放字符串
答案:
C
63.若有说明语句:
inty[][4]={0,0};则下面叙述不正确的是()。
A、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0
B、二维数组y的行数为1
C、该说明等价于inty[][4]={0};
D、数组y的每个元素都可得初值0
答案:
A
64.有以下程序
#include
voidfun(char*a,char*b)
{
while(*a==’*’)a++;
while(*b=*a){b++;a++;}
}
voidmain()
{
char*s=”****a*b****”,t[80];
fun(s,t);puts(t);
}
程序的运行结果是
A、