您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第十二章 全国计算机等级考试(二级C语言) > 【12.2 第一套笔试题】

12.2 第一套笔试题

 

第一套笔试题

一、选择题((1)~(40)每题1分,(41)~(50)每题2分,共60分)下列各题ABCD四个选项中,只有一个选项是正确的,将正确选项涂在答题卡的相应位置上,答在试卷上不得分。

1)栈和队列的共同特点是     

A.都是先进先出                                           B.都是先进后出

C.只允许在端点处插入和删除元素               D.没有共同点

2)已知如下图所示的二叉树的后序遍历序列是dabec,中序遍历序列是debac,则它的前序遍历序列是     

Aacbed                                                               Bdecab                           

Cdeabc                                                               Dcedba

3)链表不具有的特点是     

A.不必事先估计存储空间                             B.可随机访问任意一个元素

C.插入、删除不需要移动元素                      D.所需空间与线性表长度成正比

4)结构化程序设计的三种结构是     

A.顺序结构、选择结构、转移结构       

B.分支结构、等价结构、循环结构

C.多分支结构、赋值结构、等价结构    

D.顺序结构、选择结构、循环结构

5)为了提高测试的效率,应该     

A.随机选取测试数据       

B.选取一切可能的输入数据作为测试数据

C.在完成编码以后,制定软件的测试计划           

D.集中处理那些错误群集的程序

6)算法的时间复杂度是指     

A.执行算法程序所需要的时间                  B.算法程序的长度

C.算法执行过程中所需要的基本运算次数     D.算法程序中的指令条数

7)软件生命周期中,所花费用最多的阶段是     

A.详细设计              B.软件编码               C.软件测试        D.软件维护

8)数据库管理系统DBMS中,用来定义模式、内模式和外模式的语言为     

AC                           BBasic                      CDDL               DDML

9)以下有关数据库的描述中,正确的是     

A.数据库是一个DBF文件                            B.数据库是一个关系

C.数据库是一个结构化的数据集合              D.数据库是一组文件

10)以下有关数据库的描述中,正确的是     

A.数据处理是将信息转化为数据的过程

B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变

C.关系中的每一列称为元组,一个元组就是一个字段

D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字

11)以下叙述中,正确的是     

A构成C语言程序的基本单位是函数

B可以在一个函数中定义另一个函数

Cmain( )函数必须放在其他函数之前

D所有被调用的函数一定要在调用之前进行定义

12)以下选项中,合法的实型常数是     

A5E2.0                   BE-3                        C.2E0                D1.3E

13)以下选项中,合法的用户标识符是     

Along                            B_2Test                    C3Dmax            DA.dat

14)已知大写字母AASCII码值是65,小写字母aASCII码是97,则用八进制表示的字符常量‘\101’     

A字符A                 B字符a                    C字符e             D非法的常量

15)以下选项中,非法的赋值语句是     

An=(i=2,++i);         Bj++;                       C++(i+1);          Dx=j>0;

16)设ab均为double型变量,且a=5.5b=2.5,则表达式(int)a+b/b的值是     

A6.500000                                                        B6                           

C5.500000                                                        D6.000000

17)已知ijk均为int型变量,若从键盘上输入123<CR>,使i的值为1j的值为2k的值为3,则以下选项中,正确的输入语句是     

Ascanf("%2d%2d%2d",&i,&j,&k);

Bscanf("%d  %d  %d",&i,&j,&k);

Cscanf("%d,%d,%d",&i,&j,&k);

Dscanf("i=%d,j=%d,k=%d",&i,&j,&k);

18)与数学式对应的C语言表达式是     

A3*x^n(2*x-1)                                                 B3*x**n(2*x-1)

C3*pow(x,n)*(1/(2*x-1))                                   D3*pow(n,x)/(2*x-1)

19)设有定义语句long x=-123456L;,则以下能够正确输出变量x值的语句是    

Aprintf("x=%d\n",x);                                  Bprintf("x=%1d\n",x);

Cprintf("x=%8dL\n",x);                              Dprintf("x=%LD\n",x);

20)以下程序的输出结果是    

main()

{

    int k=2,i=2,m;

    m=(k+=i*=k);

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

}

A86                    B83                      C64               D74

21)若已有定义语句int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是     

A6                          B0                            C2                     D1

22)利用函数,以下程序片段中,不能根据x值正确计算出y值的是

     

Aif(x>0) y=1;                           By=0;

           else if(x==0) y=0;                     if(x>0) y=1;

             else y=-1;                           else if(x<0) y=-1;

Cy=0;                                Dif(x>=0)

           if(x>=0);                              if(x>0) y=1;

             if(x>0) y=1;                         else y=0;

           else y=-1;                             else y=-1;

23)以下选项中,与k=n++等价的表达式是      

Ak=n,n=n+1            Bn=n+1,k=n              Ck=++n             Dk+=n+1

24)以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序如下:

main()

{

    int n,k;

    float score,sum,ave;

    sum=0.0;

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

    {  

       for(k=1;k<=4;k++)

       {

           scanf("%f",&score);

           sum+=score;

       }

       ave=sum/4.0;

       printf("NO%d:%f\n",n,ave);

    }

}

上述程序运行后,结果不正确。调试过程中,发现有一条语句出现在程序中的位置不正确,这条语句是     

Asum=0.0;                                                        Bsum+=score;

Cave=sun/4.0;                                            Dprintf("NO%d:%f\n",n,ave);

25)有以下程序片段:

int n=0,p;

do

{

    scanf("%d",&p);

    n++;

} while(p!=12345&&n<3);

此处do...while循环的结束条件是      

AP的值不等于12345,并且n的值小于3

BP的值等于12345,并且n的值大于等于3

CP的值不等于12345,或者n的值小于3

DP的值等于12345,或者n的值大于等于3

26)以下程序的输出结果是      

main()

{

    int a=15,b=21,m=0;

    switch(a%3)

    {

        case 0: m++; break;

        case 1: m++;

                switch(b%2)

                {

                    default: m++;

                    case 0: m++; break;

                }

    }

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

}

A1                          B2                            C3                     D4

27C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是     

Avoid                            Bint                          Cfloat                Ddouble

28)若有定义语句int n=2,*p=&n,*q=p;,则以下非法的赋值语句是     

Ap=q;                    B*p=*q;                   Cn=*q;                     Dp=n;

29)以下程序的输出结果是      

float fun(int x,int y)

{

    return (x+y);

}

main()

{

    int a=2,b=5,c=8;

    printf("%3.0f\n",fun fun(a+c,b),a-c));

}

A编译出错                    B9                     C21                   D9.0

30)以下程序的输出结果是      

void fun(char *c,int d)

{

    *c=*c+1; d=d+1;

    printf("%c,%c,",*c,d);

}

main()

{

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

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

}

AB,a,B,a                 Ba,B,a,B                   CA,b,A,b           Db,B,A,b

31)以下程序中,函数sort( )的功能是对a所指数组中的数据进行由大到小的排序。

void sort(int a[],int n)

{

    int  i,j,t;

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

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

            if(a[i]<a[j])  { t=a[i]; a[i]=a[j]; a[j]=t; }

}

main()

{

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

    sort(&aa[3],5);

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

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

    printf("\n");

}

则以上程序的输出结果是     

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

C1,2,3,8,7.6.5.4.9,10                                         D1,2,10,9,8,7,6,5,4,3

32)以下程序的输出结果是      

int f(int  n)

{

    if(n==1) return 1;

    else return f(n-1)+1;

}

main()

{

    int i,j=0;

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

        j+=f(i);

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

}

A4                          B3                            C2                     D1

33)以下程序的输出结果是      

main()

{

    char a[]={'a','b','c','d','e','f','g','h','\0'};

    int  i,j;

    i=sizeof(a);

    j=strlen(a);

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

}

A9,9                       B8,9                         C1,8                  D9,8

34)以下程序中,函数reverse( )的功能是将a所指数组中的内容进行逆置。

void reverse(int a[],int n)

{

    int i,t;

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

    { t=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t; }

}

main()

{

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

    reverse(b,8);

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

        s+=b[i];

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

}

则以上程序的输出结果是     

A22                        B10                          C34                   D30

35)以下程序的输出结果是      

main()

{

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

    int i,s=0;

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

        s+=aa[i][1];

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

}

A11                        B19                          C13                   D20

36)以下程序的输出结果是      

#include <string.h>

main()

{

    char *p="abcde\Ofghjik\0";

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

}

A12                        B15                          C6                     D5

37)若程序中头文件typel.h 的内容是:

#define  N  5

#define  M1 N*3

则以下程序的输出结果是:     

#include <stdio.h>

#include"typel.h"

#define M2 N*2

main()

{

    int i;

    i=M1+M2;

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

}

A10                        B20                          C25                   D30

38)以下程序的输出结果是     

#include <stdio.h>

main()

{

    FILE *fp;

    int i=20,j=30,k,n;

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

    fprintf(fp,"%d\n",i);

    fprintf(fp,"%d\n",j);

    fclose(fp);

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

    fp=fscanf(fp,"%d%d",&k,&n); 

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

    fclose(fp);

}

A20  30                 B20  50                   C30  50            D30  20

39)以下叙述中,错误的是     

A.二进制文件打开后,可以先读文件的末尾,而顺序文件不可以

B.在程序结束时,应用fclose( )函数关闭已打开的文件

C.在利用fread( )函数从二进制文件中读数据时,可以用数组名给数组中的所有元素读入数据

D.不可以用FILE定义指向二进制文件的文件指针

40)有以下程序:

#include <string.h>

main(int argc,char *argv[])

{

    int i,len=0;

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

        len+=strlen(argv[i]);

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

}

程序经过编译、连接后,生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:

ex1   abcd  efg  10<CR>

则运行的结果是     

A22                        B17                          C12                   D9

41)以下程序的输出结果是     

int fa(int x)

{ return x*x;}

int fb(int x)

{ return x*x*x;}

int f(int (*f1)(),int (*f2)(),int x)

{ return f2(x)-f1(x);}

main()

{

    int i;

    i=f(fa,fb,2);

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

}

A-4                        B1                            C4                     D8

42)以下程序的输出结果是     

int a=3;

main()

{

    int s=0;

    {

        int a=5;

        s+=a++;

    }

    s+=a++;

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

}

A8                          B10                          C7                     D11

43)以下程序的输出结果是     

void ss(char *s,char t)

{

    while(*s)

    {

        if(*s==t) *s=t-'a'+'A';

        s++;

    }

}

main()

{

    char str[100]="abcddfefdbd",c='d’;

    ss(str,c);

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

}

AABCDDEFEDBD                                     BabcDDfefDbD

CabcAAfefAbA                                                 DAbcddfefdbd

44)以下程序的输出结果是     

struct STU

{

    char num[10];

    float score[3];

};

main()

{

    struct STU s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p=s;

    int i;

    float sum=0;

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

        sum=sum+p->score[i];

    printf("%6.2f\n",sum);

}

A260.00                  B270.00                    C280.00             D285.00

45)设有如下定义:

struck sk

{

    int a;

    float b;

} data;

int *p;

若要使P指向data中的a域,以下正确的赋值语句是     

Ap=&a;                                                     Bp=data.a;               

Cp=&data.a;                                               D*p=data.a;

46)以下程序的输出结果是      

#include <stdlib.h>

struct NODE

{

    int num;

    struct NODE  *next;

};

main()

{

    struct NODE *p,*q,*r;

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

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

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

    p->num=10; q->num=20; r->num=30;

    p->next=q; q->next=r;

    printf("%d\n",p->num+q->next->num);

}

A10                        B20                          C30                   D40

47)若有以下定义:

typedef int *INTEGER;

INTEGER p,*q;

以下叙述中,正确的是     

Apint型变量

Bp是基类型为int的指针变量

Cq是基类型为int的指针变量

D.程序中可用INTEGER代替int类型名

48)以下程序的输出结果是     

main()

{

    unsigned char a,b,c;

    a=0x3; b=a|0x8; c=b<<1;

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

}

A–11  12               B–6 –13                    C12   24          D11 22

49)有以下程序:

#include  <stdlib.h>

main()

{

    char *p,*q;

    p=(char*)malloc(sizeof(char)*20);

    q=p;

    scanf("%s%s",p,q);

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

}   

若从键盘输入abc def<CR>,则输出结果是     

Adef def                 Babc def                   Cabc d               Dd d

50)以下程序中,函数f( )的功能是将n个字符串按由大到小的顺序进行排序。则以下程序的输出结果是     

#include <string.h>

void f(char p[][10],int n)

{

    char t[20];

    int i,j;

 

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

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

            if(strcmp(p[i],p[j])<0)

            {

                strcpy(t,p[i]);

                strcpy(p[i],p[j]);

                strcpy(p[j],t);

            }

}

main()

{

    char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};

    int i;

    f(p,5); 

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

}   

A6                          B4                            C5                     D3

二、填空题(每空2分,共40分)将正确答案分别写在答题卡中序号为【1】至【20】的横线上,答在试卷上不得分。

1)算法的基本特征是可行性、确定性、1和拥有足够的情报。

2)在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为

 2

3)在面向对象的程序设计中,类描述的是具有相似性质的一组3

4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为4

5)数据库管理系统常见的数据模型有层次模型、网状模型和5三种。

6)设有定义语句int n,*k=&n;,以下语句的功能是利用指针变量k读写变量n中的内容,将语句补充完整。

scanf("%d",  6 );

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

7)以下程序的输出结果是8

main()

{

    int x=10,y=20,t=0;

    if(x==y) t=x; x=y; y=t;

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

}

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

main()

{

    int x=15;

    while(x>10 && x<50)

    {

        x++;

        if(x/3) { x++; break;}

        else continue;

    }

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

}

9)以下程序运行时,如果从键盘输入Y?N?<CR>,则输出结果为10

#include <stdio.h>

main()

{

    char c;

    while((c=getchar())!='?') putchar(--c);

}

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

void fun(int x,int y)

{

    x=x+y; y=x-y; x=x-y;

    printf("%d,%d,",x,y);

}

main()

{

    int x=2,y=3;

    fun(x,y);

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

}

11)以下函数的功能是计算s=1+++……+

double fun(int n)

{ 

    double s=0.0,fac=1.0; int i;

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

    {

        fac=fac 12 ;

        s=s+fac;

    }

    return s;

}

12fun( )函数的功能是:首先对a所指的NN列的矩阵,找出各行中最大的数,再求这N个最大值中的最小值,将其作为函数值返回。

#include <stdio.h>

#define N 100

int fun(int(*a)[N])

{

    int row,col,max,min;

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

    {

        for(max=a[row][0],col=1;col<N;col++)

            if(   13   ) max=a[row][col];

        if(row==0) min=max;

        else if(   14   ) min=max;

    }

    return  min;

}

13)函数sstrcmp( )的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp( ))。

#include <stdio.h>

int sstrcmp(char *s,char *t)

{

    while(*s&&*t&&*s==  15  )

    {  s++;t++;}

    return    16   ;

}

14)以下程序的输出结果是17

#define N  10

#define s(x) x*x

#define f(x) (x*x)

main()

{

    int i1,i2;

    i1=1000/s(N);

    i2=1000/f(N);

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

}

15)以下程序的输出结果是18

void swap(int *a,int *b)

{

    int *t;

    t=a;  a=b;  b=t;

}

main()

{

    int x=3,y=5,*p=&x,*q=&y;

    swap(p,q);

    printf("%d %d\n",*p,*q);

} 

16)以下程序的输出结果是:19

typedef  union student

{

    char name[10];

    long sno;

    char sex;

    float score[4];

} STU;

main()

{

    STU  a[5];

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

}

17)若fp已被正确定义为一个文件指针,d1.dat为二进制文件,为读而打开此文件的语句是fp=fopen(  20 );。