C语言试题.docx
《C语言试题.docx》由会员分享,可在线阅读,更多相关《C语言试题.docx(22页珍藏版)》请在冰豆网上搜索。

C语言试题
1.下列程序段的输出结果为(C)。
floatk=0.8567;printf("%4.1f%%",k*100);
A、85.6%
B、85.6%%
C、85.7%
D、.857
2.下面的scanf函数输入数据,使得a=10,b=15,s1='S',s2='s',x1=1.5,x2=-3.75,x3=67.8,
正确的键盘输入方法是(A).
(用"[CR]"表示回车,U表示空格)
main()
{inta,b;
floatx1,x2,x3;
chars1,s2;
scanf("%5d%5d%c%c%f%f%*f%f",&a,&b,&s1,&s2,&x1,&x2,&x3);
}
A、10UUU15Ss1.5U-3.75U+1.5U67.8[CR]
B、10UUU15USUs1.5U-3.75U+1.5U67.8[CR]
C、10UUU15USUsU1.5U-3.75U+1.5U67.8[CR]
D、10UUU15Ss1.5U-3.75U+1.5,67.8[CR]
3.C语言的if语句中,用作判断的表达式为(A)。
A、任意表达式
B、算术表达式
C、逻辑表达式
D、关系表达式
4.以下程序的输出结果是:
(A)
main()
{intm=5;
if(m++>5)printf("%d\n",m);
elseprintf("%d\n",m--);
}
A、6
B、5
C、7
D、4
5.以下for循环的执行次数是for(x=0,y=0;(y=123)&&(x<4);x++);(C)。
A、3次
B、循环次数不定
C、4次
D、是无限循环
6.
以下不能正确进行字符串赋初值的语句是(A)。
A、charstr[5]="good!
";
B、charstr[5]={'g','o','o','d'};
C、char*str="good!
";
D、charstr[]="good!
";
7.函数调用:
strcat(strcpy(str1,str2),str3)的功能是(D)。
A、将串str1复制到串str2中后再连接到串str3之后
B、将串str2连接到串str1之后再将串str1复制到串str3中
C、将串str1连接到串str2之后再复制到串str3之后
D、将串str2复制到串str1中后再将串str3连接到串str1之后
8.以下函数的类型是(C)。
fff(floatx)
{
return5;
}
A、void类型
B、与参数x的类型相同
C、int类型
D、无法确定
9.设有如下函数
fac(intx)
{
floaty=1.0;
return(x*y);
}
则函数的类型为(A).
A、int型
B、float型
C、无法确定
D、void型
10.下列关于指针定义的描述,错误的是(A)。
A、指针是一种变量,该变量用来存放某个变量的值
B、指针是一种变量,该变量用来存放某个变量的地址值
C、指针变量的类型与它所指向的变量类型一致
D、指针变量的命名规则与标识符相同
11.以下程序的输出结果是(A).
main()
{charstr[]="ABCD",*p=str;printf("%d\n",*(p+3));}
A、68
B、不确定的值
C、字符D的地址
D、0
12.对结构体类型的变量的成员的访问,无论成员是何种数据类型都可使用
的运算符是(B)。
A、&
B、.
C、*
D、->
13.在C语言中,各种类型的整型数据在内存中都占2个字节。
(X)
14.若有inti=10,j=2;则执行完i*=j+8;后ⅰ的值为28(X)
15.格式字符%g选用%e或%f格式中输出宽度较长的一种格式输出实数.X
16.C语言程序中输入一个中间带有空格的字符串时,可以用scanf函数.X
17.设d=1,e=2,f=3,则逻辑表达式!
(d+e)+f&&e+f*2的值为0.X
18.已知a=4,b=2,c=3,d=5,表达式a>b?
a:
cc:
d的值为4.Y
19.语句if(a>b)printf("%d",a);elseprintf("%d",b);可以用语句printf("%d",a>b?
a:
b);取代.Y
20.在do-while循环中,任何情况下都不能省略while.Y
21.break语句能够终止当前进行的多层循环.X
22.continue语句对于while和do-while循环来说,意味着转去计算While表达式.Y
23.对静态变量的初始化不是在编译阶段完成的.X
24.gets函数是用来输入一个字符的函数X
25.当全局变量与局部变量同名时,在局部变量的作用域范围之内,局部变量起作用.Y
26.C语言中,通过函数调用只能获得一个返回值.X
27.数组名作为函数调用时的实参,实际上传递给形参的是数组第一个元素的值.X
28.被包含文件与其所在的文件(即用#include命令的源文件),在预编译后,成为同一个文件.Y
29.如果需要向函数内传递多个值,用数组和用指针效果是一样的.Y
30.两个类型相同的结构体变量,可以互相赋值.Y
31.C语言中,在打开文件时,必须说明文件的使用方式,"wb+"只能用于文件的写.X
32,下列语句输出的结果是_-1____.
unsignedintb=65535;printf("%d",b);
33.x=5,y=8时,c语言表达式5-2>=x-1<=y-2的值是__1___.
34.设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是___3__.
for(x=0,y=0;y!
=123&&x<3;x++)
scanf("%d",&y);
35.连接字符串的函数是_strcat____,只写函数名即可.
36.定义int*p,a[5];将数组a的首地址赋给指针变量p的语句是
p=a
p=&a[0]
p=a;
p=&a[0];
37.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是___34__。
structstud{charname[10];floats[4];doubleave;}a,*p;
38./*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:
编写函数fun(str,i,n),从字符串str中删除第i个
字符开始的连续n个字符(注意:
str[0]代表字符串
的第一个字符)。
------------------------------------------------*/
#include"stdio.h"
#include"string.h"
main()
{
charstr[81];
inti,n;
voidfun(charstr[],inti,intn);
voidTestFunc();
printf("请输入字符串str的值:
\n");
scanf("%s",str);
printf("你输入的字符串str是:
%s\n",str);
printf("请输入删除位置i和待删字符个数n的值:
\n");
scanf("%d%d",&i,&n);
while(i+n-1>strlen(str))
{
printf("删除位置i和待删字符个数n的值错!
请重新输入i和n的值\n");
scanf("%d%d",&i,&n);
}
fun(str,i,n);
printf("删除后的字符串str是:
%s\n",str);
TestFunc();
}
voidfun(charstr[],inti,intn)
{
/*********Begin**********/
/**********End**********/
}
voidTestFunc()
{
FILE*IN,*OUT;
chari[200];
/*charo[200];*/
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("ReadFileError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("WriteFileError");
}
fscanf(IN,"%s",i);
fun(i,2,8);
fprintf(OUT,"%s\n",i);
fclose(IN);
fclose(OUT);
}
【参考代码】
while(str[i+n-1])
{
str[i-1]=str[i+n-1];
i++;
}
str[i-1]='\0';
===============
39./*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:
请编一个函数voidfun(inttt[M][N],intpp[N]),
tt指向一个M行N列的二维数组,求出二维数组每列
中最小元素,并依次放入pp所指一维数组中。
二维
数组中的数已在主函数中赋予。
------------------------------------------------*/
#include"conio.h"
#include"stdio.h"
#defineM3
#defineN4
voidfun(inttt[M][N],intpp[N])
{
/*********Begin**********/
/**********End**********/
}
main()
{
intt[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}};
voidNONO();
intp[N],i,j,k;
printf("Theoriginaldatais:
\n");
for(i=0;i{
for(j=0;jprintf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nTheresultis:
\n");
for(k=0;kprintf("\n");
NONO();
}
voidNONO()
{
inti,j,array[3][4],p[4];
FILE*rf,*wf;
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
fscanf(rf,"%d",&array[i][j]);
fun(array,p);
for(j=0;j<4;j++)
{
fprintf(wf,"%7d",p[j]);
fprintf(wf,"\n");
}
fclose(rf);
fclose(wf);
}
【参考代码】
inti,j;
for(j=0;j{
pp[j]=tt[0][j];
for(i=1;iif(tt[i][j]pp[j]=tt[i][j];
}
===============
40.【程序改错】
--------------------------------------------------------
功能:
求1到20的阶乘的和。
------------------------------------------------------*/
#include"stdio.h"
voidfun()
{
intn,j;
floats=0.0,t=1.0;
for(n=1;n<=20;n++)
{
/**********ERROR**********/
s=1;
for(j=1;j<=n;j++)
/**********ERROR**********/
t=t*n;
/**********ERROR**********/
s+t=s;
}
/**********ERROR**********/
printf("jiecheng=%d\n",s);
}
main()
{
fun();
}
【参考答案】
t=1;
t=1.0;
41.【程序改错】
--------------------------------------------------------
功能:
编写一个函数,该函数可以统计一个长度为3的字符串在另
一个字符串中出现的次数。
例如:
假定输入的字符串为:
asdasasdfgasdaszx67asdmklo,字符
串为:
asd,则应输出n=4。
------------------------------------------------------*/
#include"stdio.h"
#include"string.h"
#include"conio.h"
intfun(char*str,char*substr)
{
/**********ERROR**********/
inti,n=0
/**********ERROR**********/
for(i=0;i<=strlen(str);i++)
if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2]))
/**********ERROR**********/
++i;
returnn;
}
main()
{
charstr[81],substr[4];
intn;
printf("输入主字符串:
");
gets(str);
printf("输入子字符串:
");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d\n",n);
}
【改错1】
【参考答案】
inti,n=0;
【改错2】【参考答案】
for(i=0;i<=strlen(str)-3;i++)
for(i=0;i【改错3】
【参考答案】
n++;
n+=1;
n=n+1;
++n;
42.程序填空】
---------------------------------------------------------
功能:
计算平均成绩并统计90分以上的人数,输入的成绩为负时程序结束。
-------------------------------------------------------*/
#include"stdio.h"
main()
{
intn,m;floatgrade,average;
/***********FILL***********/
average=n=m=_____;
while
(1)
{
/***********FILL***********/
scanf("%f",&grade);
if(_______)break;
n++;
average+=grade;
/***********FILL***********/
if(grade<90)_____;
m++;
}
if(n)printf("%f\n%d\n",average/n,m);
}
【空1】【参考答案】
0
0.0
【空2】【参考答案】
grade<0
0>grade
【空3】【参考答案】
Continue
43.【程序填空】
---------------------------------------------------------
功能:
求出二维数组中的最大元素值。
-------------------------------------------------------*/
#include"stdio.h"
/***********FILL***********/
intmax_value(intm,intn,int______)
{
inti,j,max;
max=array[0][0];
for(i=0;ifor(j=0;j/***********FILL***********/
if(maxreturn(max);
}
main()
{
inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};
/***********FILL***********/
printf("maxvalueis%d\n",_____);
}
【空1】【参考答案】
array[][4]
array[3][4]
【空2】【参考答案】
max=array[i][j]
【空3】【参考答案】
max_value(3,4,a)
44.下述正确的C语言常量是:
(C).
A、E2
B、5.0E
C、3e-3
D、1.5E2.5
45.若有定义:
inta=7;floatx=2.5,y=4.7;
则表达式x+a%3*(int)(x+y)%2/4的值是(D)。
A、0.000000
B、2.750000
C、3.500000
D、2.500000
46.根据下面的程序,使i=123,c1='A',c2='B'哪一种是正确的键盘输入方法(C).
(规定用[CR]表示回车,U表示空格)
main()
{
inti;
charc1,c2;
scanf("%d%c%c",&i,&c1,&c2);
}
A、123AUB[CR]
B、123UAUB[CR]
C、123AB[CR]
D、123[CR]AB[CR]
47.t为int类型,进人下面的循环之前,t的值为0
while(t=1)
{……}
则以下叙述中正确的是(C)。
A、循环控制表达式的值为0
B、循环控制表达式不合法
C、循环控制表达式的值为1
D、以上说法都不对
48.针对for循环语句,for(表达式1;表达式2;表达式3),下列说法正确的是(B).
A、break语句可以一次性跳出多层嵌套循环
B、break语句只能跳出最内层循环
C、continue语句可以一次性跳出多层嵌套循环
D、continue语句可以跳出最内层循环
49.以下正确的说法是(A).
A、函数的类型决定返回值的类型
B、定义函数时,形参的类型说明可以放在函数体内
C、return后面不能为表达式
D、如果形参与实参的类型不一致,以实参类型为准
50.C语言规定,函数返回值的类型是由(A)。
A、在定义该函数时所指定的函数类型所决定
B、return语句中的表达式类型所决定
C、调用该函数时系统临时决定
D、调用该函数时的主调函数类型所决定
51.函数fun用于将一字符串按相反次序显示,则横线上的表达式为(D).
voidfun(char*s)
{if(!
*s)
return;
_____;
printf("%c",*s);
}
A、printf("%s",s+1);
B、fun(*(s+1));
C、printf("%s",s+strlen(s)-1);
D、fun(s+1);
52.在宏定义#definePI3.14159中,用宏名代替一个(A).
A、字符串
B、常量
C、单精度数
D、双精度数
53.若有说明:
int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是(A)。
A、p1=&m;p2=p1;
B、p1=&m;p2=&p1
C、p1=&m;*p2=*p1;
D、p1=&m;p2=&n;*p1=*p2;
54.下列程序的运行结果是:
(B).
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A、63
B、36
C、00
D、编译出错
55.C语言结构体类型变量在程序执行期间(B)。
A、没有成员驻留在内存中
B、所有成员一直驻留在内存中
C、只有一个成员驻留在内存中
D、部分成员驻留在内存中
56.表达式(j=3,j++)的值是4.X
57.C语言的输入功能是由系统提供的输入函数实现的.Y
58.条件表达式x?
'a':
'b'中,若x=0时,表达式的值为'a'.X
59.若有说明intc;则while(c=getchar());没有语法错误。
Y
60.二维数组在内存中存贮时,是按列的顺序连续存贮各元素的值.X
61.变量根据其作用域的范围可以分作局部变量和全局变量.Y
62.通过return语句,函数可以带回一个或一个以上的返回值。
X
63.函数的返回值可以通过函数中的return语句获得。
Y
64.若有宏定义:
#defineS(a,b)t=a;a=b;b=t由于变量t没定义,
所以此宏定义是错误的。
X
65.定义inta[]={1,2,3,4},y,*p=&a[1];,则执行y=(*--p)++后,y的值是2.X
66.一个共用体变量中可以同时存放其所有成员.X
67.用fopen("file","r+");打开的文件"file"可以进行修改。
Y
68.C语言中,数组名是一个不可变的_指针地址___常量,不能对它进行加减和赋值运算.
69.函数调用语句func((e1,e2),(e3,e4,e5))中含有__2___个实参.
70.【程序改错】
--------------------