计算机等级考试二级C语言模拟试卷(九)
一、选择题(每小题1分,共40分)
(1)数据的存储结构是指
A)存储在外存中的数据 B)数据所占的存储空间量
C)数据在计算机中的顺序存储方式 D)数据的逻辑结构中计算机中的表示
(2)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是
A)ABCED B)DBCEA C)CDABE D)DCBEA
(3)下列对于线性链表的描述中正确的是
A)存储空间不一定是连续,且各元素的存储顺序是任意的
B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面
C)存储空间必须连续,且前件元素一定存储在后件元素的前面
D)存储空间必须连续,且各元素的存储顺序是任意的
(4)在深度为5的满二叉树中,叶子结点的个数为
A)15 B)16 C)31 D)32
(5)在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送
A)调用语句 B)命令 C)口令 D)消息
(6)下列描述中正确的是
A)软件工程只是解决软件项目的管理问题
B)软件工程主要解决软件产品的生产率问题
C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则
D)软件工程只是解决软件开发中的技术问题
(7)需求分析阶段的任务是确定
A)软件开发方法 B)软件开发工具 C)软件开发费用 D)软件系统功能
(8)下列不属于结构化分析的常用工具的是
A)数据流图 B)数据字典 C)判定树 D)PAD图
(9)数据库设计的根本目标是要解决
A)数据共享问题 B)数据安全问题
C)大量数据存储问题 D)简化数据维护
(10)设有如下关系表:
下列操作中正确的是
A)T=R∩S B)T=R∪S C)T=R×S D)T=R/S
(11) 若变量已正确定义并赋值,下面符合C语言语法的表达式是
A) a:=b+1 B) a=b=c+2 C) int 18.5%3 D) a=a+7=c+b
(12) C语言中运算对象必须是整型的运算符是
A) %= B) /= C) *= D) 〈=
(13) 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是
A) 1 B) 2 C) 2.0 D) 2.5
(14) 若变量a、iI已正确定义,且i已正确赋值,合法的语句是
A) a==1 B) ++i; C) a=a++=5; D) a=int(i);
(15)设有定义 int y=3,x=3,z=1;,则语句printf("%d %d\n",(++x,y++),z+2); 的输出结果是
A) 3 3 B) 3 4 C) 4 2 D) 4 3
(16) 能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是
A) a>=10 or a<=0 B) a>=0|a<=10 C) a>=10 &&a<=0 D) a>=10‖a<=0
(17) 设有 int x=11; 则表达式 (x++ * 1/3) 的值是
A) 3 B) 4 C) 11 D) 12
(18) 设 int x=1, y=1; 表达式(!x||y--)的值是
A) 0 B) 1 C) 2 D) -1
(19) 设有定义int x='f'; ,则语句printf("%c \n",'A'+(x-'a'+1));的输出结果是
A) G B) H C) I D) J
(20) 设有定义int a=2,c=5;,语句printf("a=%d,b=%d\n",a,c);的输出结果是
A) a=%2,b=%5 B) a=2,b=5
C) a=d, b=d D) a=%d,b=%d
(21) 下列程序的输出结果是
int main()
{
double d=3.2;
int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d \n", d*y);
return 0;
}
A) 0 B) 3 C) 3.07 D) 3.2
(22) 与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是
A) if (x>0) y=1; B) if(x)
else if(x<0)y=-1; if(x>0)y=1;
else y=0; else if(x<0)y=-1;
else y=0;
C) y=-1 D) y=0;
if(x) if(x>=0)
if(x>0)y=1; if(x>0)y=1;
else if(x==0)y=0; else y=-1;
else y=-1;
(23) 有如下程序
int main()
{
float x=2.0,y;
if(x<0.0) y=0.0;
else if(x<10.0) y=1.0/x;
else y=1.0;
printf("%f\n",y);
return 0;
}
该程序的输出结果是
A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000
(24) 以下循环体的执行次数是
for(int i=0,j=1; i<=j+1; i+=2, j--)printf("%d \n",i);
A) 0 B) 1 C) 2 D) 3
(25) 以下叙述正确的是
A) do-while语句构成的循环不能用其它语句构成的循环来代替。
B) do-while语句构成的循环只能用break语句退出。
C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环。
D) 用do-while语句构成的循环,在while后的表达式为零时结束循环。
(26) 有如下程序
int main()
{
int n=9;
while(n>6)
{ n--; printf("%d",n);}
return 0;
}
该程序的输出结果是
A) 876 B) 8765 C) 987 D) 9876
(27) 若已定义:
int a[ ]={0,1,2,3,4,5,6,7,8,9], *p=a,i;
其中 0≤i≤9, 则对a数组元素不正确的引用是
A) a[p-a] B) *(&a[i]) C) p[i] D) a[10]
(28) 下列程序执行后的输出结果是
int main()
{
int a[3][3], *p,i;
p=&a[0][0];
for(i=0; i<9; i++) p[i]=i+1;
printf("%d \n",a[1][2]);
return 0;
}
A) 3 B) 6 C) 9 D) 随机数
(29) 设已有定义: char *st="how are you"; 下列程序段中正确的是
A) char a[11], *p; strcpy(p=a+1,&st[4]);
B) char a[11]; strcpy(++a, st);
C) char a[11]; strcpy(a, st);
D) char a[], *p; strcpy(p=&a[1],st+2);
(30) 设有数组定义: char array [ ]="China"; 则数组 array所占的空间为
A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节
(31) 下列程序的输出结果是
int b=2;
int func(int *a)
{ b += *a; return(b);}
int main()
{
int a=2, res=2;
res += func(&a);
printf("%d \n",res);
return 0;
}
A) 4 B) 6 C) 8 D) 10
(32) 下列程序的输出结果是
struct abc
{ int a, b, c; };
int main()
{
struct abc s[2]={{1,2,3},{4,5,6}};
int t;
t=s[0].a+s[1].b;
printf("%d \n",t);
return 0;
}
A) 5 B) 6 C) 7 D) 8
(33) 设 int b=2;表达式(b>>2)/(b>>1)的值是
A) 0 B) 2 C) 4 D) 8
(34) 设有定义 int a[50],n;,若有调用语句fun(n, &a[9]);,则不正确的fun函数的首部是
A) void fun(int m, int x[]) B) void fun(int s, int h[41])
C) void fun(int p, int *s) D) void fun(int n, int a)
(35) 设有定义 int a[5]={10,20,30,40,50},*p=&a[2]; ,则执行语句 *--p;后*p的值是
A) 19 B) 20 C) 29 D) 30
(36) 下列程序执行后的输出结果是
#define MA(x) x*(x-1)
int main()
{
int a=1,b=2;
printf("%d \n",MA(1+a+b));
return 0;
}
A) 6 B) 8 C) 10 D) 12
(37) 对于基类型相同的两个指针变量之间,不能进行的运算是
A) < B) = C) + D) -
(38) 有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是
A) 3 B) 4 C) 5 D) 有语法错
(39) 若有以下说明和定义
fun(int *c){ }
main()
{ int (*a)()=fun,*b(),w[10],c;
┆
}
在必要的赋值之后,对fun函数的正确调用语句是
A) a=a(w); B) (*a)(&c); C) b=*b(w); D) fun (b);
(40) 若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是
A) EOF B) 0 C) 非零值 D) NULL
二、程序填空题(18分)
给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中。
例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000
主函数中输出:46 32 40 45 48
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdlib.h> #include <stdio.h> #define N 10 double fun(double x[],double *y) { int i,j; double av; /**********found**********/ av=__1__; /**********found**********/ for(i=0; i<N; i++) av = av + __2__; for(i=j=0; i<N; i++) /**********found**********/ if(x[i]>av) y[__3__]= x[i]; y[j]=-1; return av; } int main() { int i; double x[N],y[N]; for(i=0; i<N; i++) { x[i]=rand()%50; printf("%4.0f ",x[i]); } printf("\n"); printf("\nThe average is: %f\n",fun(x,y)); for(i=0; y[i]>=0; i++) printf("%5.1f ",y[i]); printf("\n"); return 0; }
三、程序修改题(18分)
给定程序中,函数fun的功能是:根据形参m的值,计算如下公式的值。
例如,若m=5,则应输出:1.463611。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> double fun ( int m ) { double y = 1.0 ; int i ; /**************found**************/ for(i = 2 ; i < m ; i++) /**************found**************/ y += 1 /(i * i) ; return( y ) ; } int main( ) { int n = 5 ; printf( "\nThe result is %f\n", fun(n)); return 0; }
四、程序设计题(24分)
编写函数fun,它的功能是:实现B=A+A’,即把矩阵A加上A的转置,存放在矩阵B中。
例如,输入如下矩阵
1 2 3
4 5 6
7 8 9
程序输出
2 6 10
6 10 14
10 14 18
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun(int a[3][3], int b[3][3]) { } int main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3]; int i, j ; fun(a, t) ; for (i = 0 ; i < 3 ; i++) { for (j = 0 ; j < 3 ; j++) printf("%7d", t[i][j]) ; printf("\n") ; } NONO() ; return 0; } void NONO(void) {/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/ int i, j, k, a[3][3], t[3][3] ; FILE *rf, *wf ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(k = 0 ; k < 5 ; k++) { for(i = 0 ; i < 3 ; i++) fscanf(rf,"%d %d %d",&a[i][0],&a[i][1],&a[i][2]); fun(a, t) ; for(i = 0 ; i < 3 ; i++) { for(j = 0 ; j < 3 ; j++) fprintf(wf, "%7d", t[i][j]) ; fprintf(wf, "\n") ; } } fclose(rf) ; fclose(wf) ; }
一、选择题 ( 1)~( 5): DDABD ( 6)~(10): CDDAB (11)~(15): BACBA (16)~(20): DABAB (21)~(25): AACBD (26)~(30): ADBAC (31)~(35): BBADB (36)~(40): BCABC 二、程序填空题 (1)0 (2)x[i]/N (3)j++ 三、程序修改题 for(i = 2 ; i <= m ; i++) y += 1.0 /(i * i) ; 四、程序设计题 void fun(int a[3][3], int b[3][3]) { int i,j; for (i=0;i<3;i++) for (j=0;j<3;j++) b[i][j]=a[i][j]+a[j][i]; }