C语言期末考试真题2.docx
《C语言期末考试真题2.docx》由会员分享,可在线阅读,更多相关《C语言期末考试真题2.docx(16页珍藏版)》请在冰豆网上搜索。
C语言期末考试真题2
2008-2009学年度第二学期
华中科技大学《C语言程序设计》试卷(B)
(考试时间:
150分钟考试方式:
闭卷)
所有答案必须写在答题纸上
一、选择题(每题1.5分,共39分)
1.以下叙述中正确的是()。
A.C语言比其他语言高级。
B.C语言可以不用编译就能被计算机识别执行。
C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式。
D.C语言出现的最晚,具有其他语言的一切优点.。
2.若有定义:
inta=8,b=5,C;,执行语句C=a/b+0.4;后,c的值为( ).
A.1.4 B.1 C.2.0 D.2
3.若变量a是int类型,并执行了语句:
a='A'+1.6;,则正确的叙述是( ).
A.a的值是字符B B.a的值是字符C
C.不允许字符型和浮点型相加 D.a的值是字符‘A’的ASCII值加上1
4.以下程序的输出结果是( ).
#include
voidmain()
{inta=5,b=4,c=6, d;
printf("%d\n",d=a>b?
(a>c?
a:
c):
(b));
}
A.5 B.4 C.6 D.不确定
5.以下程序的输出结果是( ).
#include
voidmain()
{inta=4,b=5,c=0,d;
d=!
a&&!
b||!
c;
printf("%d\n",d);
}
A.1 B.0 C.非0的数 D.-1
6.以下选项中合法的实型常数是( ).
A.5E2.0 B.E-3 C..2E0 D.1.3E
7.若有以下程序:
#include
voidmain()
{intk=2,i=2,m;
m=(k+=i*=k);
printf("%d,%d\n",m,i);
}
执行后的输出结果是( ).
A.8,6B.8,3 C.6,4 D.7,4
8.以下选项中非法的表达式是( ).
A.0<=x<100 B.i=j==0
C.(char)(65+3) D.x+1=x+1
9.若整型变量a、b、c、d中的值依次为:
1、4、3、2。
则条件表达式a
a:
cc:
d的值是( ).
A.1 B.2 C.3 D.4
10.请读程序:
#include
main()
{inta;floatb,c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\na=%d,b=%f,c=%f\n",a,b,c);
}
若运行时从键盘上输入9876543210(表示回车),则上面程序的输出结果是_____。
A.a=98,b=765,c=4321 B.a=10,b=432,c=8765
C.a=98,b=765.000000,c=4321.000000D.a=98,b=765.0,c=4321.0
11.有以下程序
main()
{inta=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
elseif((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
执行后输出结果是_______。
A.2 B.3 C.4 D.编译时有错,无结果
12.有以下程序
main()
{intk=4,n=4;
for(;n{n++;
if(n%3!
=0)continue;
k--;}
printf(""%d,%d\n"",k,n);
}
程序运行后的输出结果是______。
A.1,1 B.2,2 C.3,3 D.4,4
13.有以下程序:
main()
{inta=5,b=0,c=0;
if(a=b+c) printf("****\n");
else printf("$$$$\n");
}
以上程序________。
A.有语法错不能通过编译。
B."可以通过编译但不能通过连接。
C"输出**** D.输出$$$$
14.以下程序的运行结果是______。
main()
{intm=5;
if(m++>5)printf("%d\n",m++);
elseprintf("%d\n",m--);
}
A.4 B.5 C.6 D.7
15.为了避免在嵌套的条件语句if--else中产生二义性,C语言规定:
else子句总是与________匹对。
A.缩排位置相同的if B.其之前最近的if
C.其之后最近的if D.同一行上的if
16.若i,j已定义为int型,则以下程序段中循环体的总的执行次数是。
For(i=0;i<5;i++)
for(j=0; j<4; j++)
{……}
A.20 B.24 C.25 D.30
17.C语言程序的三种基本结构是( )。
A.顺序结构,选择结构,循环结构是
B.递归结构,循环结构,转移结构
C.嵌套结构,递归结构,顺序结构
D."循环结构,转移结构,顺序结构
18.以下关于do-while循环的不正确描述是( )。
A.do-while的循环体至少执行一次
B.do-while循环由do开始,用while结束,在while(表达式)后面必须有分号
C.在do-while循环体中,一定要有能使while后面表达式的值变为零(""假"")的操作D.do-while的循环体有可能执行0次
19.以下叙述正确的是( )。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
20.有定义语句:
intb; charc[10];,则正确的输入语句是_____.
A.scanf("%d%s",&b,&c); B.scanf("%d%s",&b,c);
C.scanf("%d%s",b,c); D.scanf("%d%s",b,&c);
21.已有定义:
chara[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是_____.
A.数组a和b的长度相同 B.a数组长度小于b数组长度
C.a数组长度大于b数组长度 D.上述说法都不对
22.有以下程序
main()
{
intm[][3]={1,4,7,2,5,8,3,6,9};
inti,j,k=2;
for(i=0;i<3;i++)
{
printf(""%d"",m[k][i]);
}
}执行后输出结果是______。
A.456 B.258 C.369 D.789
23.当执行下面的程序时,如果输入ABC,则输出结果是( ).
#include"stdio.h"
#include"string.h"
main()
{charss[10]="1,2,3,4,5";
gets(ss);
strcat(ss,"6789");
printf("%s\n",ss);
}
A.ABC6789 B.ABC67 C.12345ABC6 D.ABC456789
24.下面程序的运行结果是()
sub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;
sub(10,5,&a);
sub(7,a.&b);
sub(a,b,&c);
printf(“%4d,%4d,%4d\n”,a,b,c);
}
A.5,2,3B.-5,-12,-7
C.-5,-12-17 D.5,-2,-7
25.下面程序的运行结果是()
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,17 B.8,16 C.8,20 D.8,8
26.有以下程序执行后输出结果是( ).
main()
{inta[][3]={{1,2,3},{4,5,0}},{*pa}[3],i;
pa=a;
for(i=0;i<3;i++)
if(i<2)pa[1][i]=pa[1][i]-1;
elsepa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
A.7B.6C.8D.无确定值
二、填空题(20分每空2分)
1.以下程序的输出的结果__________.
intx=3;
main()
{inti;
for(i=1;i}
incre()
{staticintx=1;
x*=x+1;
printf("%d\n",x);
}
2.以下程序的输出的结果__________.
#include"stdio.h"
voidmain()
{charstr[]="xyz",*ps=str;
while(*ps)ps++;
for(ps--;ps-str>=0;ps--)puts(ps);
}
3.以下程序的输出的结果__________.
#include"stdio.h"
voidmain()
{inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int*pa[3];int*p=a[0],i;
for(i=0;i<3;i++)
pa[i]=a[i];
for(i=0;i<3;i++)
printf("%d--%d\n",p[i],*(pa[i]+1));
}
4.以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:
yesyes!
否则函数返回字符串:
no!
并在主函数中输出.所谓回文即正向与反向的拼写都一样,例如:
adgda.请填空.
#include "string.h"
【1】 huiwen(char *str)
{
char*p1,*p2; int i,t=0;
p1=str; p2=str+strlen(str)-1;
for(i=0;i<=strlen(str)/2;i++)
if(*p1++!
=*p2--)
{ t=1;
【2】}
if( 【3】 ) return("yes!
");
else return("no!
");
}
main()
{
char str[50];
printf("Input:
"); scanf("%s",str);
printf("%s\n", 【4】 );
}
5.以下程序在数组a中查找与x值相同的元素的所在位置,请填空。
#include"stdio.h"
voidmain()
{inta[10],x,i;
printf("Enter10integers,\n");
for(i=0;i<10;i++)
scanf("%d",【1】);
printf("Enterx:
");
scanf("%d",&x);
for(i=0;i<5;i++)
if(x==a[i])
【2】;
if(【3】)printf("%5d'spositionis%4d\n",x,i);
elseprintf("%dNotbeenfound!
\n",x);
}
三、改错题(共10分)
(以下程序中******和*******位置处有错误,请改正,但不能增减程序行)
1.下面程序的功能是计算:
s=1!
+1/2!
+1/3!
+…+1/10!
。
#include
voidmain()
{
doubles;
intn;
s=0;
*************************
for(n=1;n<10;n++)
s+=fact(n);
*************************
printf("s=%lf\n",s);
}
doublefact(intn)
{
doublep;
intk;
p=1;
***************************
for(k=1;k<=n;k++)
p*=1/k;
**************************
returnp;
}
2.#defineNULL0
voidmain()
{********************
int*p=NULL;
*p=25;
*********************
Printf(“%d\n”,*p);}
3.程序的功能是将数组x的元素倒序输出。
例如,输入12345,则输出为54321.
#include
#defineM20
main()
{
inti,x[M],n,m,*p,*k,*j;
printf("\nEntern:
");
scanf("%d",&n);
printf("\nEnterarrayx[i](i=0~n):
\n");
for(i=0;iscanf("%d",x+i);
printf("\n");
m=n/2;
******************
k=x;
j=x+n;
p=x+m;
******************
for(;k<=p;k++,j--)
{********************
intt=*k;
k=j;
*j=t;
********************
}
printf("\nThearrayinverted:
\n");
for(i=0;iprintf("%d",x[i]);
getchar();
}
四、编程题(共30分)
1.试编程序,找出1至99之间的全部同构数。
同构数是这样一组数,它出现在平方数的右边。
例如:
5是25右边的数,25是625右边的数,5和25都是同构数。
(9分)
2.编写程序:
实现将十进制数转换成相应十六进制数。
(10分)
3.有4名学生,每个学生考4门课程,要求编写input()函数输入学生的成绩,search()函数输入学生序号以后能输出该学生的全部成绩。
(12分)
#include"stdio.h"
#include"string.h"
voidmain()
{intscore[4][4];
charname[4][8];
charstr[8];
int*search(intscore[4][4],charname[4][8],charstr[8]);
voidinput(intscore[4][4],charname[4][8]);
int*p;
inti,j;
input(score,name);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
printf("%d\t",score[i][j]);
printf("Enterthenameofstudent:
");
scanf("%s",str);
printf("Thescoreofthestudent%sare:
\n",str);
p=search(score,name,str);
for(i=0;i<4;i++)
printf("%d\t",*(p+i));
}
voidinput(intscore[4][4],charname[4][8])
{
}
int*search(intscore[4][4],charname[4][8],charstr[8])
{
}
《C语言程序设计》答题纸(2009年9月12日)
时间:
150分钟满分100分闭卷B
班级________学号________________姓名__________
题目
一
二
三
四
总分
得分
一、选择题(用铅笔在正确的选项上涂黑,共39分)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
二、填空题(每空2分,共20分)
【1】_____________________
【2】_____________________
【3】_____________________
【4】_____________________
【5】_____________________
【6】_____________________
【7】_____________________
【8】_____________________
【9】_____________________
【10】_____________________
三、改错题(每处2分,共10分)
【1】_____________________
【2】_____________________
【3】_____________________
【4】_____________________
【5】_____________________
四、编程题(31分)