Dotcpp  >  试卷列表  >  2021年9月全国计算机等级考试真题(二级C语言)

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


第1题

下列叙述中正确的是

共 1 分 

第2题

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

共 1 分 

第3题

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

共 1 分 

第4题

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

共 1 分 

第5题

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

共 1 分 

第6题

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

共 1 分 

第7题

不属于对象构成成份的是

共 1 分 

第8题

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

共 1 分 

第9题

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

共 1 分 

第10题

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

共 1 分 

第11题

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

共 1 分 

第12题

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

共 1 分 

第13题

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

共 1 分 

第14题

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

共 1 分 

第15题

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

共 1 分 

第16题

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

共 1 分 

第17题

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

共 1 分 

第18题

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

共 1 分 

第19题

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
 }


共 1 分 

第20题

请阅读以下程序;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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);
 }

输出结果为:

共 1 分 

第21题

1
2
3
4
5
6
7
#include<stdio.h>
main()
{
    int a[]={1,2,3,4},y,*p=&a[3];
    --p;y=*p;
    printf("y=%d\n",y);
 }

运行结果为:

共 1 分 

第22题

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

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

共 1 分 

第23题

1
2
3
4
5
6
7
8
#include<stdio.h>
main()
{
    int a=0,b=1,c=2;
    if(++a>0||++b>0)
    ++c;
    printf("%d,%d,%d",a,b,c);
 }

输出结果:

共 1 分 

第24题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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>,则程序输出结果为()。

共 1 分 

第25题

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

共 1 分 

第26题

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

1
2
3
4
5
6
7
8
9
10
#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);
 }


共 1 分 

第27题


1
2
3
4
5
6
7
8
9
fun(int *b,int c,int d)
{
    int k;
    for(k=0;k<c*d;k++)
    {
        *b=c+d;
        b++;
    }
}

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

共 1 分 

第28题

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

共 1 分 

第29题

1
2
3
4
5
6
7
8
9
#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);
 }

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

共 1 分 

第30题

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

共 1 分 

第31题

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

共 1 分 

第32题

下面函数的功能是()。

1
2
3
4
5
6
sss(s,t)
char *s,*t;
{
    while((*s)&&(*t)&&(*t++==*s++));
    return (*s-*t);
}


共 1 分 

第33题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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]);
 }

程序运行结果:

共 1 分 

第34题

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

共 1 分 

第35题

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

共 1 分 

第36题

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

共 1 分 

第37题

1
2
3
4
5
6
7
8
9
#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);
}

输出结果:

共 1 分 

第38题

设有下面的定义:

1
2
3
4
5
6
struct st
{
    int a;
    float b;
}d;
int *p;

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

共 1 分 

第39题

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

共 1 分 

第40题

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

共 1 分 

第41题

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

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

2016500301李清水83 92

2016500336 刘世才85 94

2016500371王子晨88 88

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

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

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

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
#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");
}


共 18 分 

第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函数,不得增行或删行

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
44
45
46
47
48
49
50
51
#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);
}
共 18 分 

第43题

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

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

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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");
 
}


共 24 分