急!!历年全国计算机二级C语言笔试真题解答。

2065 438+00 9月全国计算机二级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);