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

下列叙述中正确的是(    )

A

算法的复杂度是指算法所处理的数据量

B

算法的复杂度是指算法程序中指令的数量

C

算法的复杂度是指算法控制结构的复杂程度

D

算法的复杂度包括时间复杂度与空间复杂度

2. 单选题

设二叉树的前序序列为ABDEGHCFIJ,中序序列为DBGEHACIFJ。则按层次输出(从上到下,同一层从左到右)的序列为(    )

A

ABCDEFGHIJ

B

DGHEBIJFCA

C

JIHGFEDCBA

D

GHIJDEFBCA

3. 单选题

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

A

0

B

1

C

48

D

49

4. 单选题

设顺序表的长度为40,对该表进行冒泡排序。在最坏情况下需要的比较次数为(    )

A

780

B

820

C

40

D

41

5. 单选题

下面不属于软件需求分析阶段任务的是(    )

A

需求配置

B

需求获取

C

需求分析

D

需求评审

6. 单选题

下列数据流图(DFD)构造规则中正确的是(    )

A

“数据存储”间应有数据流

B

“数据流”可不带有数据流名

C

父图子图是指任意上下层的两个数据流图

D

子图的输入输出数据流与父图中相关加工的输入输出数据流必须一致

7. 单选题

不属于对象构成成份的是(    )

A

规则

B

属性

C

标识

D

方法(或操作)

8. 单选题

规范化主要为克服数据库逻辑结构中的插入异常,删除异常以及(    )

A

数据丢失的问题

B

冗余度大的问题

C

数据不一致的问题

D

结构不合理的问题

9. 单选题

在数据库中,产生数据不一致的根本原因是(    )

A

数据冗余

B

没有严格保护数据

C

未对数据进行完整性控制

D

数据存储量太大

10. 单选题

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

A

C语言比其他语言高级

B

C语言可以不用编译就能被计算机识别执行

C

C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D

C语言出现的最晚,具有其他语言的一切优点

11. 单选题

C语言规定,在一个C程序中,main()函数的位置()。

A

必须在系统调用的库函数之后

B

必须在程序的开始

C

必须在程序的最后

D

可以在任意位置

12. 单选题

已知int a=6;则执行a+=a-=a*a;语句后,a的值为()。

A

36

B

0

C

-24

D

-60

13. 单选题

设有课程关系模式R(C#,Cn,T,TA)(其中,C#为课程号,Cn为课程名,T为教师名,TA为教师地址),并且假定不同课程号可以有相同的课程名,每门课程只有一位任课教师,但每位教师可以有多门课程。关系R范式最高达到(    )

A

1NF

B

2NF

C

3NF

D

BCNF

14. 单选题

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

A

c语句必须以分号结束

B

复合语句在语法上被看作一条语句

C

空语句出现在任何位置都不会影响程序运行

D

赋值表达式末尾加分号就构成赋值语句

15. 单选题

若有定义:int a=7,float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是(    )

A

2.500000

B

2.750000

C

3.500000

D

0.000000

16. 单选题

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

A

只能是整数0或1

B

只能是整数0或非0整数

C

可以是结构体类型的数据

D

可以是任意合法的表达式

17. 单选题

若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是(    )

A

++i;

B

n1=(n2/(n3=2));

C

k=i=j;

D

a=b+c=2;

18. 单选题

若有说明int a[3][4];则数组元素的非法引用是()。

A

a[0][2*1]

B

a[1][3]

C

a[4-2][0]

D

a[0][4]

19. 单选题

以下程序的运行结果是()。

main()

{

    int a=-5,b=1,c=1;

    int x=0,y=2,z=0;

    if(c>0)

    x=x+y;

    if(a<=0)

    {

        if(b>0)

        if(c<=0)

        y=x-y;

    }

    else if(c>0)

    y=x-y;

    else z=y;

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

 }

A

2,2,0

B

2,2,2

C

0,2,0

D

2,0,2

20. 单选题

请阅读以下程序;

#include<stdio.h>

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=2, b=1

B

a=1, b=0

C

a=1, b=1

D

a=2, b=2

21. 单选题

#include<stdio.h>

main()

{

    int a[]={1,2,3,4},y,*p=&a[3];

    --p;y=*p;

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

 }

运行结果为:

A

y=0

B

y=1

C

y=2

D

y=3

22. 单选题

下面的for语句的循环次数为()。

for(x=1,y=0;(y!=19)&&(x<6);x++);

A

是无限循环

B

循环次数不定

C

最多执行6次

D

最多执行5次

23. 单选题

#include<stdio.h>

main()

{

    int a=0,b=1,c=2;

    if(++a>0||++b>0)

    ++c;

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

 }

输出结果:

A

0,1,2

B

1,2,3

C

1,1,3

D

1,2,2

24. 单选题

C语言规定,函数返回值的类型是()。

A

由调用该函数时的主调函数类型所决定

B

由return语句中的表达式类型所决定

C

由调用该函数时系统临时决定

D

由定义该函数时所指定的数值类型决定

25. 单选题

执行下列程序时输入456<空格>789<空格>123<回车>,输出结果是

#include<stdio.h>

main()

{

    char m[80];

    int c,i;

    scanf("%c",&c);

    scanf("%d",&i);

    scanf("%s",&m);

    printf("%c,%d,%s\n",c,i,m);

}

A

456,789,123

B

4,789,123

C

4,56,789,123

D

4,56,789

26. 单选题

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

{

    int k;

    for(k=0;k<c*d;k++)

    {

        *b=c+d;

        b++;

    }

}

则调用此函数的正确写法是(假设变量a的说明为int a[10])( )。

A

fun(*a,6,14);

B

fun(&a,6,8);

C

fun(a,8,4)

D

fun((int)a,8,6)

27. 单选题

设Y为整型变量,A=1,A的地址为EF01;B=2,B的地址为EF02;执行语句B=&A;Y=&b;后Y的值()。

A

1

B

2

C

EF01

D

EF02

28. 单选题

#include<stdio.h>

main()

{

    int c;

    while(c=getchar()!='\n')

    {

        switch(c-'3')

        {

            case 0:

            case 1:putchar(c+4);

            case 2:putchar(c+4);break;

            case 3:putchar(c+3);

            case 4:putchar(c+3);break;       

        }

    }

    printf("\n");

 }

从第一列开始输入数据(<CR>代表一个回车符):3845<CR>,则程序输出结果为()。

A

77889

B

77868

C

776810

D

77886610

29. 单选题

#include<stdio.h>

main()

{

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

    int i,s=0;

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

    s+=aa[i][2];

    printf("%d",s);

 }

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

A

10

B

19

C

26

D

20

30. 单选题

以下语句定义正确的是()。

A

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

B

float a[3][]={{1,2},{2,3},{3,1}};

C

long a[2][3]={{1},{1,2},{1,2,3},{0,0}};

D

double a[][3]={8};

31. 单选题

下列一维数组说明中,不正确的是()。

A

int N; scanf("%d",&N); int b[N];

B

float a[]={1,6,6,0,2};

C

#define S 10

D

int a[S+5];

32. 单选题

下面函数的功能是()。

sss(s,t)

char *s,*t;

{

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

    return (*s-*t);

}

A

将字符串s复制到字符串t中

B

比较两个字符串的大小

C

求字符串的长度

D

将字符串s接续到字符串t中

33. 单选题

若已定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;  其中0<=i<=9,则对a数组元素不正确的引用是()。

A

a[p-a]

B

*(&a[i])

C

p[i]

D

a[10]

34. 单选题

C语言中,凡未指定存储类别的局部变量的隐含存储类别是()。

A

自动(auto)

B

静态(static)

C

外部(extern)

D

寄存器(register)

35. 单选题

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

A

预处理命令行都必须以#号开始,结尾不加分号

B

在程序中凡是以#号开始的语句行都是预处理命令行

C

c程序在执行过程中对预处理命令进行处理

D

预处理命令可以放在程序中的任何位置

36. 单选题

#include<stdio.h>

#define F(x) 2.84+x

#define w(y) printf("%d",(int)(y))

#define P(y) w(y)

main()

{

    int x=2;

    P(F(5)*x);

}

输出结果:( )

A

12

B

13

C

14

D

16

37. 单选题

设有下面的定义:

struct st

{

    int a;

    float b;

}d;

int *p;

要使指向结构变量a中的a成员,正确的赋值语句是()。

A

*p=d.a;

B

p=&a;

C

p=d.a;

D

p=&d.a;

38. 单选题

交换两个变量的值,不允许用临时变量,应该使用下列(    )位运算符。

A

&

B

^

C

||

D

~

39. 单选题

如果需要打开一个已经存在的非空文件"FILE"并进行修改,正确的语句是()。

A

fp=fopen("FILE","r");

B

fp=fopen("FILE","a+");

C

fp=fopen("FILE","w+");

D

fp=fopen("FILE","r+");

40. 单选题

#include<stdio.h>

#include"string.h"

void fun(char *s[],int n)

{

    char *t;int i,j;

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

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

    if(strlen(s[i])>strlen(s[j]))

    {

        t=s[i];s[i]=s[j];s[j]=t;

    }

}

main()

{

    char *ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};

    fun(ss,5);

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

 }

程序运行结果:(    )

A

xy,aaaacc

B

aaaacc,xy

C

bcc,aabcc

D

aabcc,bcc

41. 填空题

给定程序BLANK1.C中,函数fun的功能是在数组中找出两科成绩之和最高的学生并返回其在数组中的下标。对所给函数int fun(STU*d,int n),主函数传给形参d的是学生数组名,而传给形参n的是该数组中学生的个数。


例如,若学生数组数据为:

2016500301李清水83 92

2016500336 刘世才85 94

2016500371王子晨88 88

则调用该函数后,程序输出为:2016500336刘世才85 94

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include<stdio.h>

typedef struct stu

{

    char ID[30];

    char name[20];

    int score[2];

} STU;

int fun(STU *d,int n)

{

    int i,m;

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

    ______(1)______;

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

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

        if(d[i].score[0]+d[i].score[1]>________(2)________)

            m=i;

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

    ______(3)______;

}

 

void main()

{

    STU a[10]={ "2016500301","李清水",83,92,"2016500336","刘世才",85,94,"2016500371","王子晨",88,88};

    int i,n=3;

    i=fun(a,n);

    printf("%30s%20s%4d%4d",a[i].ID,a[i].name,a[i].score[0],a[i].score[1]);

    printf("\n");

}

42. 填空题

给定程序MODI1.C中,函数void list(MYDATA *h)的功能是:列出带头结点单链表中所有没有删除标记的数据。调用这个函数时,传给形参h的是指向单链表头结点的指针。


例如,当10个结点的数据为1,2,3,4,5,6,7,8,9,10时,输出将是:3 4 6 7 8 9 10

其中,各个数据所对应的删除标记是由随机数产生的。

请改正函数list中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数和creat函数,不得增行或删行

#include<stdio.h>

#include<stdlib.h>

typedef struct dat

{

    char deleted;  //是否删除:0-未删除,1-删除

    int data;

    struct dat* next;

} MYDATA;

void list(MYDATA *h)

{

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

    MYDATA  p;

    p=h->next;

    while(p!=NULL)

    {

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

        if(p->data==0)

        {

            printf("%d  ",p->data);

        }

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

        p=next;

    }

}

 

void creat(MYDATA *h,int *d,int n)

{

    MYDATA *p, *q;

    int i=0,del;

    q=h;

    while(n>0)

    {

        p=( MYDATA *)malloc(sizeof(MYDATA));

        del=rand()%2;

        p->data=d[i];

        p->deleted=del;

        p->next=q->next;

        q->next=p;

        q=p;

        n--;i++;

    }

}

void main()

{

    MYDATA *head;

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

    head=(MYDATA *)malloc(sizeof(MYDATA));

    head->next=NULL;

    creat(head,dd,n);

    list(head);

}

43. 填空题

请编写函数void fun(int *dp,int n,int upordown),其功能是,找出dp所指数组中的最小或最大值,并与其第1个元素交换。形参n为元素的个数,形参upordown为查找标志:值为0时找最小值;值为1时找最大值。


注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。


#include <stdio.h>

#include <stdlib.h>

#define N 10

#pragma warning (disable:4996)

void NONO(FILE *fp, int pd[], int n);

 

void fun (int *dp,int n,int upordown)

{

    int temp=0;

    int i=0;

    temp=*dp;

    if(upordown==0)

   {

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

    {

        if(dp[i]<temp)

        {

            dp[0]=dp[i];

            dp[i]=temp;

            temp=dp[0];

        }

      }

    }

    else if(/******found******/)

   {

    for(/******found******/)

    {

        if(/******found******/)

        {

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

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

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

        }

    }

}

*dp=temp;

 

}

 

void display(int pd[],int n)

{

    int i;

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

        printf("%4d",pd[i]);

    printf("\n");

}

void main()

{

    int data[N],i,n=N;

    FILE *out ;

 

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

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

        data[i]=rand()%90+10;

    for(i=0;i<N-1;i++)

        fun(data+i,n-i,0);

    display(data,n);

    NONO(out, data, n);

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

        data[i]=rand()%90+10;

    for(i=0;i<N-1;i++)

        fun(data+i,n-i,1);

    display(data,n);

    NONO(out, data, n);

    fclose(out);

}

void NONO(FILE *fp, int pd[], int n)

{

    int i;

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

        fprintf(fp, "%4d", pd[i]);

    fprintf(fp, "\n");

 

}

试题目录
单选题
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