c语言期末复习试题附答案.docx
《c语言期末复习试题附答案.docx》由会员分享,可在线阅读,更多相关《c语言期末复习试题附答案.docx(17页珍藏版)》请在冰豆网上搜索。
c语言期末复习试题附答案
试卷编号:
11201
所属语言:
C语言
试卷方案:
C语言期末考试
试卷总分:
100分
共有题型:
4种
一、单项选择共30题(共计60分)
第1题(2.0分)
设有定义:
intk=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是(A).
A:
k++
B:
k+=1
C:
++k
D:
k+1
第2题(2.0分)
已知inti=5,执行语句i+=++i后,i的值是(C).
A:
10
B:
11
C:
12
D:
A、B、C都不对
第3题(2.0分)
以下程序的功能是:
给r输入数据后,计算半径为r的圆面积s.程序在编译时出错.
#include
voidmain()
/*Beginning*/
{intr;floats;
scanf("%d",&r);
s=p*r*r;printf("s=%f\n",s);
出错的原因是(D).
A:
注释语句书写位置错误
B:
存放圆半径的变量r不应该定义为整型
C:
输出语句中格式描述符非法
D:
计算圆面积的赋值语句中使用了非法变量
第4题(2.0分)
"\\\″ABC\″\\″的长度是(B).
A:
11
B:
7
C:
5
D:
3
第5题(2.0分)
已知intj,i=1;,执行语句j=–i++;后,j的值是(C).
A:
1
B:
2
C:
-1
D:
-2
第6题(2.0分)
有以下程序:
#include
voidmain()
{ints=0,a=1,n;
scanf("%d",&n);
do{
s+=1;a=a–2;
}while(a!
=n);
printf("%d\n",s);
}
若要使程序的输出值为2,则应该从键盘输入给n的值是(B).
A:
-1
B:
-3
C:
-5
D:
0
第7题(2.0分)
执行以下程序后,输出的结果是(D).
#include
voidmain()
{inty=10;
do{
y––;
}while(––y);
printf("%d\n",y––);
}
A:
-1
B:
1
C:
8
D:
0
第8题(2.0分)
以下循环体的执行次数是(C).
#include
voidmain()
{inti,j;
for(i=0,j=1;i<=j+1;i+=2,j––)printf("%d\n",i);
}
A:
3
B:
2
C:
1
D:
0
第9题(2.0分)
有以下程序段:
intk=0;
while(k=1)k++;
while循环执行的次数是(A).
A:
无限次
B:
有语法错误,不能执行
C:
1次也不执行
D:
执行1次
第10题(2.0分)
有以下程序
#include
voidmain()
{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).
A:
m=123n=456p=789
B:
m=123n=456p=789
C:
m=123,n=456,p=789
D:
123456789
第11题(2.0分)
设变量已正确定义,以下能正确计算f=n!
的程序段是(D)
A:
f=0;
for(i=1;i<=n;i++)f*=i;
B:
f=1;
for(i=1;iC:
f=1;
for(i=n;i>1;i++)f*=i;
D:
f=1;
for(i=n;i>=2;i––)f*=i;
第12题(2.0分)
在下列程序中,没有构成死循环的程序段是(B).
A:
inti=100;
while
(1)
{i=i%100+1;
if(i>100)break;}
B:
intk=1000;
do
{++k;}while(k>=10000);
C:
for(;;);
D:
ints=36;while(s);--s;
第13题(2.0分)
有如下程序:
#include
voidmain()
{intn=9;
while(n>6)
{n--;printf("%d",n);}
}
该程序段的输出结果是(B).
A:
987
B:
876
C:
8765
D:
9876
第14题(2.0分)
以下程序的输出结果是(D).
#include
voidmain()
{intx=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x––,y);
}
A:
10192
B:
9876
C:
10990
D:
101091
第15题(2.0分)
有如下程序:
#include
voidmain()
{intn[5]={0,0,0},i,k=2;
for(i=0;i{printf("%d\n",n[k]);}
}
该程序的输出结果是(D).
A:
不确定的值
B:
2
C:
1
D:
0
第16题(2.0分)
下列程序执行后的输出结果是(A).
#include
voidmain()
{chararr[2][4];
strcpy(arr,"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr);
}
A:
you&me
B:
you
C:
me
D:
err
第17题(2.0分)
以下程序的输出结果是(C).
#include
voidmain()
{inti,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)printf("%d,",x[i][2–i]);
}
A:
1,5,9,
B:
1,4,7,
C:
3,5,7,
D:
3,6,9,
第18题(2.0分)
以下数组定义中不正确的是(D).
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}};
第19题(2.0分)
以下能正确定义数组并正确赋初值的语句是(D).
A:
intN=5,b[N][N];
B:
inta[1][2]={{1},{3}};
C:
intc[2][]={{1,2},{3,4}};
D:
intd[3][2]={{1,2},{3,4}};
第20题(2.0分)
有以下程序:
inta=4;
intf(intn)
{
intt=0;staticinta=5;
if(n%2){inta=6;t+=a++;}
else{inta=7;t+=a++;}
returnt+a++;
}
main()
{
ints=a,i=0;
for(;i<2;i++)s+=f(i);
printf("d\n",s);
}
程序运行后的输出结果是(B)
A:
24
B:
28
C:
32
D:
36
第21题(2.0分)
以下正确的函数定义形式为(A)
A:
doublefun(intx,inty)
B:
doublefun(intx;y)
C:
doublefun(intx;inty)
D:
doublefun(intx,y)
第22题(2.0分)
C语言规定,函数返回值的类型是由(D)
A:
return语句中的表达式类型所决定的
B:
调用该函数时的主调函数类型所决定的
C:
调用该函数时系统临时决定的
D:
在定义该函数时所指定的函数类型所决定的
第23题(2.0分)
有以下程序:
输出结果是()(注:
5353)
voidswap1(intc0[],intc1[])
{intt;
t=c0[0];c0[0]=c1[0];c1[0]=t;
}
voidswap2(int*c0,int*c1)
{intt;
t=*c0;*c0=*c1;*c1=t;
}
main()
{inta[2]={3,5},b[2]={3,5};
swap1(a,a+1);swap2(&b[0],&b[1]);
printf("%d%d%d%d\n",a[0],a[1],b[0],b[1]);
}
A:
3553
B:
5335
C:
3535
D:
5353
第24题(2.0分)
以下程序的输出结果是(A).
amovep(int*p,int(*a)[3],intn)
{inti,j;
for(i=0;ifor(j=0;j{*p=a[i][j];
p++;}
}
main()
{int*p,a[3][3]={{1,3,5},{2,4,6}};
p=(int*)malloc(100);
amovep(p,a,3);
printf("%d%d\n",p[2],p[5]);
free(p);
}
A)56
B)25
C)34
D)程序错误
第25题(2.0分)
有以下函数:
fun(char*a,char*b)
{while((*a!
='\0')&&(*b!
='\0')&&(*a==*b))
{a++;b++;}
return(*a–*b);}
该函数的功能是(D).
A:
计算a和b所指字符串的长度之差
B:
将b所指字符串复制到a所指字符串中
C:
将b所指字符串连接到a所指字符串后面
D:
比较a和b所指字符串的大小
第26题(2.0分)
有以下程序:
fun(charp[][10])
{intn=0,i;
for(i=0;i<7;i++)
if(p[i][0]=='T')n++;
returnn;
}
main()
{charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
}
程序执行后的输出结果是(B).
A:
1
B:
2
C:
3
D:
0
第27题(2.0分)
有以下程序:
main()
{charstr[][10]={"China","Beijing"},*p=str;
printf("%s\n",p+10);
}
程序运行后的输出结果是(B).
A:
China
B:
Beijing
C:
ng
D:
ing
第28题(2.0分)
有以下程序:
#definef(x)(x*x)
main()
{inti1,i2;
i1=f(8)/f(4)i2=f(4+4)/f(2+2)
printf("%d,%d\n",i1,i2);
}
程序运行后的输出结果是(C).
A:
64,28
B:
4,4
C:
4,3
D:
64,64
第29题(2.0分)
有以下程序:
结果是(A)
voidchange(intk[]){k[0]=k[5];}
main()
{intx[10]={1,2,3,4,5,6,7,8,9,10},n=0;
while(n<=4){change(&x[n]);n++;}
for(n=0;n<5;n++)printf("%d",x[n]);
printf("\n");
}
A)678910
B)13579
C)12345
D)62345
A:
678910
B:
13579
C:
12345
D:
62345
第30题(2.0分)
在以下程序中,能够通过调用函数fun(),使main()函数中的指针变量p指向一个合法的整型单元的是(C).
A:
main()
int*p;
fun(p);…}
intfun(int*p)
{ints;
p=&s;}
B:
main()
{int*p;
fun(&p);…}
intfun(int**p)
{ints;
*p=&s;}
C:
#include
main()
{int*p;
fun(&p);…}
intfun(int**p)
{*p=(int*)malloc
(2);}…
D:
#include
main()
{int*p;
fun(p);…}
intfun(int*p)
{p=(int*)malloc(sizeof(int));}
二、程序填空共1题(共计10分)
第1题(10.0分)
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
计算平均成绩并统计90分以上人数。
-------------------------------------------------------*/
main()
{
intn,m;floatgrade,average;
/***********SPACE***********/
average=n=m=【?
】;//此处为:
0
while
(1)
{
/***********SPACE***********/
【?
】("%f",&grade);//此处为:
scanf
if(grade<0)break;
n++;
average+=grade;
/***********SPACE***********/
if(grade<90)【?
】;//此处为:
break
m++;
}
if(n)printf("%.2f%d\n",average/n,m);
}
三、程序改错共1题(共计10分)
第1题(10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
首先把b所指字符串中的字符按逆序存放,然后将a所指字
符串中的字符和b所指字符串中的字符,按排列的顺序交叉
合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。
例如:
当a所指字符串中的内容为“abcdefg”,b所指字符串中的
内容为“1234”时,c所指数组中的内容应该为“a4b3c2d1
efg”;而当a所指字符串中的内容为“1234”,b所指字符
串中的内容为“abcdefg”时,c所指数组中的内容应该为
“1g2f3e4dcba”。
------------------------------------------------------*/
#include
#include
#include
voidfun(char*a,char*b,char*c)
{
inti,j;
charch;
i=0;
j=strlen(b)-1;
/**********FOUND**********/
while(i>j)//此处>改为<
{
ch=b[i];
b[i]=b[j];
b[j]=ch;
i++;j--;
}
/**********FOUND**********/
while(*a&&*b)//此处&&改为||(逻辑或)
{
if(*a)
{
*c=*a;
c++;
/**********FOUND**********/
a+;//此处a++
}
if(*b)
{
*c=*b;
c++;
b++;
}
}
*c=0;
}
main()
{
chars1[100],s2[100],t[200];
clrscr();
printf("\nEnters1string:
");
scanf("%s",s1);
printf("\nEnters2string:
");
scanf("%s",s2);
fun(s1,s2,t);
printf("\nTheresultis:
%s\n",t);
}
四、程序设计共1题(共计20分)
第1题(20.0分)
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:
判断一个整数w的各位数字平方之和能否被5整除,
可以被5整除则返回1,否则返回0。
------------------------------------------------*/
#include"stdio.h"
#include"conio.h"
intfun(intw)
{
/**********Program**********/
ints=0,m=w;
while(m){s+=(m%10)*(m%10);m/=10;}
if(s%5==0)return1;
elsereturn0;
/**********End**********/
}
main()
{
intm;
printf("Enterm:
");
scanf("%d",&m);
printf("\nTheresultis%d\n",fun(m));
yzj();
getch();
}
yzj()
{
FILE*IN,*OUT;
intc;
intt;
into;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("ReadFileError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("WriteFileError");
}for(c=1;c<=5;c++)
{
fscanf(IN,"%d",&t);
o=fun(t);
fprintf(OUT,"%d\n",o);
}
fclose(IN);
fclose(OUT);
}