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

12.3 第二套笔试题

 

第二套笔试题

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

(1)算法的空间复杂度是指      。

A.算法程序的长度                                        B.算法程序中的指令条数

C.算法程序所占的存储空间                          D.执行过程中所需要的存储空间

(2)用链表表示线性表的优点是      。

A.便于随机存取

B.花费的存储空间较顺序存储少

C.便于插入和删除操作

D.数据元素的物理顺序与逻辑顺序相同

(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)应用数据库的主要目的是      。

A.解决数据保密问题                                    B.解决数据完整性问题

C.解决数据共享问题                                    D.解决数据量大的问题

(9)在数据库设计中,将E-R图转换成关系数据模型的过程属于      。

A.需求分析阶段                                           B.逻辑设计阶段

C.概念设计阶段                                           D.物理设计阶段

(10)在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中,数据独立性最高的阶段是      。

A.数据库系统阶段                                      B.文件系统阶段

C.人工管理阶段                                          D.数据项管理阶段

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

A.C语言比其他语言高级

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

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

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

(12)C语言中,用于结构化程序设计的三种基本结构是      。

A.顺序结构、选择结构、循环结构                    B.if、switch、break

C.for、while、do...while                             D.if、for、continue

(13)在一个C语言程序中,      。

A.main( )函数必须出现在所有函数之前

B.main( )函数可以在任何地方出现

C.main( )函数必须出现在所有函数之后

D.main( )函数必须出现在固定位置

(14)下列叙述中,正确的是      。

A.C语言中既有逻辑类型,也有集合类型

B.C语言中没有逻辑类型,但有集合类型

C.C语言中有逻辑类型,但没有集合类型

D.C语言中既没有逻辑类型,也没有集合类型

(15)以下关于C语言用户标识符的叙述中,正确的是      。

A.用户标识符中可以出现下画线和中画线(减号)

B.用户标识符中不可以出现中画线,但可以出现下画线

C.用户标识符中可以出现下画线,但不可以放在用户标识符的开头

D.用户标识符中可以出现下画线和数字,它们都可以放在用户标识符的开头

(16)以下程序片段(n所赋值是八进制数)的输出结果是      。

int m=32767,n=032767

printf("%d,%o/n",m,n);

A.32767,32767                                            B.32767,032767

C.32767,77777                                            D.32767,077777

(17)下列关于单目运算符++、--的叙述中,正确的是      。

A.它们的运算对象可以是任何变量和常量

B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量

C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量

D.它们的运算对象可以是char型变量、int型变量和float型变量

(18)以下程序片段的输出结果是      。

int m=0xabc,n=0xabc;

m-=n;

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

A.0X0                                                               B.0x0                       

C.0                                                             D.0XABC

(19)以下程序片段执行时,若从键盘上输入10A10<CR>,则输出结果是      。

int m=0,n=0;

char  c='a';

scanf("%d%c%d",&m,&c,&n);

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

A.10,A,10                B.10,a,10                   C.10,a,0              D.10,A,0

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

main()

{    

    int i;

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

        switch(i)

        {

            case 1: printf("%d",i);

            case 2: printf("%d",i);

            default: printf("%d",i);

        }

}

A.011122                 B.012                        C.012020            D.120

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

main()

{

    int i=1,j=1,k=2;

    if((j++||++)&& i++)

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

}

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

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

main()

{

    int a=5,b=4,c=3,d=2;

    if(a>b>c)

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

    else if((c-1>=d)==1)

             printf("%d\n",d+1);

         else

             printf("%d\n",d+2);

}

A.2                                                             B.3                    

C.4                                                             D.编译时出错,无结果

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

main()

{

    int p[7]={11,13,14,15,16,17,18},i=0,k=0;

    while(i<7 && p[i]%2)

    {

        k=k+p[i];

        i++;

    }

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

}

A.58                        B.56                          C.45                   D.24

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

main()

{

    int i=0,s=0;

    do

    {

        if(i%2) { i++; continue; }

        i++;

        s+=i;

    } while(i<7);

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

}

A.16                        B.12                          C.28                   D.21

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

main()

{

    int i=10,j=1;

    printf("%d,%d\n",i--,++j);

}

A.9,2                       B.10,2                       C.9,1                  D.10,1

(26)有以下程序:

main()

{

    char a,b,c,*d;

    a='\'; b='\xbc';

    c='\0xab'; d="\017";

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

}

若编译时出现错误,则以下叙述中,正确的是      。

A.程序中只有a='\';语句不正确

B.程序中只有b='\xbc';语句不正确

C.程序中只有d="\0127";语句不正确

D.程序中a='\';和c='\0xab';语句都不正确

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

int f1(int x,int y)

{return  x>y?x:y; }

int f2(int x,int y)

{return  x>y?y:x; }

main()

{

    int a=4,b=3,c=5,d,e,f;

    d=f1(a,b);

    d=f1(d,c);

    e=f2(a,b);

    e=f2(e,c);

    f=a+b+c-d-e;

    printf("%d,%d,%d\n",d,f,e);

}

A.3,4,5                                                       B.5,3,4                     

C.5,4,3                                                       D.3,5,4

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

void f(int x,int y)

{

    int t;

    if(x<y) { t=x; x=y; y=t;}

}

main()

{

    int a=4,b=3,c=5;

    f(a,b);

    f(a,c);

    f(b,c);

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

}

A.3,4,5                                                       B.5,3,4                     

C.5,4,3                                                       D.4,3,5

(29)若有如下程序片段:

#include <stdio.h>

int a=4,b=3,*p,*q,*w;

p=&a; q=&b; w=q; q=NULL;

则以下选项中,错误的语句是      。

A.*q=0;                   B.w=p;                      C.*p=a;                     D.*p=*w;

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

int *f(int *x,int *y)

{

    if(*x<*y) return x;

    else return y;

}

main()

{

    int a=7,b=8,*p=&a,*q=&b,*r;

    r=f(p,q);

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

}

A.7,8,8                                                       B.7,8,7                     

C.8,7,7                                                       D.8,7,8

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

main()

{

    char *s[]={"one","two","three"},*p;

    p=s[1];

    printf("%c,%s\n",*(p+1),s[0]);

}

A.n,two                                                      B.t,one                     

C.w,one                                                      D.o,two

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

main()

{   

    int x[8]={8,7,6,5,0,0},*s;

    s=x+3;

    printf("%d\n",s[2]);

}

A.随机值                 B.0                            C.5                     D.6

(33)以下选项中,能正确定义数组并赋初值的语句是      。

A.int N=5,b[N][N];                                      B.int a[1][2]={{1},{3}};

C.int c[2][1]={{1,2},{3,4}};                        D.int d[3][2]={{1,2},{34}};

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

main()

{

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

   int i,j,k=2;

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

       printf("%d",m[k][i]);

}

A.4 5 6                    B.2 5 8                      C.3 6 9               D.7 8 9

(35)若以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

#define  N  10

void  arrin(int x[N])

{

    int  i=0;

    while(i<N)

      scanf("%d", _______);

}

则在下画线处应填入的是      。

A.x+i                       B.&x[i+1]                  C.x+(i++)           D.&x[++i]

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

main()

{

    char s[]="\n123\\";

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

}

A.赋初值的字符串有错                               B.6,7                 

C.5,6                                                          D.6,6

(37)以下函数的功能是      。

fun(char *s1,char *s2)

{

    int i=0;

    while(s1[i]==s2[i] && s2[i]!='\0')

        i++;

    return(s1[i]==s2[i] && s2{i}!=='\0');

}

A.将s2所指字符串赋给s1

B.比较s1和s2所指字符串的大小,若s1比s2所指定符串大,函数值为1,否则函数值为0

C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D.比较s1和s2所指字符串的长度,若s1比s2所指字符串长,函数值为1,否则函数值为0

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

A.全局变量的作用域一定比局部变量的作用域范围大

B.静态(static)类别变量的生存期贯穿于整个程序的运行期间

C.函数的形参都属于全局变量

D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值

(39)设有如下说明:

typedef struct

{  int  n;  char  c;  double  x;} STD;

则以下选项中,能正确定义结构体数组并赋初值的语句是      。

A.STD tt[2]={{1,'A',62},2, 'B',75};

B.STD tt[2]= {1,"A",62},{2, "B",75};

C.struct tt[2]={{1,'A'},{2, 'B'}};

D.struct tt[2]={{1,"A",62.5},{2, "B",75.0}};

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

main()

{

    union

{

             unsigned int n;

             unsigned char c;

         } u1;

    u1.c='A';

    printf("%c\n",u1.n);

}

A.产生语法错误                                         B.随机值                  

C.A                                                            D.65

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

main()

{

    char str[]="xyz",*ps=str;

    while(*ps)

       ps++;

    for(ps--;ps-str>=0;ps--)

       puts(ps);

}

A.yz                        B.z                            C.z                     D.x

         xyz                yz                  yz               xy

         xyz                xyz

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

main()

{

    int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;

    pa=a;

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

        if(i<2) pa[1][i]=pa[1][i]-1;

        else pa[1][i]=1;

    printf("%d\n",a[0][1]+a[1][1]+a[1][2]);

}

A.7                                                            B.6                           

C.8                                                             D.无确定值

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

void fun(int *a,int i,int j)

{

    int t;

    if(i<j)

    {

        t=a[i]; a[i]=a[j]; a[j]=t;

        fun(a,++i,--j);

    }

}

main()

{

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

    fun(a,0,5);

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

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

}

A.6 5 4 3 2 1                                               B.4 3 2 1 5 6                    

C.4 5 6 1 2 3                                               D.1 2 3 4 5 6

(44)有以下程序:

main(int argc,char *argv[])

{

    int n,i=0;

    while(argv[1][i]!='\0')

    {

        n=fun();

        i++;

    }

    printf("%d\n",n*argc);

}

int fun()

{

    static int s=0;

    s+=1;

    return s;

}

程序经编译、连接后、生成可执行文件exam.exe,若输入以下命令行:

exam 123<CR>

则运行结果为      。

A.6                                                            B.8                           

C.3                                                             D.4

(45)以下程序片段中,能够通过调用函数fun( ),使main( )函数中的指针变量p指向一个合法的整型单元的是      。

A.main()                                                    B.main

          {                                      {

              int *p;                                 int *p;

              fun(p);                                 fun(&p);

          }                                      }

          int fun(int *p)                            int fun(int **p)

          {int s; p=&s;}                             {int  s; *p=&s;}

C.#include <stdlib.h>                    D.#include <stdlib.h>

          main()                                 main()

          {                                      {

              int *p;                                 int *p;

              fun(&p);                                fun(p);

          }                                      }

          int fun(int  **p)                       int fun(int  *p)

          {*p=(int *)malloc(2);}                 {p=(int *)malloc(sizeo(int));}

(46)若要说明一个类型名STP,使得定义语句STP s等价于char *s,则以下选项中,正确的是      。

A.typedef  STP  char  *s;                        B.typedef  *char  STP;

C.typedef  stp  *char;                                D.typedef  char*  STP;

(47)设有如下定义:

struct  ss

{  

    char name[10];

    int age;

    char sex;

} std[3],*p=std;

以下各输入语句中,错误的是      。

A.scanf("%d",&(*p).age);                                   B.scanf("%s",&std.name);

C.scanf("%c",&std[0].sex)                                   D.scanf("%c",&(p->sex));

(48)设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是      。

A.10101001                                                B.10101000

C.11111101                                                D.01010101

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

A.C语言中的文本文件以ASCII码形式存储数据

B.C语言中,对二进制文件的访问速度比文本文件快

C.C语言中,随机读写方式不适用于文本文件

D.C语言中,顺序读写方式不适用于二进制文件

(50)以下程序要把从键盘输入的字符输出到名为abc.txt的文件中,直到从键盘读入字符#时,结束输入和输出操作,但程序有错。

#include <stdio.h>

main()

{

    FILE *fout;

    char  ch;

    fout=fopen("abc.txt","w");

    ch=fgetc(stdin);

    while(ch!='#')

    {

        fputc(ch,fout);

        ch=fgetc(stdin);

    }

    fclose(fout);

}

出错的原因是      。

A.函数fopen( )的调用形式错误                  B.输入文件没有关闭

C.函数fgetc( )的调用形式错误                    D.文件指针stdin没有定义

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

(1)数据的逻辑结构分为线性结构和【1】两大类。

(2)顺序存储方法是把逻辑上相邻的节点存储在物理位置【2】的存储单元中。

(3)一个类可以从直接或间接的祖先中继承所有属性和方法,采用这个方法提高了软件的【3】。

(4)软件工程研究的内容主要包括【4】技术和软件工程管理。

(5)关系操作的特点是【5】操作。

(6)以下语句的输出结果是【6】。

int i=-19,j=i%4;

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

(7)若有以下程序,要求给i赋值10,给j赋值20,则应该从键盘输入【7】。

main()

{

    int i,j;

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

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

}

(8)以下程序的输出结果是【8】。

main()

{

    int p,a=5;

    if(p=a!=0)

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

    else

        printf("%d\n",p+2);

}

(9)以下程序的输出结果是【9】。

main()

{

    int a=4,b=3,c=5,t=0;

    if(a<b) t=a;a=b;b=t;

    if(a<c) t=a;a=c;c=t;

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

}

(10)以下程序的输出结果是【10】。

main()

{

    int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};

    int i,j,s=0;

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

    {

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

        {

            if(a[i][j]<0) continue;

            if(a[i][j]==0) break;

            s+=a[i][j];

        }

    }

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

}

(11)以下程序的输出结果是【11】。

main()

{

    char a;

    a='H'-'A'+'0';

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

}

(12)以下程序的输出结果是【12】。

int f(int x,int y)

{  return (y-x)*x; }

main()

{

   int a=3,b=4,c=5,d;

   d=f(f(3,4),f(3,5));

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

}

(13)函数YangHui( )的功能是将杨辉三角形的数据赋给二维数组的下半三角,形式如下所示。

1

1    1

1    2    1

1    3    3    1

1    4    6    4    1

其构成规律是:

①第0列元素和主对角线元素均为1。

②其余元素为其左上方和正上方元素之和。

③数据的个数每行递增1。

将以下程序补充完整。

#defint N 6

void YangHui(int x[N][N])

{

    int i,j;

    x[0][0]=1

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

    {

        x[i][0]= 【13】 =1;

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

            x[i][j]= 【14】 ;

    }

}

(14)以下函数的功能是删除字符串s中的所有数字字符。

void dele(char *s)

{

    int n=0,i;

    for(i=0,s[i];i++)

        if(【15】 )

            s[n++]=s[i];

    s[n]=【16】;

}

(15)设函数findbig( )已定义为求三个数中的最大值。以下程序将利用函数指针调用findbig( )函数。

main()

{

    int findbig(int,int,int);

    int (*f)(),x,yz,z,big;

    f= 【17】 ;

    scanf("%d%d%d",&x,&y,&z);

    big=(*f)(x,y,z);

    printf("bing=%d\n",big);

}

(16)以下程序的输出结果是【18】。

#define MCRA(m)  2*m

#define MCRB(n,m)  2*MCRA(n)+m

main()

{

    int i=2,j=3;

    printf("%d\n",MCRB(j,MCRA(i)));

}

(17)设有以下定义:

struct ss

{ int info; struct ss *link; } x,y,z;

且已建立如下图所示的链表结构:

 

 

 

 

 

 

 

X                           Y                        Z

 

写出删除点y的赋值语句【19】。

(18)已有文本文件test.txt,其中的内容为Hello,everyone!。以下程序中,文件test.txt已正确为”读”而打开,由文件指针fr指向该文件,则程序的输出结果是【20】。

#include <stdio.h>

main()

{

    FILE  *fr;

    char  str[40];

    ...

    fgets(str,5,fr);

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

    fclose(fr);