期末试卷(含答案)
合肥三联学院-三国演义的读后感
江 苏 大 学 试 题
使用班级 考试日期 .
注意事项:
1. 闭卷考试。考试时间为120分钟。
2.答案均请用铅笔涂在答题卡上。将答题卡上的试卷类型涂A(补考则涂B)。
共 9页
第 1 页
课程名称 计算机基础及C语言(Ⅱ) 开课学院
计算机学院
3.请将答题卡、试卷都写上班级、学号、姓名、任课教师。考试结束分别交予监考老师。
一、 选择题(30分,每小题1分,请涂写在答题卡上)
1. 以下常量中正确的是
D 。
A.'abc' B. 'x123'
C.3.145E-1.2 D.
2.
以下选项中,不能用作变量名的是 D 。
A. _1234_
B._1_2 _2_ D.2_int_
3. 设有“int
a;”,以下不能正确表达10A. 10C. a>10&&a<15
D.!(a<=10)&&!(a>=15)
4. 已知数据类型定义和变量声明如下:
struct sk
{int a; float b;}data[2], * p;
若有p=data,则以下对data[0]中成员a的引用中错误的是 A 。
A. data[0]->a B. data->a C. p->a D. (* p).a
5. 下列程序的程序输出结果为 A 。
#define X(a)
a*a
main()
{ printf(“%dn”,X(4+5));}
A.29 B.18 C.20
D.25
6. 若有定义“enum seq{mouse, cat, dog,
rabbit=0, sheep, cow=6, tiger};” 则执行语句
“printf(
“%d”,cat+sheep+cow);”后输出的结果是_____C______。
A. 6
B.7 C.8 D. 9
7. 以下能将字符串“
good!”正确地存放在字符数组s中,或使指针s能指向这个字符串
的是______D_____
_。
A. char s[4]={‘g’, ‘o’, ‘o’, ‘d’, ‘!’};
B. char s[5];s=“good!”;
C. int s[5]=
“good!”; D. char *s;s=“good!”;
江 苏 大 学 试
题
第2页
8.
设有说明:
union data
{ int i float f;
struct{ int x;char
y;}s;
double d; }a;
则变量a 在内存中所占字节数为_
A __ 。
A.8 B.17 C.9
D.15
9. 设已有非空文本数据文件,要求能读出文件中原有的全部数据,并在文件原有数据之后添加新数据,则用FILE *fp=fopen(, D )打开该文件。
A. B. C. D.
10.
以下关于if语句的错误描述是 B 。
A.
条件表达式可以是任意表达式
B. 条件表达式只能是关系表达式或逻辑表达式
C.
条件表达式的括号不可以省略
D. 与else配对的if语句是其之前最近的未配对的if语句
11. 在以下不致造成死循环的语句是: A 。
A.
for(y=0,x=1; x>++y; x=i ++) i =x;
B. for(;
;x+=i );
C. while(x=8) x--;
D. for(i
=10,sum=0; sum<=i ) sum= --i
12.
设有定义:“float y=3.45678;int
x;”,则以下表达式中能实现将y中数值保留小数点后2
位,第3位四舍五入的表达式是:
B 。
A. y=(y*100+0.5)100.0 B.
x=y*100+0.5,y=x100.0
C. y=y*100+0.5100.0
D.y=(y100+0.5)*100.0
13. 以下程序段输出结果是: C 。
int a=10,b=11,c=12,s;
s=a++<=10&&b--<=2&&c++;
printf(“%d,%d,%d,%d”,s,a,b,c);
A.
0,11,10,13 B. 1,11,10,13 C. 0,11,10,12
D.1,11,10,12
14. 设有“char s[
]=“Program”,*p=s;”,则以下叙述中正确的是: C 。
A.
数组s的内容与指针变量p中内容相同
B. 数组s的长度与strlen(p)的值相等
C. p[5]的值等于s[5]的值
D. sizeof(s)等于sizeof(*p)
15. 下列程序段执行后变量j的值是: B 。
int j; char
*s=
江 苏 大 学
试 题 第3页
A. 7
B. 3 C. 4 D. 5
16.
若有定义语句“static char str[4][20]={ ”则str数组中存储'0'
的数组元素有: D 个。
A. 0 B. 17
C. 21 D. 63
17. 下列正确的声明说明语句是 D
。
A. float m=15,n=4,q=m%n;
B. int n=10,
y[n];
C. char p[2][ ]={
D. char *p[ ]={
18. 设有函数f的定义如下:
void f(int x, int *y)
{ *y=x*x*x;}
main( )
{ int
j,c[4]={1,2,3,4},s[4]={0};
for(j=0;j<4;j++)
{
* 调用f函数*/
printf(“%d”,s[j]); }
若在main函数中欲调用函数f,则正确的调用语句是______C______。
A. f(c,s); B. f(c[i
],s[i]);
C. f(*(c+i),&s[i]);
D. f(c+i ,s+i );
int x=0,y=1,z=2,w;
if(x++) w=x;
else if(x++&&y>=1) w=y;
else if(x++&&z>1) w=z;
A. 0,1
B. 1,1
是_____C______。
A.
for(p=a,i=0;i<5;i++) printf(
B.
for(p=a;pC.
for(p=a,i=0;pD.
for(p=a;p
C. 2,1
D.3,2
20. 已知有声明语句“int
a[5]={1,2,3,4,5},*p,i;”,以下语句中不能正确输出a数组全部元素值的
}
19. 执行以下程序段后,x,w的值为_____C_______。
江 苏 大 学 试 题 第4页
21.
该程序运行后,输出x的值是__________,y的值是_____D_____。
int
x=1;
main()
{ int y,k; y=f(3);
printf(
int f(int x)
{ if(x==3) { int
x=2; return x; }
else return x;
}
A. 0,1 B. 1,1 C. 2,1
D.1,2
22. 当程序读写数据文件时,需要有声明语句“FILE
*fp;”,在该声明语句之前必须包含头文件
______B______。
A.
string.h B. stdio.h C. math.h
.h
23.
在文件中,以符号常量EOF作为文本文件的结束标记,EOF代表的值是_____B____。
A. -2 B. -1 C. 0
D.1
24. 若有声明“double a[2][3]={1,2,3,4,5,6};”,则下
列表达式中不能正确引用a[1][1]值的是
__C___。
A. *(a[0]+4)
B. *(a[1]+1) C. *(*(a+3)+1) D. *(*a+4)
25. 有以下程序段
typedef struct NODE
{
int num; struct NODE *next;} OLD;
则以下叙述中正确的是_____D____。
A. 以上的说明形式非法
C. OLD是一个结构体类型
B. NODE是一个结构体类型
D. OLD是一个结构体变量
26. 当把以下四个表达式用作if语句的控制表
达式时,有一个选项与其它三个选项含义不同,
这个选项是_____D_____。
A.
k%2 B. k%2==1 C. (k%2)!=0 D.
!k%2==1
27. 若有定义:int x=0,
*p=&x;,则语句printf(的输出结果是
A. 随机值 B. 0
C. x的地址 D. p的地址
28.
以下能正确定义且赋初值的语句是___B______。
A. int n1=n2=10;
B. char c=32; C. float f=f+1.1; D.
double x=12.3E2.5;
29. 设有定义:int k=1,m=2; float
f=7;,则以下选项中错误的表达式是 C
A. k=k>=k B.
-k++ C. k%int(f)
30.
以下程序运行后的输出结果是:___B_____
A. 2 2 B.
7 2 C. 7 5 D. 6 2
main()
{ char a[7]= int i, j;
i=sizeof(a); j=strlen(a);
printf(
%d
D. k>=f>=m
江 苏 大 学 试 题 第5页
二、 填空题(40分)(每空2分,请涂写在答题卡上)
1. 设有说明“int
j=5,m=2,k=7,n;”,则执行语句“n+=m*=n=j*k;”后,n和m的值分别为
___B___ 和____C____。
31. A. 75
B. 105
32. A. 30 B. 50
C. 120
C. 70
D. 130
D. 90
2. 以下程序运行时输出结果是____A___。
#include < stdio.h >
main( )
{ char a
= 256;
int d = a;
printf(
}
33. A. 1 B. 257 C. 0
D. -1
3. 下列程序的程序输出的第一行是__A ,第二行__B ,第三行__B
。
#include
main()
{ int
a=1,b=2,x1,x2,x3;
x1=add(a,b);x2=add(add(a,b),b);
x3=add(a,b);printf(“%dn%dn%dn”,x1,x2,x3);
}
int add(int x,int y)
{ static int
z=1;
z=x+y+z;return(z);}
34. A.4
B.5 C.6 D.7
35. A.14
B.16 C.18
36. A.17
B.19 C.21
D.20
D.23
4. 以下程序运行时输出结果的第一行是 C
,第二行是 D ,第三行是 C 。
int c=0;
void fl
(int x, int *sum)
{ int y=0;
x++;
y++; c=c+y;
*sum=(x+y)c;
}
main( )
{ int a,b= 100;
for(a=0;a<3;a++ )
{ fl(a,&b);
printf(
}
37. A.0 1 2 B.0 2 3
C.0 2 1 D.1 2 1
38. A.0 1 2
B.0 2 3 C.2 2 4
39. A. 1 2 3
B.2 4 3 C. 2 1 3
D.1 1 2
D.1 4 3
江 苏 大
学 试 题 第6页
5. 以下程序运行时输出的两个数分别是 B 和 C 。
main()
{ int x=1,y,k;
for(k=0;k<5;k++)
{ int x=1;
x++;
if(k==4) y=x;
}
printf(
}
40. A. 0
B. 1 C. 2 D. 3
41. A. 0
B. 1 C. 2 D. 3
6.
以下程序运行时输出第一个数是 B ,第二个数是 _C__ ,第三个数是 _D__ 。
#include
main()
{ static
int a[3][3]={0},i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
switch(abs(i-j))
{ case
0:if(i==0||i==2) a[i][j]+=3;
else a[i][j]++;break;
case
1:a[i][j]+=2;break;
case
2:a[i][j]+=3;
}
}
printf(
}
42. A. 0 B. 1
C. 2
43. A. 0 B. 1
C. 2
44. A. 0 B. 1
C. 2
main()
{ static int
x[3][3]={{1,2},{5,6},{7,8,9}},(*p)[3];
p=x;
printf(“%dn”,(*(p+1))[1],p[0][0]);
}
45. A. 0 B. 2 C. 5
46. A. 0 B. 1 C. 2
D. 3
D. 3
D. 3
7. 下列程序输出的两个数分别是
D___ 和 _B__ 。
D. 6
D. 3
江 苏 大 学 试 题
第7页
8. 下列程序的程序输出结果为 C 、 B 、 D
。
void swap(int a,int b)
{ int t=0;
if(a>b)t=a;a=b;b=t;
}
main()
{ int
x=15,y=12,z=20;
if(x>y)swap(x,y);
if(x>z)swap(x,z);
if(y>z)swap(y,z);
printf(“%dt%dt%dn”,x,y,z);
}
47. A.
0 B. 12 C. 15
D. 20
48. A. 0 B. 12
C. 15 D. 20
49. A. 0
B. 12 C. 15 D. 20
9.
若有函数定义:
int f( )
{ int x =4, y=3, z=2;
return x, y, z;
}
则调用函数f后的返回值是 D
。
50. A. 4,3,2 B. 4 C. 3
D. 2
一、 完善程序题(30分,每空2分,请涂写在答题卡上)
1、
用递推法计算某一级数的近似值,直到n取一值使得:| x
(2n+1)
n! |<1e-6
为止。级数如下:
x-x
3
(3*1!)+x
5
(5*2!)-x<
br>7
(7*3!)+….+x
(2n+1)
((2n+1)*n!)+…..
#include
#include
float g(float x)
{ float
t=x,sum=t,s=1;int n=0;
while( A >1e-6)
{ n++;
s=-s;
t=t* C
sum=sum+s*t B
}
return sum;
}
main( )
{ float x;
scanf(“%f”,&x);printf(“s=%f”,g(x));
}
51. A. fabs(t) B. fabs(n)
C. sum D. n
江 苏 大 学 试 题 第8页
52. A. x*x B. x*x(n+1) C.
x*xn D. x*x(2*n+1)
53. A. n*(2*n+1)
B. (2*n+1) C. n*(2*n-1) D. n*2*(n+1)
2、输入一个不包含空格的字符串,判断输入的字符串是否为回文,是回文则输出“Righ
t!”,
不是则输出“Wrong!”。回文是相对于中心左右对称的字符串。如:字符串“abcba
”和“abddba”
是回文,而字符串“abcAa”不是回文。
#include
int f(char *p)
{ char
*p1,*p2;
p1=p2=p;
while(*p2++); B
;
while( C )
{ if( B ) return
0;
p1++; p2--;
}
return
1;
}
main()
{ char s[200];
printf(“please input the string”);scanf(“%s”,s);
if( __ D__ ) printf(“Right!”);
else printf(“Wrong!”);
}
54. A. p2=p2-2
B. p2=p2-1
55. A. p1>=p2 B.
p1>p2
56. A. p1==p2 B. p1!=p2
3. 以下程序实现将a数组中后8个元素用递归的方法进行从大到小排序的功能。
void sort(int *x,int n);
main()
{ int
a[12]={5,3,7,4,2,9,8,32,54,21,6,43},k;
sort( ___C___ ,8);
for(k=0;k<12;k++)printf(
}
void sort(int
*x,int n)
{ int j,t;
if(n==1)return;
for(j= __A___
;j
{ t=x[0];x[0]=x[j];x[j]=t;}
sort(x+1,
A___ );
}
58. A. a B. a+1
C. a+4 D. a+8
C. p2=p2+1 D.
p2=p2+2
C. p1<=p2 D. p1
59. A. 0 B. 1 C.
3 D. 7
江 苏 大 学 试 题
第9页
60. A. x[0]>x[j] B. x[0]
4.设链表上结点的数据结构定义如下:
struct node
{ int
x;
struct node *next;};
假设已经建立了一个链表,h
为链首指针。函数deladd的功能是:若链表上能找到结点的x值为value,
则从链表上删除该
结点(假定链表上的各个结点的值是不同的);否则构造一个新结点,其x值为value,
并将新结点
插入链尾。该函数要求返回新链表的首指针。
struct node
*deladd(struct node *h,int value)
{ struct
node *p1, *p2;
int flag=0;
p1=p2=h;
while(p1&&flag==0)
{ if(p1->x==value)
{ flag=1;
if(p1==h)
{ h=
A free(p1);}
else
{ p2->next= A
free(p1);}
else
{ p2=p1;p1= A
;}
}
if(flag==0)
{ p1=(struct node
*)malloc(sizeof(struct node));
p1->x=value;p1->next=0;
if(h= =0)
h=p1;
else B
}
return h;
}
62. A. p1->next
B.
p2->next C. p1
D.
p2
63. A. p1->next B. p2->next
C. h
D. p2
64. A.
p1->next B. p2->next C. p2
D. NULL
65. A. p1->next=p1 B. p2->next=p1
C. p1->next= NULL D. p2->next= NULL