202103 全国计算机等级考试真题(C语言二级) 建议答题时长:60min
1. 单选题

算法空间复杂度的度量方法是(    )

A

算法程序的长度

B

算法所处理的数据量

C

执行算法所需要的工作单元

D

执行算法所需要的存储空间

2. 单选题

下列叙述正确的是(    )

A

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

B

c程序中所有函数之间都可以相互调用

C

每个c程序文件中都必须要有一个main函数

D

在c程序的函数中不能定义另一个函数

3. 单选题

下面选项中关于文件指针概念的叙述正确的是(    )

A

文件指针就是文件位置指针,表示当前读写数据的位置

B

文件指针指向文件在计算机中的存储位置

C

文件指针是程序中用FILE定义的指针变量

D

把文件指针传给fscanf函数,就可以向文本文件中写入任意的字符

4. 单选题

下列选项中不属于结构化程序设计原则的是(    )

A

可封装

B

自顶向下

C

模块化

D

逐步求精

5. 单选题

若有以下程序

#include<stdio.h>

main()

{

    int a=1,b=2,c=3,d=4,r=0;

    if(a!=1);

    else r=1;

    if(b==2) r+=2;

    else;

    if(c!=3) r+=3;

    else;

    if(d==4) r+=4;

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

 }

则程序的输出结果是(    )

A

10

B

6

C

7

D

3

6. 单选题

以下不能用于描述算法的是(    )

A

程序语句

B

E-R图

C

伪代码和流程图

D

文字叙述

7. 单选题

某带链栈初始状态为top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=10,bottom=20。该栈中的元素个数为(    )

A

不确定

B

10

C

1

D

0

8. 单选题

有以下程序

#include<stdio.h>

main()

{

    int a=0,b=0,c=0,d=0;

    if(a=1) b=1;

    c=2;

    else d=3;

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

 }

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

A

0,0,0,3

B

1,1,2,0

C

编译有错

D

0,1,2,0

9. 单选题

以下数组定义中错误的是(    )

A

int x[] [3]={0};

B

int x[2][3]={{1,2},{3,4},{5,6}};

C

int x[][3]={{1,2,3},{4,5,6}};

D

int x[2][3]={1,2,3,4,5,6};

10. 单选题

若有以下程序

#include<stdio.h>

main()

{

    int c;

    c=13|5;

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

 }

则程序的输出结果是(    )

A

15

B

18

C

13

D

5

11. 单选题

以下叙述中正确的是(    )

A

程序必须包含所有三种基本结构才能成为算法

B

如果算法非常复杂,则需要使用三种基本结构之外的语句结构,才能表达准确

C

只有简单的算法才能在有限的操作步骤之后结束

D

我们所写的每条c语句,经过编译最终将转换成二进制的机器指令

12. 单选题

以下选项中,没有编译错误的是(    )

A

char str3[]={'d', 'e ','b','u','g','\0'};

B

char str1[5]="pass",str2[6]; str2=str1

C

char name[10];name="china";

D

char str4[];str4="hello world";

13. 单选题

设顺序表的长度为n,下列算法中,最坏情况下比较次数等于n(n-1)/2的是(    )

A

快速排序

B

堆排序

C

顺序查找

D

寻找最大项

14. 单选题

软件详细设计产生的图如下图所示,则该图是(    )

A

N-S图

B

PAD图

C

程序流程图

D

E-R

15. 单选题

下列关于数据库特点的说法中正确的是(    )

A

数据能共享且独立性高

B

数据能共享但数据冗余很高

C

能保证数据完整性但降低了安全性

D

数据独立性高但不能实现共享

16. 单选题

设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a,&c2);

语句变量a1,a2赋值为数值10,20,为变量c1,c2赋字符X,Y。以下所示的输入形式中正确的是(    )

A

10 X20 Y

B

10 X 20 Y

C

10X 20Y

D

10 X 20 Y

17. 单选题

设一颗度为3的树,其中度为2,1,0的结点数分别为3,1,6.该树种度为3的结点数为(    )

A

1

B

2

C

3

D

不可能有这样的树

18. 单选题

以下选项中与if(a==1) a=b;else a++;语句功能不同的switch语句是(    )

A

switch(a==1) {case 0: a=b;break; case 1:a++;}

B

switch(a) {case 1: a=b;break; default:a++;}

C

switch(a) {default:a++;break; case 1: a=b;}

D

switch(a==1) {case 1: a=b;break; case 0:a++;}

19. 单选题

对长度为10的线性表进行冒泡排序,最坏的情况下需要比较的次数为(    )

A

9

B

10

C

45

D

90

20. 单选题

若a是数值型,则逻辑表达式(a==1)||(a!=1)的值为(    )

A

0

B

2

C

1

D

不知道a的值,不能确定

21. 单选题

在以下给出的表达式中,与while(E)中的(E)不等价的表达式是(    )

A

(E>0||E<0)

B

(!E==0)

C

(E!=0)

D

(E==9)

22. 单选题

#include <stdio.h>

int fun(int(*s)[4],int n,int k)

{

  int m,i;

  m=s[0][k];

  for(i=l;i<n;i++)

    if(s[i][k]>m) m=s[i][k];

  return m;

}

main()

{

  int a[4][4]={1,2,3,4),{11,12,13,14},{21,22,23,24},{31,32,33,34};

  printf("%d\n",fun(a,4,0));

}

程序的运行结果是(    )

A

31

B

34

C

4

D

32

23. 单选题

某二叉树的中序序列为DCBAEFG,后序序列为DCBGFEA,则该二叉树的深度为(    )

A

5

B

4

C

3

D

2

24. 单选题

设一棵树的度为3,其中没有度为2的结点,且叶子结点数为6。该树中度为3的结点数为(    )

A

1

B

2

C

3

D

不可能有这样的树

25. 单选题

#include main()

{

  int x=1,y=0,a=0,b=0;

  switch(x){

    case 1:switch(y)

      {case 0:a++;break;case 1:b++;break;}

    case 2:a++;b++;break;}

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

}

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

A

a=1,b=1

B

a=1,b=0

C

a=2,b=1

D

a=2,b=2

26. 单选题

void f(int b[])

{

   int i;

   for(i=2;i<6;i++)

   b[i]*=2}

main()

{

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

  f(a);

  for(i=0;i<10,i++)  printf("%d,",a[i]);

}

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

A

1,2,3,4,5,6,7,8,9,10,

B

1,2,3,4,10,12,14,16,9,10,

C

1,2,6,8,10,12,7,8,9,10,

D

1,2,6,8,10,12,14,16,9,10,

27. 单选题

设循环队列为Q(1:m),初始状态为front=rear=m。现经过一系列的入队与退队运算后,front=rear=1,则该循环队列中的元素个数为(    )

A

1

B

2

C

m-1

D

0或m

28. 单选题

#include <stdio.h>

#include <string.h>

void main()

{

  char str[20]={"One*World","One*Dream!"};

  *p=str[1];

  printf("%d,",strlen(p));

  printf("%s\n",p);

}

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

A

9,One*Dream!

B

10,One*Dream!

C

9,One*World

D

10,One*World

29. 单选题

以下能正确定义字符串的语句是(    )

A

char str="\×43";

B

char str[]="\0";

C

char str=";

D

char str[]={'\064'};

30. 单选题

有以下程序段

struct st{int x;int *y;} *pt;

int a[]={1,2},b[]={3,4};

struct st c[2]={10,a,20,b};

pt=c;

以下选项中表达式的值为11的是(    )

A

pt->x

B

*pt->y

C

++pt->x

D

(pt++)->x

31. 单选题

以下叙述中正确的是(    )

A

当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键)前,可以任意修改

B

花括号对只能用来表示函数的开头和结尾,不能用于其他目的

C

空语句就是指程序中的空行

D

复合语句在语法上包含多条语句,其中不能定义局部变量

32. 单选题

有以下程序

#include <stdio.h>

int fun(char*s){

char*p=s;

while(*p!=0)p++;

return(p-s);}

main() {printf("%d\n",fun("goodbey!"));}

程序的输出结果是(    )

A

6

B

8

C

0

D

7

33. 单选题

设循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的操作后,front-1=rear。为了在该队列中寻找值最大的元素,在最坏情况下需要的比较次数为(    )

A

0

B

1

C

48

D

49

34. 单选题

结构化程序设计原则强调的是(    )

A

自顶向下

B

可封装性

C

可复用性

D

可恢复性

35. 单选题

以下叙述中正确的是(    )

A

C语言程序总是从最前面的函数开始执行

B

C语言程序总是从main函数开始执行

C

C语言程序中main函数必须放在程序的开始位置

D

C语言程序所调用的函数必须放在main函数的前面

36. 单选题

以下叙述中正确的是(    )

A

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

B

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

C

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

D

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

×该题未答

37. 单选题

下列叙述中正确的是(    )

A

对数据进行压缩存储会降低算法的空间复杂度

B

算法的优化主要通过程序的编制技巧来实现

C

算法的复杂度与问题的规模无关

D

数值型算法只需考虑计算结果的可靠性

38. 单选题

下面属于整数类的实例是(    )

A

0X518

B

0.518

C

"-518"

D

518E-2

39. 单选题

要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是(    )

A

while(ch=getchar()='N')printf("%c",ch);

B

while(ch=getchar()=="N")printf("%c",ch);

C

while(ch=getchar())!='N')printf("%c",ch);

D

whilet(ch=getchar())=='N')printf("%c",ch);

40. 单选题

若有以下程序

main()

{

  int a=-2,b=0;

  while(a++)

      ++b;

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

  }

则程序的输出结果是(    )

A

0,2

B

1,2

C

1,3

D

2,3

41. 填空题

函数fun()的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如,主函数中给出了4名学生的数据,则程序运行的结果为:


学号:N1002    学号:N1006

共有2位学生有不及格科目

#include <stdio.h>

#include <stdlib.h>

typedef struct

{

    char num[8];

    double score[2];

/**********found**********/

} __(1)__;

int fun(STU std[ ], int n)

    int i,k=0;

    for(i=0; i<n;i++)

    {

        /**********found**********/

        if(std[i].score[0]<60 __(2)__ std[i].score[1]<60)

        {

            k++;

            printf("学号:%s ",std[i].num);

        }

    }      

    /**********found**********/

    return __(3)__;

}

main()

{

    STU std[4]={"N1001",76.5,82.0,"N1002",53.5,73.0, 

                        "N1005",80.5,66.0,"N1006",81.0,56.0};

    printf("\n共有%d位学生有不及格科目\n", fun(std,4));

    system("pause");

}

42. 填空题

函数fun()的功能是:判断整数n是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数"。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完数。如果是完数,函数返回值为1,否则函数返回值为0。


数组a中存放的是找到的因子,变量k中存放的是因子的个数。请改正函数fun中指定部位的错误,使它能得出正确的结果。


注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include <stdio.h>

#include <stdlib.h>

int fun(int n, int a[], int *k)

{

    int m=0, i, t;

    t=n;

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

    {

        if(n%i==0)

        {

            a[m]=i;

            m++;

            t=t-i;

        }

    }

    /**********found**********/

    k=m;

    /**********found**********/

    if(t=0)

    {

        return 1;

    }

    else 

    {

        return 0; 

    }

}

main()

{

    int n, a[10], flag, i, k;

    printf("请输入一个整数:");  

    scanf("%d",&n);

    flag=fun(n,a,&k);

    if(flag)

    {

        printf("%d是完数,其因子是:",n);

        for(i=0;i<k;i++) 

        {

            printf(" %d ",a[i]);

        }

        printf("\n");

    }

    else

    {

        printf("%d不是完数\n",n);

    }

    system("pause");

}

43. 填空题

请编写函数fun(),其功能是:在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。


注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括中的标号处填入所编写的若干语句。

#include <stdio.h>

#include <stdlib.h>

void NONO();

void fun(int *a,int *b,int *c,int *d)

{

    int t;

    if(1)

    {

      2;3;4;

    }

    if(5)

    {

      6;7;8;

    }

    if(9)

        {

             10;11;12;

        }

        if(13)

        {

             14;15;16;

        }

        if(17)

        {

             18;19;20;

        }

        if(21)

        {

             22;23;24;

        }

     

}

main()

{

    int a, b, c, d;

    printf("请输入4个整数:");

    scanf("%d %d %d %d",&a,&b,&c,&d);

    printf("原始顺序:%d,%d,%d,%d\n",a,b,c,d);

    fun(&a,&b,&c,&d);

    printf("处理后顺序:%d,%d,%d,%d\n",a,b,c,d);

    NONO();

}

void NONO()

{/*本函数用于打开文件,输入数据,

 调用函数,输出数据,关闭文件。*/

    FILE *rf,*wf;

    int i, a, b, c, d;

    rf=fopen("in.dat","r");

    wf=fopen("out.dat","w");

    for(i=0; i<8; i++)

    {

        fscanf(rf,"%d %d %d %d",&a,&b,&c,&d);

        fun(&a,&b,&c,&d);

        fprintf(wf,"a=%d,d=%d\n",a,d);

    }

    fclose(rf);

    fclose(wf);

    system("pause");

}

试题目录
单选题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
填空题
41 42 43
赣ICP备20007335号-2