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

12.2 第一套笔试题

 

第一套笔试题

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

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

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

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

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

A.acbed                                                               B.decab                           

C.deabc                                                               D.cedba

(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中,用来定义模式、内模式和外模式的语言为      。

A.C                           B.Basic                      C.DDL               D.DML

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

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

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

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

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

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

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

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

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

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

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

C.main( )函数必须放在其他函数之前

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

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

A.5E2.0                   B.E-3                        C..2E0                D.1.3E

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

A.long                            B._2Test                    C.3Dmax            D.A.dat

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

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

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

A.n=(i=2,++i);         B.j++;                       C.++(i+1);          D.x=j>0;

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

A.6.500000                                                        B.6                           

C.5.500000                                                        D.6.000000

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

A.scanf("%2d%2d%2d",&i,&j,&k);

B.scanf("%d  %d  %d",&i,&j,&k);

C.scanf("%d,%d,%d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);

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

A.3*x^n(2*x-1)                                                 B.3*x**n(2*x-1)

C.3*pow(x,n)*(1/(2*x-1))                                   D.3*pow(n,x)/(2*x-1)

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

A.printf("x=%d\n",x);                                  B.printf("x=%1d\n",x);

C.printf("x=%8dL\n",x);                              D.printf("x=%LD\n",x);

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

main()

{

    int k=2,i=2,m;

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

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

}

A.8,6                    B.8,3                      C.6,4               D.7,4

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

A.6                          B.0                            C.2                     D.1

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

      。

A.if(x>0) y=1;                           B.y=0;

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

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

C.y=0;                                D.if(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++等价的表达式是       。

A.k=n,n=n+1            B.n=n+1,k=n              C.k=++n             D.k+=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);

    }

}

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

A.sum=0.0;                                                        B.sum+=score;

C.ave=sun/4.0;                                            D.printf("NO%d:%f\n",n,ave);

(25)有以下程序片段:

int n=0,p;

do

{

    scanf("%d",&p);

    n++;

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

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

A.P的值不等于12345,并且n的值小于3

B.P的值等于12345,并且n的值大于等于3

C.P的值不等于12345,或者n的值小于3

D.P的值等于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);

}

A.1                          B.2                            C.3                     D.4

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

A.void                            B.int                          C.float                D.double

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

A.p=q;                    B.*p=*q;                   C.n=*q;                     D.p=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.编译出错                    B.9                     C.21                   D.9.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);

}

A.B,a,B,a                 B.a,B,a,B                   C.A,b,A,b           D.b,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");

}

则以上程序的输出结果是      。

A.1,2,3,4,5,6,7,8,9,10                                         B.10,9,8,7,6,5,4,3,2,1,

C.1,2,3,8,7.6.5.4.9,10                                         D.1,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);

}

A.4                          B.3                            C.2                     D.1

(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);

}

A.9,9                       B.8,9                         C.1,8                  D.9,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);

}

则以上程序的输出结果是      。

A.22                        B.10                          C.34                   D.30

(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);

}

A.11                        B.19                          C.13                   D.20

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

#include <string.h>

main()

{

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

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

}

A.12                        B.15                          C.6                     D.5

(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);

}

A.10                        B.20                          C.25                   D.30

(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);

}

A.20  30                 B.20  50                   C.30  50            D.30  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>

则运行的结果是      。

A.22                        B.17                          C.12                   D.9

(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                        B.1                            C.4                     D.8

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

int a=3;

main()

{

    int s=0;

    {

        int a=5;

        s+=a++;

    }

    s+=a++;

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

}

A.8                          B.10                          C.7                     D.11

(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);

}

A.ABCDDEFEDBD                                     B.abcDDfefDbD

C.abcAAfefAbA                                                 D.Abcddfefdbd

(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);

}

A.260.00                  B.270.00                    C.280.00             D.285.00

(45)设有如下定义:

struck sk

{

    int a;

    float b;

} data;

int *p;

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

A.p=&a;                                                     B.p=data.a;               

C.p=&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);

}

A.10                        B.20                          C.30                   D.40

(47)若有以下定义:

typedef int *INTEGER;

INTEGER p,*q;

以下叙述中,正确的是      。

A.p是int型变量

B.p是基类型为int的指针变量

C.q是基类型为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                    C.12   24          D.11 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>,则输出结果是      。

A.def def                 B.abc def                   C.abc d               D.d 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]));

}   

A.6                          B.4                            C.5                     D.3

二、填空题(每空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;

}

(12)fun( )函数的功能是:首先对a所指的N行N列的矩阵,找出各行中最大的数,再求这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】 );。