急!!历年全国计算机二级C语言笔试真题解答。
一、选择题(每小题2分,* * * 70分)
在下面的四个选项a),b),c)和d)中,只有一个选项是正确的。请在答题卡相应位置填写正确选项,答案不在试卷上计分。
(1)下列说法是正确的。
a)线性表的链式存储结构和顺序存储结构需要相同的存储空间。
b)线性表的链式存储结构一般比顺序存储结构需要更多的存储空间。
c)线性表的链式存储结构一般比顺序存储结构需要更少的存储空间。
d)以上三种说法都不正确。
(2)下列说法是正确的。
a)在堆栈中,堆栈中的元素随着底指针和顶指针的变化而动态变化。
b)在栈中,栈顶指针保持不变,栈中元素随栈底指针动态变化。
c)在栈中,栈底指针保持不变,栈中元素随栈顶指针动态变化。
d)以上三种说法都不正确。
(3)软件测试的目的是
a)评估软件可靠性
b)找出并纠正程序中的错误。
c)纠正程序中的错误
d)查找程序中的错误。
(4)在下列描述中,不属于软件危机的是
a)软件过程不规范
b)软件开发的低生产率
c)软件质量难以控制。
d)软件成本正在增加。
(5)软件生命周期是指
a)软件产品从展示、实施、使用和维护到退役的过程。
b)软件从需求分析、设计、实现到测试完成的过程。
c)软件开发过程
d)软件操作和维护流程
(6)在面向对象方法中,继承是指
a)一组对象的相似属性
b)一个对象具有另一个对象的属性。
c)对象之间的* * *同质性
d)类之间* * *共享属性和操作的机制。
(7)划分层次数据库、网状数据库和关系数据库的原则如下
a)记录长度
b)文件大小
c)连接的复杂性
d)数据间的联系信息。
(8)一个工作人员可以使用多台计算机,一台计算机可以被多个人使用,因此实体工作人员与实体计算机之间的关系是
a)一对一
b)一对多
c)多对多
d)多对一
(9)数据库设计中反映用户对数据需求的方式是
a)内部模式
b)概念模型
c)外部模式
d)设计模式
(10)R、S和T有如下三种关系:
那么从关系R和S获得关系T的操作是
a)自然联系
b)支付
c)投影
d)以及
(11)下列关于结构化编程的说法是正确的。
A)结构化程序必须由三种结构组成:序列、分支和循环。
b)结构化程序使用goto语句很方便。
C)在C语言中,程序的模块化是通过函数来实现的。
d)由三种基本结构组成的程序只能解决小规模的问题。
(12)下面关于简单编程的步骤和顺序的说法是正确的。
a)确定算法后,整理编写文档,最后在电脑上编码调试。
b)先确定数据结构,再确定算法,然后编码,在电脑上调试,最后整理文档。
c)编码调试,确定编码过程中的算法和数据结构,最后整理文档。
d)先写文档,然后根据文档在电脑上编码调试,最后确定算法和数据结构。
(13)下列说法中错误的是
a)C程序在运行过程中所有的计算都是以二进制模式进行的。
b)C程序的所有计算都是在运行过程中以十进制模式进行的。
C)所有的C程序都需要正确编译链接后才能运行。
d)在C程序中,整型变量只能存储整数,实型变量只能存储浮点数。
(14)有如下定义:int a;龙b;双x,y;下列选项中正确的表述是
A)a%(整数)(x-y)
B)a=x!= y;
C)(a*y)%b
D)y=x+y=x
(15)以下选项可以代表合法常量。
a)整数:1,200
b)实数:1.5E2.0
c)字符斜杠:“\”
d)字符串:" \007 "
(16)表达式a+=a-=a=9的值为
A)9
B)_9
C)18
D)0
(17)如果变量定义正确,在if (w) printf ("%d \ n,k ");其中,以下是不可替代的w
A)a<>b+c
B)ch=getchar()
C)a==b+c
D)a++
(18)有以下步骤。
# include & ltstdio.h & gt
主()
{int a=1,b = 0;
如果(!a)b++;
else if(a = = 0)if(a)b+ = 2;
else b+ = 3;
printf("%d\n ",b);
}
程序运行后的输出结果是
A)0
B)1
C)2
D)3
(19)如果有定义语句int a,b;;双x;以下选项没有错。
a)开关(x%2) B)开关((int)x/2.0
{ case 0:a++;打破;{ case 0:a++;打破;
案例1:b++;打破;案例1:b++;打破;
默认:a++;b++;默认:a++;b++;
} }
c)开关((int)x%2) D)开关((int)(x)%2)
{ case 0:a++;打破;{ case 0.0:a++;打破;
案例1:b++;打破;案例1.0:b++;打破;
默认:a++;b++;默认:a++;b++;
} }
(20)有以下程序
# include & ltstdio.h & gt
主()
{int a=1,b = 2;
while(a & lt;6){ b+ = a;a+= 2;b % 2 10;}
printf("%d,%d\n ",a,b);
}
程序运行后的输出结果是
a)511
7,1
7,11
6,1
(21)有以下程序。
# include < stdio.h & gt
主()
{ int y = 10;
while(y-);
printf("Y=%d\n ",Y);
}
程序执行后的输出是
A)y=0
B)y= -1
C)y=1
D)while构成了一个无限循环。
(22)有以下程序
#include 主() { char s」= " rst uv "; printf("%c\n ",* s+2); } 程序运行后的输出结果是 A)tuv b)字符t的ASCII码值 C)t d)误差 (23)有以下程序 # include < stdio.h & gt # include < string.h & gt 主() { char x㏵= " STRING "; x〔0〕= 0;x〔1〕= ' \ 0 ';x〔2〕= ' 0 '; printf("%d %d\n ",sizeof(x),strlen(x)); } 程序运行后的输出结果是 A)6 1 B)7 0 C)6 3 7 1 (24)有以下程序 # include < stdio.h & gt int f(int x); 主() {int n=1,m; m = f(f(f(n)));printf("%d\n ",m); } int f(int x) { return x * 2;} 程序运行后的输出结果是 A)1 B)2 C)4 D)8 (25)下列程序段是完全正确的 a)int * p;scanf("%d ",& p); b)int * p;scanf("%d ",p); int k,* p = & ampk;scanf("%d ",p); D)int k,* p:;* p = & ampk;scanf("%d ",p); (26)定义语句:int * p[4];以下选项等效于此语句。 a)int p[4]; b)int * * p; c)int *(p〖4〗); d)int(* p)「4」; (27)下列定义数组的说法中,正确的是 a)int N = 10;b)#定义编号10 int x[N];int x[N]; C)int x[0..10〕;D)int x "; (28)要定义一个有五个元素的整数数组,下面的错误定义语句是 a)int a[5]= { 0 }; B)int b[]={0,0,0,0,0 }; c)int c[2+3]; D)int i=5,d[I]; (29)有以下程序 # include < stdio.h & gt void f(int * p); 主() {int a〔5〕={1,2,3,4,5},* r = a; f(r);printf(" % d \ n ";* r); } void f(int *p) { p = p+3;printf("%d,",* p);} 程序运行后的输出结果是 a)1.4 B)4,4 3,1 4,1 (30)有以下程序(fun函数只对偶数元素进行操作)。 # include < stdio.h & gt void fun(int * a;int n) {int i,j,k,t; for(I = 0;I < n-1;1+=2) { k = I;' for(j = I;j & ltn;j+= 2)if(a〔j〕gt;a〔k〕)k = j; t = a〔I〕;a〔I〕= a〔k〕;a〔k〕= t; } } 主() { int aa〖10〗;= { 1、2、3、4、5、6、7},I; 好玩(aa、7); for(i=0,i & lt7;i++)printf("%d,",aa〔I〕); printf(" \ n "); } 程序运行后的输出结果是 A)7,2,5,4,3,6,1 B)1,6,3,4,5,2,7 C)7,6,5,4,3,2,1 D)1,7,3,5,6;2,1 (31)下列选项中,能满足“如果字符串s1等于字符串s2,将执行ST”要求的是 A)if(strcmp(s2,s 1)= = 0)ST; b)if(S1 = = S2)ST; C)if(strcpy(s l,S2)= = 1)ST; d)if(S1-S2 = = 0)ST; (32)下面不能正确地将S表示的字符串复制到T表示的存储空间。 a)while(* t = * s){ t++;s++;} b)for(I = 0;t[I]= s[I ];i++); c)do { * t++ = * s++;} while(* s); D)for(i=0,j = 0;t[i++]= s[j++];); (33)有以下程序(strcat函数用于连接两个字符串)。 # include < stdio.h & gt #include <字符串。h & gt 主() {char a〔20〕="ABCD\OEFG\0 ",b〔30〕= " IJK "; strcat(a,b);printf("%s\n ",a); } 程序运行后的输出结果是 ABCDE\OFG\OIJK B)ABCDIJK IJK D)EFGIJK (34)有以下程序,其中用库函数islower (ch)判断ch中的字母是否为小写字母。 # include < stdio.h & gt #include 无效资金(char*p) { int I = 0; while(p[I ]) { if(p[I]= = ' ' & & is lower(p〖I-1〗)p[I-1]= p[I-1]-' A '+' A '; i++; } } 主() { char s 1〔100〕= " ab CD EFG!"; 好玩(s 1);printf("%s\n ",s 1); } 程序运行后的输出结果是 A)ab cd EFG! B)Ab Cd EFg! C)aB cD EFG! D)ab cd EFg! (35)有以下程序 # include < stdio.h & gt 无效资金(整数x) { if(x/2 > 1)fun(x/2); printf("%d ",x); } 主() {好玩(7);printf(" \ n ");} 程序运行后的输出结果是 A)1 3 7 B)7 3 1 C)7 3 D)3 7 (36)有以下程序 #include int fun() { static int x = 1; x+= 1;返回x; } 主() { int I;s = 1; for(I = 1;我& lt=5;i++)s+= fun(); printf("%d\n ",s); } 程序运行后的输出结果是 A)11 B)21 C)6 D)120 (37)有以下程序 #增量< stdio.h > #include 主() {int *a,*b,* c; a = b = c =(int *)malloc(sizeof(int)); * a = 1;*b=2,* c = 3; a = b; printf("%d,%d,%d\n ",*a,*b,* c); } 程序运行后的输出结果是 A)3,3,3 B)2,2,3 C)1,2,3 D)1,1,3 (38)有以下程序 # include < stdio.h & gt 主() {int s,t,A = 10;双B = 6; s = sizeof(A);t = sizeof(B); printf("%d,%d\n ",s,t); } 在VC6平台上编译运行,程序运行后的输出结果是 A)2,4 B)4,4 C)4,8 D)10,6 (39)如果有以下语句 Typedef结构 { int g;char h;} T; 以下陈述中正确的是 a)结构变量可以由s定义。 B) t可以用来定义结构变量。 S是一个struct类型的变量。 T是struct S类型的变量。 (40)有以下程序 # include < stdio.h & gt 主() {短c = 124; c = c _ _ _ _ _ _ _ _ _; printf("%d\n "、" C "); } 要制作程序248的运行结果,下划线处应该填写的是 a)>& gt2 B)| 248 C)& 0248D)& lt;& lt我 二、填空(每空2分,***30分) 请将正确答案写在答题卡上序号从1到15的横线上的每一个空白处,答案不在试卷上计分。 (1)堆栈的初始状态为空。先将元素5,4,3,2,1依次放入栈中,然后返回一次,再将元素A,B,C,D依次放入栈中,然后从栈中返回所有元素,所以所有元素(包括中间从栈中返回的元素)的顺序是1。 (2)在长度为n的线性表中,寻找最大项至少需要比较两次。 (3)一棵二叉树有10个节点,节点度为1,7个节点度为2,所以二叉树* * *有3个节点。 (4)仅由序列、选择(分支)和重复(循环)结构组成的程序是4程序。 (5)数据库设计的四个阶段是:需求分析、概念设计和逻辑设计。 (6)以下程序运行后的输出结果为6。 # include < stdio.h & gt 主() {int a=200,b = 010; printf("%d%d\n ",a,b); } (7)有以下程序 # include < stdio.h & gt 主() {int x,Y; scanf("%2d%ld ",&x,& y);printf("%d\n ",x+y); } 程序运行时输入:1234567程序运行结果为7。 (8)C语言中,表达式值为0时,表示逻辑值为假,表达式值为8时,表示逻辑值为真。 (9)有以下程序 # include < stdio.h & gt 主() {int i,n[]={0,0,0,0,0 }; for(I = 1;我& lt=4;i++) { n[I]= n[I-1]* 3+1;printf("%d ",n[I]);} } 程序运行后的输出结果是9。 (10)下面这个fun函数的作用是在一个有n个元素的一维数组中求最小值,并作为函数值返回。请填空。(让n被定义) int fun(int x〔N〕 {int i,k = 0; for(I = 0;我& ltn;I++) if(x〔i〕 返回x〔k〕; } (11)有如下程序。 # include < stdio.h & gt int*f(int *p,int * q); 主() {int m=1,n=2,* r = & ampm; r=f(r,& n);printf("%d\n ",* r); } int*f(int *p,int*q) { return(* p & gt;*q)?p:q;} 程序运行后的输出结果是11。 (12)下面这个fun函数的作用是在n行m列的整形二维数组中选择一个最大值作为函数值。请填空。(让M和M,。n待定义) int fun {int i,j,row=0,col = 0; for(I = 0;我& ltn;I++) for(j = 0;j if(a〔I〕j〕a〔row〔col〕){ row = I;col = j;} return(12): } (13)有以下步骤。 # include < stdio.h & gt 主() {int n[2],I,j; for(I = 0;我& lt2;i++)n[I]= 0; for(I = 0;I < 2;i++) for(j = 0;j & lt2;j++)n〔j〕= n〔I〕+1; printf("%d\n ",n[1]); } 程序运行后的输出结果是13。 (14)下面这个程序的作用是借助指针变量找出数组元素中最大值的位置,并输出最大值。请填写输出语句中代表最大值的输出项。 # include < stdio.h & gt 主() {int a〔10〕,*p,* s; for(p = a;p-a & lt;10;p++)scanf("%d ",p); for(p=a,s = a;p-a & lt;10;p++)if(* p & gt;* S)S = P; printf("max=%d\n ",14); } (15)以下程序打开新文件f.txt,并调用字符输出函数将A数组中的字符写入其中。请填空。 # include < stdio.h & gt 主() { 15 * FP; char a〔5〕={'1 ',' 2 ',' 3 ',' 4 ',' 5'},I; fp=fopen("f .txt "," w "); for(I = 0;我& lt5;i++)fputc(a[i],FP); fclose(FP);