(考试时间120分钟,满分100分)
一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项真涂在答题卡相应位置上,答在试卷上不得分。
(1)数据的存储结构是指 D
A)存储在外存中的数据
B)数据所占的存储空间量
C)数据在计算机中的顺序存储方式
D)数据的逻辑结构中计算机中的表示
(2)下列关于栈的描述中错误的是 B
A)栈是先进后出的线性表
B)栈只能顺序存储
C)栈具有记忆作用
D)对栈的插入与删除操作中,不需要改变栈底指针
(3)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 D
A)冒泡排序为n/2
B)冒泡排序为n
C)快速排序为n
D)快速排序为n(n-1)/2
(4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为 C
A)log2n
B) n/2
C) n
D) n+1
(5)下列对于线性链表的描述中正确的是 A
A)存储空间不一定是连续,且各元素的存储顺序是任意的
B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面
C)存储空间必须连续,且前件元素一定存储在后件元素的前面
D)存储空间必须连续,且各元素的存储顺序是任意的
(6)下列对于软件的描述中正确的是 C
A)软件测试的目的是证明程序是否正确
B)软件测试的目的是使程序运行结果正确
C)软件测试的目的是尽可能多地发现程序中的错误
D)软件测试的目的是使程序符合结构化原则
(7)为了使模块尽可能独立,要求 B
A)模块的内聚程序要尽量高,且各模块间的耦合程序要尽量强
B)模块的内聚程序要尽量高,且各模块间的耦合程序要尽量弱
C)模块的内聚程序要尽量低,且各模块间的耦合程序要尽量弱
D)模块的内聚程序要尽量低,且各模块间的耦合程序要尽量强
(8)下列描述中正确的是 D
A)程序就是软件
B)软件开发不受计算机系统的限制
C)软件既是逻辑实体,又是物理实体
D)软件是程序、数据与相关文档的集合
(9)数据独立性是数据库技术的重要特点之一。所谓数据独立性是指 D
A)数据与程序独立存放
B)不同的数据被存放在不同的文件中
C)不同的数据只能被对应的应用程序所使用
D)以上三种说法都不对
(10)用树形结构表示实体之间联系的模型是 C
A)关系模型
B)网状模型
C)层次模型
D)以上三个都是
(11)算法具有五个特性,以下选项中不属于算法特性的是 B
A)有穷性
B)简洁性
C)可行性
D)确定性
(12)以下选项中可作为C语言合法常量的是 A
A)-80.
B)-080
C)-8e1.0
D)-80.0e
(13)以下叙述中正确的是 C
A)用C程序实现的算法必须要有输入和输出操作
B)用C程序实现的算法可以没有输出但必须要有输入
C)用C程序实现的算法可以没有输入但必须要有输出
D)用C程序实现的算法可以既没有输入也没有输出
14.以下不能定义为用户标识符的是 D
A)Main
B)_0
C)_int
D)sizeof
(15)以下选项中,不能作为合法常量的是 B
A)1.234e04
B)1.234e0.4
C)1.234e+4
D)1.234e0
(16)数字字符0的ASCII值为48,若有以下程序
main()
{ char a='1',b='2';
printf("%c,",b++);
printf("%d ",b-a);
}
程序运行后的输出结果是 C
A)3,2
B)50,2
C)2,2
D)2,50
(17)有以下程序
main()
{ int m=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d ",n++,++m);
}
程序运行后的输出结果是 &n bsp; A
A)12353514
B)12353513
C)12343514
D)12343513
(18)有定义语句:int b;char c[10]; ,则正确的输入语句是 B
A)scanf("%d%s",&b,&c);
B)scanf("%d%s",&b,c);
C)scanf("%d%s",b,c);
D)scanf("%d%s",b,&c);
(19)有以下程序
main()
{ int m,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d ",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是 A
A)m=123n=456p=789
B)m=123 n=456 p=789
C)m=123,n=456,p=789
D)123 456 789
(20)有以下程序
main()
{
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d ",a,b);
}
程序运行后的输出结果是 B
A)6,1
B)2,1
C)6,0
D)2,0
(21)有以下程序
main()
{ int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d ",i,j,k);
}
程序运行后的输出结果是 D
A)1 2 3
B)2 3 4
C)2 2 3
D)2 3 3
(22)若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a
1<b?a:c<d?c:d的值 %d="" &n="" (23)有以下程序="" (25)以下能正确定义一维数组的选项是="" (26)有以下程序="" 2="" 6="" \",i,j);="" \",j);="" a="{\'A\',\'B\',\'C\'};" a)1="" a[5]='\"0123\";' a[7]='\"a0\0a0\0\";int' a[]="{0,1,2,3,4,5};" a)2="" a)42="" a)int="" b="" b)2="" bsp;x="" b)45="" b)7="" b)char="" c="" c)3="" char="" c)56="" c)7="" c)char="" d)4="" d)6="" d)60="" d)int="" f1(int="" i="sizeof(a);" i,j;="" if(p[i]%2)="" int="" j="strlen(a);" j+="p[i];" main()="" p[8]="{11,12,13,14,15,16,17,18},i=0,j=0;" printf(\"%d="" while(i++<7)="" x,int="" y){return="" {="" }="" 程序运行后的输出结果是="" (24)有以下程序="">y?x:y;}
2int f2(int x,int y){return x>y?y:x;}
3main()
4{ int a=4,b=3,c=5,d=2,e,f,g;
5e=f2(f1(a,b),f1(c,d));
6f=f1(f2(a,b),f2(c,d));
7g=a+b+c+d-e-f;
8printf(\"%d,%d%d \",e,f,g);
9}
10程序运行后的输出结果是 A
11A)4,3,7
12B)3,4,7
13C)5,2,7
14D)2,5,7
15(27)已有定义:char a[]=\"xyz\",b[]={\'x\',\'y\',\'z\'};,以下叙述中正确的是 C
16A)数组a和b的长度相同
17B)a数组长度小于b数组长度
18C)a数组长度大于b数组长度
19D)上述说法都不对
20
21(28)有以下程序
22void f(int *x,int *y)
23{ int t;
24t=*x;*x=*y;*y=t;
25}
26main()
27{ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
28p=a;q=&a[7];
29while(p<q) #define="" (30)以下叙述中错误的是="" 1="" 2="" 20="" 3="" 4="" 5="" \",a[1][i]);="" a[3][3],*p,i;="" a[],int="" a)0="" a)8,2,3,4,5,6,7,1,="" a)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出="" b)1="" b)5,6,7,8,1,2,3,4,="" b)数组名代表的是数组所占存储区的首地址,其值不可改变="" c="" c)1,2,3,4,5,6,7,8,="" c)2="" c)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息="" d="" d)3="" d)8,7,6,5,4,3,2,1,="" d)可以通过赋初值的方式确定数组元素的个数="" f(p,q);="" for(i="m;i" fun(int="" i,j;="" int="" m)="" main()="" n="" n,int="" p="&a[0][0];" p++;="" p[i]="i;" printf(\"%d="" printf(\"%d,\",a[i]);="" q--;="" {="" }="" 程序运行后的输出结果是="" (29)有以下程序="" (31)有以下程序="">=n;i--)
30a[i+1]=a[i];
31}
32main()
33{
34int i,a[N]={1,2,3,4,5,6,7,8,9,10};
35fun(a,2,9);
36for(i=0;i<5;i++)
37printf(\"%d\",a[i]);
38}
39程序运行后的输出结果是 C
40A)10234
41B)12344
42C)12334
43D)12234
44(32)有以下程序
45main()
46{ int a[3][2]={0},(*ptr)[2],i,j;
47for(i=0;i<2;i++)
48{ ptr=a+i;
49scanf(\"%d\",ptr);
50ptr++;
51}
52for(i=0;i<3;i++)
53{
54for(j=0;j<2;j++)
55printf(\"%2d\",a[i][j]);
56printf(\" \");
57}
58}
59若运行时输入:1 2 3<回车>,则输出结果为 B
60A)产生错误信息
61B)1 0
622 0
630 0
64C)1 2
653 0
660 0
67D)1 0
682 0
693 0
70(33)有以下程序
71prt(int *m,int n)
72{
73int i;
74for(i=0;i<n;i++) #define="" (40)设有如下说明="" (p*x*x);}="" *s='\"right!\";' *sp='\"right!\";' *sp;="" 0="" 1="" 3="" 35="" 70="" \",c&c);="" \",data.c);输出结果为5.000000="" \",f(3+5));="" a="1,b;" a;="" a[]="{1,2,3,4,5,6,7,8,9,0},*p;" a)="" a)192="" a)1,2,3,4,5,="" a)1,2,3,4,5,6,7,8,9,0,="" a)char="" a)data的每个成员起始地址都相同="" a)以上的说明形式非法="" a)预处理命令行必须位于源文件的开头="" b="" b;="" b)="" b)29="" b)2,3,4,5,6,="" b)2,3,4,5,6,7,8,9,10,1,="" b)char="" b)st是一个结构体类型="" b)变量data所占内存字节数与成员c所占字节数相等="" b)在源文件的一行上可以有多条预处理命令="" c="" c;="" c[2];="" char="" c)="" c)0,1,2,3,4,5,6,7,8,9,="" c)25="" c)3,4,5,6,7,="" c)char="" c)new是一个结构体类型="" c)宏名必须用大写字母表示="" c)程序段:data.a='5;printf(\"%f' d="" double="" dt="" d)="" d)1,1,1,1,1,1,1,1,1,,1,="" d)2,3,4,5,1,="" d)char="" d)data可以作为函数的实参="" d)new是一个结构体变量="" d)宏替换不占用程序的运行时间="" d)编译出错="" f(int="" for(b="1;b<=10;b++)" for(i="0;i<5;i++)" for(p="a;p<a+10;p++)" if(a="" int="" long="" m[i]++;="" main()="" new;="" p="" prin="" printf(\"%d="" printf(\"%d,\",*p);="" printf(\"%d,\",a[i]);="" prt(a,5);="" return="" s='\"right!\";' s[10];="" st="" struct="" tf(\"%d="" typedef="" union="" x)="" {="" }="" }data;="" 以下叙述中错误的是="" 则下面叙述中正确的是="" 程序运行后的输出结果是="" 程序运行后的输出结果是:="" (34)有以下程序="" (35)有以下程序="" (36)有以下程序="" (37)以下叙述中正确的是="" (38)若有以下说明和定义="" (39)以下语句或语句组中,能正确进行字符串赋值的是="" (41)有以下程序="">=8) break;
75if(a%2==1) { a+=5; continue;}
76a-=3;
77}
78printf(\"%d \",b);
79}
80程序运行后的输出结果是 B
81A)3
82B)4
83C)5
84D)6
85
86(42)有以下程序
87main()
88{
89char s[]=\"159\",*p;
90p=s;
91printf(\"%c\",*p++);
92printf(\"%c\",*p++);
93}
94程序运行后的输出结果是 A
95A)15
96B)16
97C)12
98D)59
99(43)有以下函数
100fun(char *a,char *b)
101{
102while((*a!=\'\0\')&&(*b!=\'\0\')& ;&(*a==*b))
103{ a++; b++;}
104return (*a-*b);
105}
106该函数的功能是 D
107A)计算a和b所指字符串的长度之差
108B)将b所指字符串复制到a所指字符串中
109C)将b所指字符串连接到a所指字符串后面
110D)比较a和b所指字符串的大小
111(44)有以下程序
112main()
113{
114int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
115for(i=0;i<4;i++)
116{
117for(j=1;j<=i;j++) printf(\"%c\",\' \');
118for(j= j<4;j++) printf(\"%4d\",num[i][j]);
119printf(\" \");
120}
121}
122若要按以下形式输出数组右上半三角
1231 2 3 4
1246 7 8
12511 12
12616
127则在程序下划线处应填入的是 B
128A) i-1
129B) i
130C) i+1
131D) 4-i
132(45)有以下程序
133point(char *p)
134{
135p+=3;
136}
137main()
138{ char b[4]={\'a\',\'b\',\'c\',\'d\'},*p=b;
139point(p); printf(\"%c \",*p);
140}
141程序运行后的输出结果是 A
142A)a
143B)b
144C)c
145D)d
146
147(46)程序中若有如下的说明和定义语句
148char fun(char *);
149main()
150{
151char *s=\"one\",a[5]={0},(*f1)()=fun,ch;
152……
153}
154以下选项中对函数fun的正确调用语句是 A
155A)(*f1)(a);
156B)*f1(*s);
157C)fun(&a);
158D)ch=*f1(s)
159(47)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。
160struct node
161{
162int data;
163struct node *next;
164} *p,*q,*r;
165现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是 D
166A)p->next=q->next;
167B)p->next=p->next->next;
168C)p->next=r;
169D)p=q->next;
170
171(48)以下对结构体类型变量td的定义中,错误的是 C
172A)typedef struct aa
173{
174int n;
175float m;
176}AA;
177AA td;
178B)struct aa
179{
180int n;
181float m;
182} td;
183struct aa td;
184C)struct
185{
186int n;
187float m;
188}aa;
189struct aa td;
190D)struct
191{
192int n;
193float m;
194}td;
195
196(49)以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是 D
197A)feof(fp)
198B)ftell(fp)
199C)fgetc(fp)
200D)rewind(fp)
201(50)有以下程序
202#include \"stdio.h\"
203void WriteStr(char *fn,char *str)
204{
205FILE *fp;
206fp=fopen(fn,\"W\");
207fputs(str,fp);
208fclose(fp);
209}
210main()
211{
212WriteStr(\"t1.dat\",\"start\");
213WriteStr(\"t1.dat\",\"end\");
214}
215程序运行后,文件t1.dat中的内容是 B
216A)start
217B)end
218C)startend
219D)endrt
220待续……
2212005年4月2日C笔试试卷及答案,快来对答案(三)!!!!!!!
222填空题(每空2分,共40分)
223(1)某二*树中,度为2的结点有18个,则该二*树中有 19 个叶子结点。
224(2)在面向对象的方法中,类的实例称为 对象 。
225(3)诊断和改正程序中错误的工作通常称为 程序调试 。
226(4)在关系数据库中,把数据表示成二维表,每一个二维表称为 关系 。
227(5)问题处理方案的正确而完整的描述称为 算法 .
228(6)以下程序运行时若从键盘输入:10 20 30<回车>。输出结果是 10 30 0 .
229#include <stdio.h>
230main()
231{ int i=0,j=0,k=0;
232scanf(\"%d%*d%d\",&i,&j,&k);
233printf(\"%d%d%d \",i,j,k);
234}
235(7)以下程序运行后的输出结果是 &n bsp; 81 .
236#define S(x) 4*x*x+1
237main()
238{
239int i=6,j=8;
240printf(\"%d \",S(i+j));
241}
242(8)以下程序运行后的输出结果是 4599
243main()
244{
245int a=3,b=4,c=5,t=99;
246if(b<a&&a<c) (9)以下程序运行后的输出结果是="" 0="" 10="" 20="" \",a,b,c);="" a="10;b=20;c=(a%b<1)||(a/b" a,b,c="" if(a<c&&b<c)="" int="" main()="" printf(\"%d%d%d="" t="b;b=a;a=t;" {="" }="">1);
247printf(\"%d %d %d \",a,b,c);
248}
249(10)以下程序运行后的输出结果是0918273645
250main()
251{
252char c1,c2;
253for(c1=\'0\',c2=\'9\';c1<c2;c1++,c2--) (11)已知字符a的ascii代码值为65,以下程序运行时若从键盘输入:b33<回车="" \");="" printf(\"="" printf(\"%c%c\",c1,c2);="" }="">.输出结果是 1B
254#include \"stdio.h\"
255main()
256{
257char a,b;
258a=getchar(); scanf(\"%d\",&b);
259a=a-\'A\'+\'0\';
260b=b*2;
261printf(\"%c %c \",a,b);
262}
263(12)以下程序中,fun函数的功能是求3行4列二维数组每行元素中的最大值.请填空. br[i]
264void fun(int, int, int (*)[4],int *)
265main()
266{
267int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
268fun(3,4,a,b);
269for(i=0;i<3;i++)
270printf(\"%4d\",b[i]);
271printf(\" \");
272}
273void fun(int m,int n,int ar[][4],int *br)
274{
275int i,j,x;
276for(i=0;i<m;i++) #include="" %d="" (13)以下程序运行后的输出结果是="" (14)以下程序运行后的输出结果是="" (15)以下程序运行后的输出结果是="" (16)以下程序运行后的输出结果是="" (17)以下程序运行后的输出结果是="" (a+b+c);="" *link;="" *s,int="" 0="" 1="" 10="" 11="" 12="" 13431="" 2="" 3="" 4="" ;="" \");="" \",a,b);="" \",i,fun(a));="" \",x,y);="" \"string.h\"="" a="3,b=4;" a)="" abcbcc="" abcfg="" b="0;static" b++;="" c="3;" c++;="" ch[]='\"abc\",x[3][4];' char="" for(i="0;i<3;i++)" for(j="0;j<n;j++)" fun(char="" fun(int="" fun(s,3,strlen(s));="" i="0;" i,a="5;" i;="" if(x<ar[i][j])="" int="" k)="" k;="" m[5],*p="m,*q=m+4;" main()="" node="" p,int="" p-="" printf(\"="" printf(\"%d="" printf(\"%s\",&x[i][i]);="" puts(s);="" return="" s[]='\"abcdefg\";' s[i]="s[i+2];" strcpy(x[i],ch);="" struct="" swap(a,b)="" swap(int="" t="x;x=y;y=t;" t;="" void="" while(p!="q)" x="ar[i][j];" x,int="" y)="" {="" }="" };="" 【12】="x;">k=++i; p++;
277q->k=i++; q--;
278}
279q->k=i;
280for(i=0;i<5;i++)
281printf(\"%d\",m[i].k);
282printf(\" \");
283}
284(18)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes
285yes!,否则函数返回字符串:no!,并在主函数中输出.所谓回文即正向与反向的拼写都一样,例如:adgda.请填空.
286#include \"string.h\"
287char *huiwen(char *str)
288{
289char *p1,*p2; int i,t=0;
290p1=str; p2= ①
291for(i=0;i<=strlen(str)/2;i++)
292if(*p1++!=*p2--)
293{ t=1; break; }
294if( ②) return (\"yes!\");
295else return (\"no!\");
296}
297main()
298{
299char str[50];
300printf(\"Input:\"); scanf(\"%s\",str);
301printf(\"%s \", ③ );
302}
303①str+strlen(str)-1
304②t==0或!t
305③huiwen(str)
306[完]</m;i++)></c2;c1++,c2--)></a&&a<c)></stdio.h></n;i++)></q)></b?a:c<d?c:d的值>