Chinaunix首页 | 论坛 | 博客
  • 博客访问: 801607
  • 博文数量: 455
  • 博客积分: 9776
  • 博客等级: 中将
  • 技术积分: 5870
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 23:23
文章分类

全部博文(455)

文章存档

2011年(455)

分类: C/C++

2011-05-26 15:16:14

9月全国计算机等级考试二级笔试试题(C语言)

(考试时间120分钟,满分100分)

 

一、选择题(110每题2分,1150每题1分,共60分)

下列各题ABCD四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡的相应位置上,答在试卷上不得分。

1)下列选项中不符合良好程序设计风格的是(  )。

A)源程序要文档化                           B)数据说明的次序要规范化

C)避免滥用goto 语句                     D)模块设计要保证高耦合、高内聚

2)从工程管理角度,软件设计一般分为两步完成,它们是(  )。

A)概要设计与详细设计                   B)数据设计与接口设计

C)软件结构设计与数据设计               D)过程设计与数据设计

3)下列选项中不属于软件生命周期开发阶段任务的是

A)软件测试                                       B)概要设计

C)软件维护                                   D)详细设计

4)在数据库系统中,用户所见的数据模式为(  )。

A)概念模式                                        B)外模式

C)内模式                                     D)物理模式

5)数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和(  )。

A)编码设计                                        B)测试阶段

C)运行阶段                                 D)物理设计

6)设有如下三个关系表

R

 

S

 

 

T

 

 

A

 

B

C

 

A

B

C

m

 

1

3

 

M

1

3

n

 

 

 

 

N

1

3

下列操作中正确的是(  )。

AT=RS              BT=RS           CT=RXS                 DT=R/S

7)下列叙述中正确的是(  )。

A)一个算法的空间复杂度大,则其时间复杂性必定大

B)一个算法的空间复杂度大,则其时间复杂性必定小

C)一个算法的时间复杂度小,则其空间复杂性也必定小

D)上述三种说法都不对

8)在长度为64的有序线性表中进行顺序查找,最坏的情况下需要比较的次数为(  )。

A63                      B64                   C6                          D7

9)数据库技术的根本目标是要解决数据的(  )。

A)存储问题           B)共享问题         C)安全问题              D)保护问题

10)对下列二叉树(  )。

 

 

C

E

A

D

B

G

F

 

 

 

 

进行中序遍历的结果是(  )。

AACBDFEG        BACBDFGE      CABDCGEF           DFCADBEG

11)下列叙述错误的是(  )。

A)一个C语言程序只能实现一种算法

BC程序可以由多个程序文件组成

CC程序可以由一个或多个函数组成

D)一个C函数可以单独作为一个C程序文件存在

12)下列叙述中正确的是(  )。

A)每个C程序文件中都必须要有一个main()函数

B)在C程序中main()函数的位置是固定的

CC程序中所有函数之间都可以相互调用,与函数所在位置无关

D)在C程序的函数中不能定义另一个函数

13)下列定义变量的语句错误的是(  )。

Aint _int ;             Bdouble int_;      Cchar For;               Dfloat US$;

14)若变量XY已正确定义并赋值,以下符合C语言语法的表达式是(  )。

A++XY=X--      BX+1=Y           CX=X+10=X+Y      DDouble(x)/10

15)以下关于逻辑运算符两侧运算对象的叙述中正确的是(  )。

A)只能是整数01                       B)只能是整数0或非0整数

C)可以是结构体类型的数据               C)可以是任意合法的表达式

16)若有定义int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++):(y++)中的条件表达式(x-y)等价的是(  )。

A(x-y>0)              B(x-y<0)            C(x-y<0||x-y>0)       D(x-y==0)

17)有以下程序:

main()

{  int x,y,z;

   z= x++,y++,++y;

   printf("%d,%d,%d\n",x,y,z);

}

程序运行后的结果是(  )。

A233            B232          C231               D221

18)设有定义:int a;float b;,执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876 543.0<回车>ab值分别是(  )。

A876543.000000                        B876.000000

C87543.000000                          D76543.000000

19)有以下程序:

main()

{  int a=0,b=0;

   a=10;

   b=20;

   printf("a+b=%d\n",a+b);

}

程序运行的结果是(  )。

Aa+b=10               Ba+b=30            C30                       D)出错

20)在嵌套使用if语句时,C语言规定else总是(  )。

A)和之前与其具有相同缩进位置的if配对

B)和之前与其最近的if配对

C)和之前与其最近的且不带elseif配对

D)和之前的第一个if配对

21)下列叙述中正确的是(  )。

Abreak语句只能用于switch语句

B)在switch语句中必须使用default

Cbreak语句必须与switch语句中的case配对使用

D)在switch语句中,不一定使用break语句

22)有以下程序:

main()

{  int k=5;

while(--k)  printf("%d",k-=3);

   printf("\n");

}

执行后的输出结果是(  )。

A1                       B2                     C4                          D)死循环

23)有以下程序:

main()

{  int i;

   for(i=1;i<=40;i++)

   {  if(i++%5==0)

      if(++i%8==0) printf("%d",i); }

   printf("\n");

}

执行后的输出结果是(  )。

A5                       B24                   C32                        D40

24)以下选项中,值为1的表达式是(  )。

A1-'0'                    B1-'\0'                C'1'-0                      D'\0'-'0'

25)有以下程序:

fun(int x,int y){return(x+y);}

main()

{int a=1,b=2,c=3,sum;

 sum=fun((a++,b++,a+b),c++);

 printf("%d\n",sum);

}

执行后的输出结果是(  )。

A6                        B7                     C8                          D9

26)有以下程序:

main()

{ char s[]="abcde";

  s+=2;

printf("%d\n",s[0]);

}

执行后的输出结果是(  )。

A)输出字符aASCII                  B)输出字符cASCII

C)输出字符c                             D)程序出错

27)有以下程序:

fun(int x, int y)

{static int m=0,i=2;

 i+=m+1;   m=i+x+y;  return  m;

}

main()

{int j=1,m=1,k;

k=fun(j,m); printf("%d",k);

k=fun(j,m); printf("%d\n",k);

}

执行后的输出结果是(  )。

A55                  B511              C1111                  D115

28)有以下程序:

fun(int x)

{int  p;

if(x==0||x==1)   return(3);

p=x-fun(x-2);

return p;

}

main()

{ printf("%d\n",fun(7));}

执行后的输出结果是(  )。

A7                        B3                     C2                          D0

29)在16位编译系统上,若有定义int a[]={10,20,30},*p=&a;, 当执行p++;后,下列说法错误的是(  )。

Ap向高地址移动了一个字节           Bp向高地址移动了一个存储单元

Cp向高地址移动了两个字节           Dpa+1等价

30)有以下程序:

main()

{int a=1,b=3,c=5;

 int *p1=&a,*p2=&b,*p=&c;

 *p=*p1*(*p2);

printf("%d\n",c);

}

执行后的输出结果是(  )。

A1                        B2                     C3                          D4

31)若有定义:int w[3][5];,则以下不能正确表示该数组元素的表达式是(  )。

A*(*w+3)            B*(w+1)[4]        C) *(*(w+))                D*(&w[0][0]+1)

32)若有以下函数首部(  )。

int fun(double x[10],int *n)

则下面针对此函数的函数声明语句中正确的是(  )。

Aint fun(double x,int *n);                  Bint fun(double,int);

Cint fun(double *x,int n);                  Dint fun(double *,int*);

33)若有定义语句:int k[2][3],*pk[3];,则以下语句中正确的是(  )。

Apk=k;                                            Bpk[0]=&k[1][2];

Cpk=k[0];                                         Dpk[1]=k;

34)有以下程序:

void change(int k[]){k[0]=k[5];}

main()

{int x[10]={1,2,3,4,5,6,7,8,9,10},n=0;

while(n<=4) {change(&x[n]);n++;}

for(n=0;n<5;n++) printf("%d",x[n]);

printf("\n");

}

程序运行后的输出结果是(  )。

A6 7 8 9 10           B1 3 5 7 9          C1 2 3 4 5               D6 2 3 4 5

35)若要求定义具有10int型元素的一维数组a,则以下定义语句中错误的是(  )。

A#define N 10                             B#define n 5

   int a[N];                                   int a[2*n];

Cint a[5+5];                                 Dint n=10,a[n];

36)有以下程序:

main()

{int x[3][2]={0},i;

for(i=0;i<3;i++)   scanf("%d",x[i]);

printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);

}

若运行时输入:2 4 6<回车>,则输出结果为(  )。

A2 0 0                  B2 0 4               C2 4 0                    D2 4 6

37)有以下程序:

main()

{char s[]={"aeiou"},*ps;

 ps=s;   printf("%c\n",*ps+4);

}

程序运行后的输出结果是(  )。

Aa                        Bc                     Cu                          D)元素s[4]的地址

38)以下语句中存在语法错误的是(  )。

Achar ss[6][20]; ss[1]="right?";

Bchar ss[][20]={"right?"};

Cchar *ss[6]; ss[1]="right?";

Dchar *ss[]={"right?"};

39)若有定义:char *x="abcdefghi";,以下选项中正确运用了strcpy函数的是(  )。

Achar y[10]; strcpy(y,x[4]);

Bchar y[10]; strcpy(++y,&x[1]);

Cchar y[10],*s; strcpy(s=y+5,x);

Dchar y[10],*s; strcpy(s=y+1,x+1);

40)有以下程序:

int add(int a,int b){return(a+b);}

 main()

 {int k,(*f)(),a=5,b=10;

  f=add;

  ..........

 }

则以下函数调用语句错误的是(  )。

AK=*f(a,b);                             BK=add(a,b);

CK=*f(a,b);                                 Dk=f(a,b);

41)有以下程序:

#include

main(int argc,char  *argv[])

{int i=1,n=0;

 while(i

 printf("%d\n",n);

}

该程序生成的可执行文件名为:proc.exe。若运行时输入命令行:

proc  123 45 67

则程序的输出结果是(  )。

A3                        B5                     C7                          D11

42)有以下程序:

void fun2(char  a,char b) {printf("%c,%c",a,b);}

char a='A',b='B';

void fun1(){ a='C'; b='D';

main()

{fun1();

 printf("%c%c",a,b);

 fun2('E','F');

}

程序的运行结果是(  )。

ACDEF                BABEF              CABCD                  DCDAB

43)有以下程序:

#include

#define N  5

#define M  N+1

#define f(x)   (x*M)

main()

{ int i1,i2;

 i1=f(2);

  i2=f(1+1);

  printf("%d %d\n",i1,i2);

}

程序的运行结果是(  )。

A12 12                 B11 7                 C11 11                    D12  7

44)设有以下语句:

typedef struct TT

{char c,int a[4];}CIN;

则下面叙述中正确的是(  )。

A)可以用TT定义结构体变量            BTTstruct类型的变量

C)可以用CIN定义结构体变量           DCINstruct TT类型的变量

45)有以下结构体说明、变量定义和赋值语句:

 struct STD

 {char name[10];

   int age;

    char ***;

  }s[5],*ps;

  ps=&s[0];

则以下scanf函数调用语句中错误引用结构体变量成员的是(  )。

Ascanf(%s",s[0].name);                   Bscanf(%s",&s[0].age);

Cscanf(%s",&(ps->***));                  Dscanf(%s",ps->age);

(46) 若有以下定义和语句

union data

{int i; char c;float f;}x;

int y;

则以下语句正确的是(  )。

Ax=10.5               Bx.c=101           Cy=x;                     Dprintf("%d\n",x);

47)程序中已构成如下图所示的不带头节点的单向链表结构,指针变量spq均正确定义,并用于指向链表节点,指针变量 s总是作为头指针指向链表的第一个节点。

data   next

data   next

data   next

   a

   b

   c     NULL

s

 

 

 

 


若有以下程序段:

q=s;  s=s->next;  p=s;

while(p->next)   p=p->next;

p->next=q;    q-next=NULL;

该程序段实现的功能是(  )。

A)首节点成为尾节点                     B)尾节点成为首节点

C)删除首节点                                D)删除尾节点

48)若变量已正确定义,则以下语句的输出结果是(  )。

s=32;  s=32;  printf("%d",s);

A-1                      B0                     C1                          D32

49)以下叙述中正确的是(  )。

AC语言中文件是流式文件,因此只能顺序存取数据

B)打开一个已存在的文件进行了写操作后,原有文件中的全部数据必定被覆盖

C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据

D)当对文件的读()操作完成之后,必须先关闭,否则可能导致数据丢失

50)有以下程序:

#include

main()

{FILE *fp;   int i;

char ch[]="abcd",t;

fp=fopen("abc.dat","wb+");

for(i=0;i<4;i++)fwrite(&ch[i],1,1,fp)

fseek(fp,-2L,SEEK_END;

fread(&t,1,1,fp);

fclose(fp);

printf("%c\n",t);

}

程序执行后的输出结果是(  )。

Ad                        Bc                     Cb                          Da

 

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

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

1)下列软件系统结构图的宽度为 1

A

B

D

P

C

E

 

 

 

 

 

 


2 2 的任务是诊断和改正程序中的错误。

3)一个关系表的行称为 3

4)按“先进后出”原则组织数据的数据结构是 4

5)数据结构分为线性结构和非线性结构,带链的队列属于 5

6)设有定义:float x=123.4567;,则执行以下语句后的输出结果是 6

printf("%f\n",(int)(x*100+0.5)/100.0);

7)以下程序运行后的输出结果是 7

main()

{

   int m=011,n=11;

   printf("%d  %d\n",++m,n++);

}

8)以下程序运行后的输出结果是 8

main()

{  int x,a=1,b=2,c=3,d=4;

   x=(a   x=(xx)?x:d;

   printf("%d\n",x);

}

9)有以下程序,若运行时从键盘输入:1811<回车>,则程序输出结果是 9

main()

{  int a,b;

   printf("Enter a,b:");scanf("%d,%d",&a,&b);

   while(a!=b)

   {   while(a>b) a-=b;

       while(b>a) b-=a;

   }

   printf("%3d%3d\n",a,b);

}

10)以下程序的功能是:将输入的正整数按逆序输出。例如,若输入135,则输出531。请填空。

  #include

  main()

  {

    int n,s;

    printf("Enter a number:");  scanf("%d",&n);

    printf("Output: ");

    do

    {

      s=n%10; printf("%d",s);  10 ;}

      while(n!=0);

      printf("\n");

     }

11)以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算:

y1=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

请填空。

#include "math.h"

double fun(double x)  {  return(x*x-2*x+6);  }

main()

{

   double x,y1,y2;

   printf("Enter x:");  scanf("%lf",&x);

   y1=fun( 11 );

   y2=fun( 12 );

   printf("y1=%lf,y2=%lf\n",y1,y2);

 }

12)下面程序的功能是:将NN列二维数组中每一行的元素进行排列,第0行从小到大排序,第1行从大到小排序,第2行从小到大排序,第3行从大到小排序。例如:

A=        则排序后A=

#define  N   4

Void sort (int a[][N])

{int i,j,k,t;

 for (i=0;i

  for(j=0;j

    for(k=13;k

   /*判断下标是否为偶数来确定按升序或降序来排列*/

   if(14?a[i][j]a[i][k])

  {t=a[i][j]

   a[i][j]=a[i][k];

   a[i][k]=t;

  }

 }

void outarr(int a[N][N])

 {...........}

 main()

 {int aa[N][N]={{2,3,4,1}{8,6,5,7}{11,12,10,9}{15,14,16,13}};

  outarr(aa);/*以矩阵的形式输出二维数组*/

  sort(aa);

  outarr(aa);

}

13)下列程序中的函数strcpy2()实现字符串两次复制,即将t所指字符串复制两次到s所指内存空间中,合并形成一个新的字符串。例如,若t所指字符串为efgh,调用strcpy2后,s所指字符串为efghefgh。请填空。

#include

#include

void strcpy2(char *s,char *t)

{ char *p=t;

  while(*s++=*t++); 

s= 15 ;

  while( 16 =*p++);

}

main()

{ char str1[100]="abcd",str2[]="efgh";

  strcpy2(str1 ,str2); printf("%s\n",str1);

}

14)下面程序的运行结果是 17

 #include

 int f(int a[],int n)

 {if(n>1)

   return a[0]+f(a+1,n-1);

  else

   return a[0];

 }

 main()

 {int aa[10]={1,2,3,4,5,6,7,8,9,10},s;

  s=f(aa+2,4);  printf("%d\n",s);

}

15)下面程序由两个源文件t4.ht4.c组成,程序编译运行的结果是 18

t4.h的源程序为:

  #define  N  10

  #define  f2(x) (x*N)

 

t4.c的源程序为:

  #include

  #define  M   8

  #define  f(x) ((x)*M)

  #include "t4.h"

  main()

  {int i,j;

   i=f(1+1);   j=f2(1+1);

   printf("%d%d\n",i,j);

  }

16)下面程序的功能是建立一个有3个节点的单向循环链表,然后求各个节点数值域data中数据的和请填空。

  100

  200

  300

data    next

data    next

p

q

r

data    next

 

 

 

 

 

 


  #include

  #include

  struct NODE{ int data;

              struct NODE *next;

             };

  main()

  {struct NODE *p,*q,*r;

   int sum=0;

   p=(struct NODE*)malloc(sizeof(struct NODE));

   q=(struct NODE*)malloc(sizeof(struct NODE));

   r=(struct NODE*)malloc(sizeof(struct NODE));

   p->data=100;  q->data=200;   r->data=200;

   p->data=q;    q->data=r;     r->data=p;

   sum=p->data+p->next->data+r->next->data 19 ;

   printf("%d\n",sum);

  }

17)有以下程序,其功能是:以二进制“写”方式打开文件d1.dat,写入1100100个整数后关闭文件。再以二进制“读”方式打开文件d1.dat,将这100个整数读入另一个数组b中,并打印输出,请填空。

 #include

 main()

{ FILE *fp;

  int i,a[100],b[100];

  fp=fopen("d1.dat","wb");

  for(i=0;i<100;i++) a[i]=i+1;

  fwrite(a,sizeof(int),100,fp);

  fclose(fp);

  fp=fopen("d1.dat",20);

  fread(b,sizeof(int),100,fp);

  fclose(fp);

  for(i=0;i<100;i++) printf("%d\n",b[i]);

}

9月全国计算机等级考试二级笔试试题参考答案C语言)

一、选择题((1)~(40)题每题1分,(41)~(50)题每题2分,共60分)

1D          2A          3C          4B          5D

6C          7D          8B          9B          10A

11A        12D        13D        14A        15D

16C        17C        18B        19A        20C

21D        22A        23C        24B        25C

26D        27B        28C        29A        30C

31A        32D        33B        34A        35D

36B        37B        38A        39D     40C

41C        42A        43B        44C        45D

46B        47A        48B        49D        50C

 

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

1)【13

2)【2】程序调试

3)【3】记录

4)【4】栈

5)【5】线性结构

6)【6123.460000

7)【710 11

8)【81

9)【91  1

10)【10n/=10n=n/10;

11)【11x+8                           12sin(x)

12)【13j+1                           14i%2i%2==1

1315s-1                           16*s++

14)【1718

15)【1816 11

16)【19->next->data             20"rb"

 

 

 

阅读(2085) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~