背景:
阅读新闻

全国计算机等级考试二级C考前模拟题

[日期:2009-11-23] 来源:  作者: [字体: ]

一、选择题(1~10每小题2分,11~50每小题1分,共60分)
  下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。
  (1)算法的时间复杂度是指()。
  A)执行算法程序所需要的时间
  B)算法程序的长度
  C)算法执行过程中所需要的基本运算次数
  D)算法程序中的指令条数
  (2)用链表表示线性表的优点是()。
  A)便于随机存取 B)花费的存储空间较顺序存储少
  C)便于插入和删除操作 D)数据元素的物理顺序与逻辑顺序相同
  (3)栈底至栈顶依次存放元素ABCD,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是()。
  AABCED BDCBEA CDBCEA DCDABE 
  (4) 在待排序的元素序列基本有序的前提下,效率最高的排序方法是()。
  A)冒泡排序 B)选择排序 C)快速排序 D)归并排序
  (5)在设计程序时,应采纳的原则之一是
  A)不限制goto语句的使用 B)减少或取消注解行
  C)程序越短越好 D)程序结构应有助于读者理解
  (6)下列不属于软件工程的3个要素的是( )。
  A)工具 B)过程 C)方法 D)环境
  (7 软件工程中,白箱测试法可用于测试程序的内部结构。此方法将程序看做是()。
  A)路径的集合B)循环的集合
  C)目标的集合D)地址的集合
  (8)下列数据模型中,具有坚实理论基础的是()。
  A)层次模型 B)网状模型 C)关系模型 D)以上3个都是
  (9)下列有关数据库的描述,正确的是()。
  A)数据库是一个DBF文件 B)数据库是一个关系
  C)数据库是一个结构化的数据集合 D)数据库是一组文件
  10)下列说法中,不属于数据模型所描述的内容的是()。
  A)数据结构 B)数据操作
  C)数据查询 D)数据约束
  (11)一个C语言程序是由
  A)一个主程序和若干子程序组成
  B)函数组成
  C)若干过程组成
  D)若干子程序组成
  (12)下列数据中,不合法的C语言实型数据是
  A0.123 B123e3 C2.1e3.5 D789.0
  (13)已知
  int t=0
  while t=1
  {...}
  则以下叙述正确的是
  A)循环控制表达式的值为0
  B)循环控制表达式的值为1
  C)循环控制表达式不合法
  D)以上说法都不对

14)有以下定义语句
  double a,b;int w; long c;
  若各变量已正确赋值,则下列选择中正确的表达式是
  A a=a+b=b++ Bw%((int)a+b) C(c+w)%(int)a Dw=a==b
  (15)以下程序的输出结果是
  main()
  {inti;
  for(i=0;i<3;i++)
  switch(i){
  case 0:printf("%d",i);
  case 2:printf("%d",i);
  default:printf("%d",i);
  }
  }
  A 022111B021021C000122D012
  (16)设有以下程序段:
  int x=0,s=0;
  while!x!=0s+=++x;
  printf"%d",s;
  则
  A)运行程序段后输出0
  B)运行程序段后输出1
  C)程序段中的控制表达式是非法的
  D)程序段执行无限次
  (17)以下正确的说法是
  A)定义函数时,形参的类型说明可以放在函数体内
  Breturn后边的值不能为表达式
  C)如果函数值的?嘈陀敕祷刂道嘈筒灰恢拢院道嘈臀?/SPAN>
  D)如果形参与实参类型不一致,以实参类型为准
  (18)以下叙述中不正确的是
  A)在不同的函数中可以使用相同的名字的变量
  B)函数中的形式参数是局部变量
  C)在一个函数内定义的变量只在本函数范围内有效
  D)在一个函数内的复合语句中定义的变量在本函数范围内有效
  (19)以下程序的输出结果是
  main()
  {inta=3,b=4,c=5,d=2;
  if(a>b)
  if(b>c)
  printf("%d",d+++1);
  else
  printf("%d",++d+1);
  printf("%dn",d);
  }
  A 2 B3 C43 D44
  (20)有以下语句,则对a数组元素的引用不正确的是(0i9
  int a10={0,1,2,3,4,5,6,7,8,9},*p=a;
  A ap-a B*&ai]) Cpi D**a+i))

 

全国计算机二级C语言考前密卷

(33)请读程序片段(字符串内没有空格字符)

printf("d\n",strlen("ATSn0121\"))

上面程序片段的输出结果是____________

A)ll          B)10 

   C)9           D)8

答案:C

评析:这个语句的目的是输出"ATSn0121\\"这个串的长度,在串中"\"代表一个"",而"1"代表数字1,也占一个字符,"n"是回车换行符,也占一个字符,加上ATs0l2,共9个字符。 转贴于 265考试网 http://www.265ks.com

 

(34)运行以下程序后,如果从键盘上输入china<回车>,则输出结果为_________

#include<stdioh>

main()

{

int v1=0,v2=0char ch

while((ch=getchar())!=’#’)

switch(ch)

{

casea’:

case h’:

defaultv1++

case0v2++

}

printf("d,%dn"v1v2)

}

A)2,0         B)5,0 

C)5,5         D)2,5

答案:C

评析:执行完一个case后面的语句后,流程控制转移到下一个case继续执行。"case常量表达式"只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。

 

(35)请选出可用作c语言用户标识符的一组标识符__________

A)void   B)a3b3   C)For   D)2a

define   -123     -abc    DO

WORD    IF      case    sizeof

答案:B

评析:c语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。选项A中的voidc语言的关键字,不合法;选项c中的casec语言的关键字重名,不合法;选项D中的2a是数字打头而且sizeofc语言的关键字重名,不合法。

 

(36)下面能正确定义数组,并正确赋值的语句是_________

A)int N=5,b[N][N]        

   B)int a[1][2]={{1}{3}}

C)int c[2][]={{1,2}{34}}  

D)int d[3][2]={{12}{34}}

答案:D

评析:可以用下面的方法对二维数组初始化:

l、分行给二维数组赋初值。如int a[3][4]={{1234}{56,7,8}{9,10,1112}}

2、可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。如:

int a[3][4]={1,2,3,4,5,6,7,89,10,1 l12)

3、可以对部分元素赋初值:int a[3][4]={{1}{5}{9}}

它的作用是只对各行第一列的元素赋初值,其余元素值自动为0

4、如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,1112}

与下面的定义等价:int a[][4]={1,2,3,4,5,6,7,8,9,10,1l12}

 

(37)请选出以下程序的输出结果___________

#include<stdioh>

sub(int*s,int y)

{ static int t=3

y=s[t]t--

}

main()

{ int a[]={1,2,3,4}ix=0

for(i=0i<4i++){

sub(ax)printf("d"x))

printf("n")

}

A)1234         B)432l

C)0000         D)4444

答案:C

评析:x作为函数sub()的实参时,函数对x值的改变没有返回主函数,并不能使得x的值变化,所以在打印时,x的值是始终不变的,即为0

 

(38)假定下面程序可执行文件名prgexe,则该程序所在的子目录下输入命令行:prg hello

good<回车>后,程序的输出结果是_________

main(int argc,char*argv[])

{

int i

for=1i<argci++)printf("c"*argv[I])

}

A)heUo good       B)hg 

    C)hel         D)hellogood

答案:B

评析:带参数的main()函数常用形式为:main(int argc,char*argv[]),其中,整型变量argc用来记录命令行中的参数个数。参数的个数由c程序运行时自动计算出来。字符型指针数组argv的第一个元素存放命令名,其后各个元素依次存放命令行中各个参数的首地址,数组的大小由argc确定。for循环语句实现输出各参数的第一个字母。

 

(39)若有以下说明和语句,请选出哪个是对c数组元素的正确引用_________

int c[4][5](*cp)[5]

cp=c

A)cp+l         B)*(cp+3) 

    C)*(cp+1)+3      D)*(*cp+2)

答案:D

评析:cp=c这个语句是将数组第0行的地址赋给了cpcp+1使指针指向二维数组c的第一行;+(cp+3)是数组c的第三行的第0列的地址值;+(cp+1)+3是数组c的第一行第三列的地址值。

 

(40)下列选项中不能正确定义结构体的是_________

A)typede fstruct     B)struct color c1

{ int red;        { int red

int GREen;        int green

int blue;        int blue

}cOLOR;         }

COLOR cl

C)struct color      D)struct

{ int red;       { int red

int green;       int green

int blue;        int blue

}cl;          }cl

答案:B

评析:将一个变量定义为标准类型与定义为结构体类型不同之处在于:后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如,struct color),不能只指定结构体名。其中可以不出现结构体名,答案D就是缺省结构体名的情况。而变量名列表必须放在成员列表后面,所以B答案不能正确将c1定义为结构体变量。

(41)设有以下语句

   char a=3,b=6,c

   c=a^b<<2

   c的二进制值是_________

   A)00011011       B)00010100 

     C)00011100       D)00011000

   答案:A

   评析:"<<"c语言中规定的左移运算符,n是异或运算符,所以,c的二进制值应为0001 1011

  

(42)设有如下定义

   struct ss

   {  char name[10]

   int age

   char sex

   }std[3]*p=std

   下列各输入语句中错误的是__________.

   A)scanf("d"&(*p)age);  

   B)scanf("s"&stdname)

   C)scanf("c"&std[O]sex); 

    D)SCanf("c",&(p->SEX))

   答案:B

   评析:在c语言中,结构体变量的引用有三种等价方式:

   1、结构体变量.成员名;2(*p).成员名;3p->成员名。

   因为stdname是字符数组名,-本身代表地址,其前面不应该使用"&"符号,所以选项B错误。

  

(43)设有

   static char str[]="Beijing"

   则执行

   printf(dn",strlen(strcpy(str,"China")))

   后的输出结果为__________

   A)5           B)7 

   C)12           D)14

   答案:A

   评析:在执行printf()函数前,数组str的长度是7,但是当使用strcpy()函数将新的值赋给str后,strlenr)函数返回的应当是现在的str字符串的字符个数,即是5

(44)下列程序段中,不是死循环的是__________

   A)int i=100;      B)unsigned k=0

   while(1)         do

   {             {

   i=i100+l:        ++k

   if(i>=100)break;    }

   }            while(k>=0)

   C)for(;;);       D)int s=3379

   while(s++2+s2)s++

   答案:A

   评析:当表达式为非0值时,执行while语句中的内嵌语句,可用break语句跳出循环,用continue语句结束本次循环。选项A不是死循环,当i=100时跳出循环。选项c为空循环语句。

  

(45)以下程序的输出结果是________

   #include<stdioh>

   main()

   { int i

   for(i=li<5i++){

   if(i2)print引剃’)

   else continue

   printf("f")

   }

   printf("$n")

   }

   A)*#*#*#$        B)#*#*#*$  

   C)*#*#$          D)#*#*$

   答案:C

   评析:当i不可以整除2时打印"*",然后打印"",不能整除2则执行continue,跳过printf("#"):语句,结束本次循环,返回到循环的起始点。当循环结束后,打印"$"

  

(46)库函数strcpy用以复制字符串,若有以下定义和语句:

   char strl[]="china",str2[10]*str3,*str4="china"

   则对库函数strcpy的正确的调用是_________

   A)strcpy(strl"people")B)strcpy(str2,"people")

   C)strcpy(str3"people")D)strcpy(str4,"people")

   答案:B

   评析:strcpy(字符数组1,字符串2)其作用是将字符串2复制到字符数组l中去。

   注:(1)字符数组l必须定义得足够大;(2)"字符数组1"必须写成数组名的形式; (3)复制时连同字符串后面的’\0一起复制到字符数组1中。

(47)有以下程序

#include<stdioh>

main()

{int c

while((c=getchar())!=’\n){

switch(C-’2’){

case 0case 1putchar(c+4)

case 2putchar(c+4)break

case 3putchar(c+3)

defaultputchar(c+2)break}

}

}

从第一列开始输入以下数据,↙代表一个回车符。

2473

程序的输出结果是_________

A)668977         B)668966  

    C)66778777        D)6688766

答案:A

评析:getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据C-2的值进行分支选择;putchar()是在屏幕上打印一个字符,最后的结果应当为668977

 

(48)下面程序的输出结果是_________

Union un

{ int a[4]

long b

char c[6]}

main()

{

union un u

printf("dd",sizeof(u)sizeof(ua))

}

A)82            B)88 

    C)188          D)182

答案:B

评析:sizeof函数计算已知类型所占的字节数。共用体变量所占的内存长度等于最长的成员的长度。

 

(49)以下程序的输出结果是________

main()

{ int w=5fun(w)printf("n")}

fun(int k)

{ if(k>0) fun(k-1)

printf("dtk)

}

A)5 4 3 2 l     B)0 1 2 3 4 5

C)l 2 3 4 5     D)5 4 3 2 l 0

答案:B

评析:函数的递归调用就是在调用一个函数的过程中又出现直接或间接地调用该函数本身。fun函数共被调用6次,即fun(5)fun(4)fun(3)fun(2)、向n(1)fun(0)。其中fun(5)main函数调用的。

 

(50)若巾是指向某文件的指针,且已读到此文件的末尾,则函数feof(f1))的返回值是

A)EOF          B)O 

    C)非零值        D)NULL

答案:C

评析:函数feof是用来判断文件是否已读到末尾,如果已读到末尾则返回非零值,否则返回O

 

二、填空题(每空2分,共40)

请将每一个空的正确答案写在答题卡的【1】至【20】序号的横线上,答在试卷上不得  分。

(1)算法的复杂度主要包括时间复杂度和 【1】 复杂度。

答案:【1】空间

评析:习惯上常常把语句重复执行的次数作为算法运行时间的相对量度,称作算法的时间复杂度。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。

 

(2)数据的物理结构在计算机存储空间中的存放形式称为数据的 【2】 。

答案:【2】内模式或物理模式或存储模式

评析:一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据库内部的表示方法。例如,记录的存储方式是顺序存储、索引按照什么方式组织;数据是否压缩存储,是否加密等。

 

(3)若按功能划分,软件测试的方法通常分为 【3】 测试方法和黑盒测试方法。

答案:【3】白盒

评析:软件测试的方法有三种:动态测试、静态测试和正确性证明。设计测试实例的方法一般有两类:黑盒测试方法和自盒测试方法。

 

(4)数据库三级模式体系结构的划分,有利于保持数据库的 【4】 。

答案:【4】数据独立性

评析:数据库的三级模式体系结构把数据的组织管理工作进行了划分,把数据的具体组织留给DBMS管理,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式,保证了数据的独立性。

 

(5)在关系运算中,查找满足一定条件的元组的运算称之为 【5】 。

答案:【5】选择

评析:在关系数据库中,选择运算也是一个元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。这个关系是由R中的那些满足逻辑条件的元组所组成。

 

(6)C语言中(16PC机为例),一个float型数据在内存中所占的字节数为4;一个double型数据在内存中所占的字节数为 【6】 。

答案:【68

评析:在一般16PC机中,一个float型数据在内存中占4个字节(32),一个double型数据占8个字节。

 

(7)设有以下变量定义,并已赋确定的值,

char wint xfloat ydouble z

则表达式:w*x+z-y所求得的数据类型为 【7】 。

答案:【7double型或双精度型

评析:①先进行W*X的运算,先将字符型w转换成整型,运算结果为整型;②再将W*X的结果与z相加,要先将第一步的整型转换为double型,运算结果为double型;③最后将W*X+Z的结果与y相减,要先将floaty转换成double型,结果为double型。

20064月全国计算机二级C语言考前密卷3

(8)若运行时给变量x输入12,则以下程序的运行结果是 【8】 ;

main(){

inty

scanf(""d""&X)

y=x>12?x+lOx-12

printf(""dn"",y)

}

答案:【80

评析:三目运算符的形式为(表达式1)7(表达式2)(表达式3)。当(表达式1)值为真时,返回(表达式2)的值;为假时,返回(表达式3)的值。题中因为x>t2为假,所以结果为x-12,即为0

 

(9)四条语句:x++;、++x;、x=x+l;、x=l+x;,执行后都使变量x中的值增l,请写出一条同一功能的赋值语句(不得与列举的相同) 【9】 。

答案:【9x+=1

评析:题面中的四条语句的作用是使x的值加1,在c中有多种方法可以对变量进行加1操作,这里可以利用C的复合赋值运算符+=实现,本题答案为x+=1:。

 

(10)设有以下定义和语句,则*(*(p+2)+1)的值为 【10】 。

int[3][2]={10,20,30,40,50,60},(*p)[2]

p=a

答案:【1060

评析:本题定义了一个32列的二维数组a,并定义了一个指向两个元素的一维数组指针p,让p指向二维数组a的首行。*(*(p+2)+1)是引用a[2][1],其值是60

 

(11)若要使指针p指向一个double类型的动态存储单元,请填空。

p= 【11】 malloc(sizeof(double))

答案:【11(double*)

评析:函数malloc返回的是void*,所以若要使指针指向一个double类型,则必须进行类型转换,类型转换格式为:(数据类型*)

 

(12)下面程序的功能:输出100以内能被3整除且个位数为6的所有整数,请补充完整。

main()

{ int ij

for(i=O; 【12】 ;i++)

{ j=I*10+6

if( 【13】 )continue

printf("d",j)

}

}

答案:【12i<lO 转贴于 265考试网 http://www.265ks.com

 

13j3=0

评析:本题要求输出100以内能被3整除且个位数为6的所有整数,程序中j=i*10+6;语句是求个位数为6的整数,由此可得出程序的循环次数为i<lO。然后通过if语句判断整数是否能被3整除,若不能则继续下一次循环,若能则输出该整数,所以逻辑表达式为i3 1=00

 

(13)函数mycmp(char*s,chart)的功能是比较字符串st的大小,当s等于t时返回0

s>t返回正值,当s<t时返回负值。请填空。

mycmp(char*s,char*t)

{ while(*s==*t)

{ if(*s==’\0)return 0

++s++t

}

return( 【14】 )

}

答案:【14*s-*t-*t+*s

评析:函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s*t表示字符串数组st的第一个字符,在while循环中,是通过st值的不断变化来改变指针所指向的字符,要改变st所指不同字符的ASCII码的差值,必须使用"*s-*t"得出。

 

(14)以下程序运行后的输出结果是 【15】 。

void fun()

{

static int a=0

a+=2printf("d"a)

}

main()

{ int cc

for(CC=1cc<4cc++)fun()

printf("n")

}

答案:【152 4 6

评析:static声明的外部变量只限于被本文件引用,而不能被其他文件引用。用static来声明一个变量的作用有:①对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;②全部变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)

 

(15)下列程序的运行结果是 【16】 。

main()

{ union EXAMPLE

{ struct

{int xint y}in

int a

int b

}e

ea=1eb=2

einx=ea*eb

einy=ea+eb

printf("d,%dn"einxeiny)

}

答案:【164,8

评析:c语言规定,共用体中各个成员变量在内存中占用同一段内存单元,即einxeaeb占用同一段内存单元,由于einxeaeb占用的是同一段内存单元,所以程序最后的打印结果为"4,8"

 

(16)在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数  是 【17】 函数。

答案:【17[NNlrewindfseek

评析:在对文件进行操作的过程中,若要求文件的位置回到文件的开头,可以调用rewindfseek函数。其中rewind函数的作用是将位置指针重新返回文件的开头,而fseek函数可以实现文件指针的定位。

 

(17)以下函数用于求出一个2×4矩阵中的最大元素值。

max_value(arr)

int arr[][4]

{

int I,Jmax

max=alT[0][0]

for(i=0i<2i++)

for(j=0; 【18】 ;J++)

if( 【19】 >max)max=[2Q]

return(max)

}

答案:【18j<4

19arr[i][j]

20arr[i][j]

评析:2*4矩阵实际上就是一个二维数组,结合本题应为arr[2][4],所以在第一个循环中应当填写"4";第二个横线处是要判断当前的数组元素值是否大于max,所以应填写arr[i][j];第三个横线处是要将当前大于max的数组元素的值赋给变量max,所以应当填写"arr[i][il"
收藏 推荐 打印 | 录入:admin | 阅读:
本文评论   [发表评论]   全部评论 (0)
热门评论