江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2013秋江苏省计算机等级考试C语言笔试真题

   绝密★ 启用前

2013年秋

江苏省高等学校非计算机专业学生

计算机基础知识和应用能力等级考试

二级试卷

试卷语种:C语言

 

  明:

1.本试卷包括计算机基础知识部分和程序设计部分,考试时间共12 0分钟;

2.本试卷满分为60,分选择题和填空题,试卷不分AB类型;

3.计算机基础知识部分全部是选择题(20),程序设计部分分为选择题(1 0

  )和填空题(30)两种;

4.选择题用答题卡答题。每一项有ABCD四个可供选择的答案,请选

  择其中一个你认为正确的答案,HB铅笔涂写在答题卡的相应答题号内。

  每选对一项得1,不选或选错不得分;

5.填空题用答题纸答题。请将答案用蓝、黑色钢笔或圆珠笔填写在答题纸的

  相应答题号内,每个答案只占一行,不得换行。每填对一个答案得1,

  不填或填错不得分;

6.请认真填写并仔细核对答题卡和答题纸上的学校名称、准考证号和姓名是

  否填写正确。

7.考试结束时将试卷、答题卡和答题纸放在桌上,不得带走。待监考人员收

  毕清点后,方可离场。

 

 

第一部分  计算机基础知识

一、选择题(用答题卡答题,答案依次填在120题号内)

1.在下列有关信息、信息技术、信息化、信息产业的相关叙述中,错误的是___l___   

    A.信息、物质与能量是客观世界的三大构成要素,没有信息则任何事物都没有意义

    B.现代信息技术的主要特征之一是以计算机及其软件为核心

    C.信息化的概念起源于上世纪90年代,我国的信息化建设起步于本世纪初

    D.信息产业主要包括信息设备制造业、信息服务业、信息开发业等

2.对二进制数0101分别进行算术加和逻辑加运算,其结果用二进制形式表示分别为    ___2___   

    A01 10

    B10 01

    C01 01

    D10 10

3.芯片组是PC机各组成部分相互连接和通信的枢纽。下列关于芯片组的描述中,错误的是___3___

    A.芯片组是主板上的重要部件,它直接固定在主板上,通常不可更换

    B.芯片组与CPU的类型必须相配

    C.芯片组提供了CPU的时钟信号

    D.所有外部设备的控制功能都集成在芯片组中

4.关于PC机主板上的CMOS芯片,下面说法中正确的是___4___   

    A. CMOS芯片需要一个电池给它供电,否则其中的数据在主机断电后会丢失

    BCMOS芯片用于存储加电自检程序

    CCMOS芯片用于存储BIOS,是易失性的

    D. CMOS芯片用于存储计算机系统的配置参数,它是只读存储器

5USB是一种可以连接多个设备的总线式串行接口,目前在PC机及各种数码设备中普遍使用。在下列相关叙述中错误的是 ___5___   

    A. USB接口有USB l.0USB l.1USB 2.0USB 3.0之分

    B.通过USB接口给外部I/O设备提供电源时,电源为+5V

    C.目前广泛使用的USB 2.0的最高数据传输速率可达每秒数十兆字节

    D.借助于“USB集线器”可以扩展PC机的USB接口数目,使得一个USB接口理论上能连接1024个设备

6.显示器是计算机必不可少的一种图文输出设备,其作用是将数字信号转换为光信号,使文字与图形在屏幕上显示出来。下列相关叙述中错误的是    ___6___   

    A.目前PC机使用的显示器主要有两类,CRT显示器和LED显示器

    B.显示器屏幕大小以显示屏的对角线长度来度量

    C.PC机的显示控制器过去大多数做成插卡的形式,为了降低成本,现在显示控制器已经越来越多地集成在主板芯片组或CPU芯片中

    D.目前显卡主要使用AGP接口或PCI-E x16接口,前者性能优于后者

7.下列有关PC机常见外部存储器的叙述中,错误的是    ___7___

    A.移动硬盘通常采用微型硬盘加上特制的配套硬盘盒构成,采用USB接口与主机相连接

    B.目前U盘可以模拟光驱和硬盘启动操作系统

    C.存储卡是用闪存做成的一种固态存储器,具有与U盘相同的多种优点,目前所有PC机都配置了读卡器,以便对存储卡进行读写操作

    D. SSD是基于半导体存储器芯片的一种外存储设备,可被用在便携式计算机中代替常规的硬盘

8.下列关于计算机软件的叙述中,错误的是    ___8___   

    A.软件的含义比程序更宏观、更物化一些。一般情况下,软件往往指的是设计比较成熟、功能比较完善、具有某种使用价值的程序

    B.软件产品一般是指软件开发厂商交付给用户用于特定用途的一整套程序、数据及相关的文档(包括安装和使用手册等)

    C.免费软件一般是指用户可共享的软件,允许随意拷贝、修改其源代码,允许自由传播

    D. MS Office软件包中包含多个软件产品,安装时用户可以进行有选择的安装

9.下列关于Windows操作系统处理器管理的说法中,错误的是    ___9___   

    A.处理器管理的主要目的是提高CPU的使用效率

    B.多任务处理是将CPU时间划分成时间片,轮流为多个任务服务

    C.并行处理系统可以让多个CPU同时工作,提高计算机系统的性能

    D.多任务处理要求计算机必须使用多核CPU

10.下列关于程序设计语言的说法中,正确的是    ___10___   

    A.高级语言程序的执行速度比低级语言程序快

    B.高级语言就是人们日常使用的自然语言

    C.高级语言与CPU的逻辑结构无关

    D.无需经过翻译或转换,计算机就可以直接执行用高级语言编写的程序

11.下列关于目前最常用的无线通信信道的说法中,错误的是    ___11___   

    A.无线电波可用于传输模拟信号,也可以用于传输数字信号

    B.利用微波可将信息集中向某个方向进行定向传输,以防止他人截取信号

    C.短波通信适用于环球通信

    D.激光能在长距离内保持聚焦并能穿透物体,因而可以传输很远的距离

12.目前我国和欧洲广泛使用的GSM(全球通)手机属于    ___12___    移动通信。

    A.第一代

    B.第二代

    C.第三代

    D.第四代

13.以下选项中,只有    ___13___    可用作某台主机的lP地址。

    A62.26.1.256

    B202.119.24.5

    C78.0.0.0

    D223.268.129.1

14.因特网中主机的符号名被称为它的域名。下列关于域名的叙述中,错误的是    ___14___

  A.域名是IP地址的一种符号表示

  B.上网的每台计算机都有一个IP地址,所以也有各自的域名

  C.把域名翻译成IP地址的软件称为域名系统DNS

  D.运行域名系统DNS的主机叫做域名服务器,每个校园网都有一个域名服务器

15.目前采用无线方式接入因特网的技术主要有无线局域网(WLAN)接入、GPRS移动电话网接入和3G移动电话网接入等。下列相关叙述中错误的是    ___15___   

  A.采用无线局域网接入方式,可以在任何地方接入

  B.采用3G移动电话上网比GPRS快得多

  C.目前大多数智能手机支持WLAN接入技术

  D.目前采用移动电话上网的费用还比较高

16.下列关于网络信息安全措施的叙述中,正确的是    ___16___   

  A.带有数字签名的信息是未泄密的信息

  B.防火墙可以防止外界接触到内部网络,从而保证内部网络的绝对安全

  C.数据加密的目的是在网络通信被窃听的情况下仍然保证数据的安全

  D.使用最好的杀毒软件可以杀掉所有的病毒

17.下列有关字符编码标准的叙述中,正确的是    ___17___   

  A. UCS/Unicode编码的目标是实现全球不同语言文字的统一编码

  BASCIIGB2312GBK是我国为适应汉字信息处理需要而制定的一系列汉字编码标准

  C. UCS/Unicode编码与GB2312编码保持向下兼容

  D. GB18030标准就是Unicode编码标准,它是我国为了与国际标准UCS接轨而发布的一种汉字编码标准

18.与计算机能合成图像一样,计算机也能合成(生成)声音。计算机合成声音分为合成语音和合成音乐两类,其中合成音乐的文件扩展名为    ___18___   

  AWAV

  BMID

  CMP3

  DWMA

19.彩色图像所使用的颜色描述方法称为颜色模型。显示器使用的颜色模型为RGB三基色模型,彩色打印机所使用的颜色模型大多为    ___19___   

  AYUV

  BHSB

  CCMYK

  DRGB

20.数字视频信息的数据量相当大,对存储、处理和传输都是极大的负担,为此必须对其进行压缩。目前数字有线电视和卫星电视所传输的数字视频采用的压缩编码标准大多是    ___20___   

  AMPEG-1

  BMPEG-2

  CMPEG-4

  DMPEG-7

 

 

第二部分  C语言程序设计

 

一、选择题(用答题卡答题,答案依次填在21- 30答题号内,10)

21.在C语言源程序中,不能用于表示整型常数的数制是 ___21___   

    A.十六进制    B.八进制

    C.十进制      D.二进制

22.以下选项中不符合C语言标识符命名规则的是  ___22___ 

    Aprintf    B_00

    C&a        DFOR

 23.以下选项中,可作为C语言合法表达式的是  ___23___

    A3.0%2       B3=2=1=0

    C.{3,2,1,0}      D.(3,2,1,0)

24.若有宏定义"#define S(x,y) x/y",则执行语句"printf("%d",S(6+3,2+2));"后的输出是___24___ 

    A9      B2

    C9.5    D2.25

25.表达式"3<2 || -1 && !0"的值是___25___

    A2    B  1

    C0    D-1

26.已知有声明"char s[10];",若要将键盘输入的连续5个字母字符存储到s数组中,则以下选项

  中错误的输入语句是  ___26___ 

  A.gets(&s[0]);   B. scanf("%s",s+1);

  C.  gets(s);     Dscanf("%s",s[1]);

27.已知有声明"int a[10]={1,2,3,4,5,6,7,8},*p=&a[5];",*(p-3)的值是  ___27___ 

    A6    B3

    C2    D. 1

28.以下数组声明中错误的是  ___28___

  A.int num[2][4]={{1,2},{3,4),{5,6}};  B.int num[][3]={{1,2},{3,4},{5,6}};

  C.int  num[]= {1,2,3,4,5,6};          D.int num[][4]={1,2,3,4,5,6};

29.已知有声明"typedef char STRING; STRING s[10];",sizeof(s)的值是 ___29___

    A20    B10

    C5     D4

30.已知有声明"struct date{ int y,m;}a={2013,5},b={0};",以下选项中合法的语句是___30___ 

    Aif (a>b) b=a;     B  a++;

    Cb=a;            Db=(a.y,a.m);

二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,30)

  基本概念(5)

1.可以表示数学式 C语言表达式是 ___(1)___

2.已知yfloat类型的变量,执行语句"(int)y;",y的类型是  ___(2)___   

3.已知有声明"int a[5]={5,4,3,2,1},i=3;",执行语句"a[i++]++;printf("%d",a[i]);",屏幕输出为  ___(3)___ 

4.已知有声明"int  a[3][4];",若要求正确执行语句"p=a[0];",p的声明应是  ___(4)___ 

5.若要用fopen函数以文本方式打开或新建一个可读可写文件,要求:

(1)若指定的文件存在则打开它,

  否则新建一个文件;(2)使写入的数据追加在该文件的末尾,并且在不关闭文件的情况下能读出原有数据及写入的新数据;则在fopen"文件打开方式"的正确形式应是  ___(5)___ 

  阅读程序(13)

6.以下程序运行时,输出到屏幕的结果是 ___(6)___   

    #include <stdio.h>

    int main()

    {

     int a=6,b=15,t=a;

     while (t%b! =0)

       t+=a;

    printf("%d",t);

    return 0;

    }

7以下程序运行时,输出到屏幕的结果是 ___(7)___ 

    #include <stdio.h>

    void fun(char *a,char *b)

    {

     while(*a=='*')a++;

     while((*b=*a)!='\0')

     {b++;

      a++;

     }

    }

   int main()

   {

    char *s="*****a*b**",t[80];

    fun(s,t);

    puts(t);

    return 0;

    }

8.以下程序运行时,输出到屏幕的结果是  ___(8)___ 

    #include <stdio.h>

    void  fun (int n)

    {

      int t;

      putchar (n%10+'0');

      t=n/100;

      if(t!=0)   fun (t);

    }

   int main()

   {

    int m=12345;

    fun (m);

    printf("\n");

    return 0;

    }

9.以下程序运行时,输出到屏幕的结果是__(9)___

    #include <stdio.h>

    #include <string.h>

    void f(char s[],char t[])

    {

    int i,m=strlen(t),k;

    for(i=0;s[i]!='\0';i++)

      if(s[i]>='a'&& s[i]<='z')

      {

        k=t[i%m]-'0';

       s[i]=(s[i]-'a'+k)%26+'a';

      }

    }

   int main()

   {

    char s1[10]="Be2013";

    f(s1, "123");

    puts(s1);

    return 0;

   }

10.以下程序运行时,输出到屏幕的结果中第一行是___(10)___,第二行是___(11)___ 

    #include<stdio.h>

    void fun(int *t)

    {

     static int i=0;

     do

        t[i]+=t[i+1];

     while(++i<3);

    }

    int main()

    {

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

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

      fun(a);

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

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

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

     return 0;

    }

11.以下程序运行时,输出到屏幕的结果中第一行是___(12)___  ,第三行是  ___(13)___ 

    #include <stdio.h>

    #define N 3

    int main()

    {

      int a[N][N],b[N*Nl={1,1},i,j;

      for(i=2;i<N*N;i++)

         b[i]=b[i-1]+b[i-2];

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

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

          a[i][j] =b[i*N+j];

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

      {  for(j=0;j<Nj++)

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

         printf("\n");

      }

      return 0;

    }

12.以下程序运行时,输出到屏幕的结果中第一行是___(14)___  ,第二行是___(15)___ 

    #include <stdio.h>

    void fun(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;

            }

    }

    int main()

    {

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

      fun(aa+2,3);

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

     {

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

       if((i+1)%3==0)

         printf ("\n");

      }

    return 0;

   }

13.以下程序运行时,输出到屏幕的结果中第一行是__(16)___,第三行是___(17)___,第四行是___(18)___ 

    #include<stdio.h>

    struct n

    {

      int x;

      char c;

    };

    void fun(struct n  *b)

   {

    b++->x=20;

    b->c='y';

   }

  int main()

  {

    struct n a[2]={10,'x'};

    fun (a);

    printf("%d\n%c\n%d\n%c\n",a[0].x,a[0].c,a[1].x,a[1].c);

    return 0;

  }

  完善程序(12)

14.以下程序的功能是:

(1)模拟scanf函数调用时格式字符串中转换说明"%le"的转换功能,即接收键盘输入的一个以小数形式或指数形式表示的实数字符串,将该字符串转换成double类型数据;

  (2)以小数形式输出该double类型数据。例如,若输入"123.4",则输出123. 400000;若输入

    "123. 4e5",则输出12340000.000000

    #include <stdio.h>

    double  toDouble (char  *s)

    {

    int e=0;

    double  t=0,  idx=1.0;

    char *p, sign='+';

    for(p=s; *p &&(*p=='  '|| *p=='\t');p++);  /*跳过前面的空白符*/

    if(*p=='+' || *p=='-') sign=*p++;    /*符号处理*/

    while(*p>='0' && *p<='9')    /提取整数部分母/

    {

      t=t*10+(*p-'0');

      p++;

    }

    if(*p=='')

    {

      ___(19)___;    /*越过小数点,继续处理小数部分*/

     idx/=10;

     while(*p>='0' && *p<='9')

     {

       t+=(*p-'0')*idx;

       p++;

       idx/=10;

      }

    }

    if (sign=='-')  ___(20)___    ;

    if(*p !='e' && *p !='E')    /*若无指数部分,则结束转换*/

       return t;

    p++;

    sign='+';    /*提取指数部分*/

    if(*p=='+' || *p=='-')

       sign=*p++;

    while(*p>='0' && *p<='9')

    {

       e= ___(21)___ ;

       p++;

    }

    if(sign=='-')idx=0.1;

    else     idx=10;

    vrhile (e>0)

    {

      t*=idx;

      ___(22)___  ;

    }

    return t

}

int main()

{

    char ss[80];

    gets (ss);

    printf("%f\n",  toDouble (ss));

    return 0;

 }

15.以下程序中函数int  check (int  *a,int *b,int len)的功能是:(1)a指向的包含len个元素的整型数组中所有相邻元素值之差的绝对值依次存放在b指向的一维数组中;(2)检查b数组中所有元素的值是否组成一个公差大于0的等差数列,若是则函数返回1,否则函数返回0。例如:当a指向数组各元素的值是{-3,-2,1,6,13),b指向数组各元素的值{1,3,5,7}组成一个公差为2的等差数列,因此函数返回1

  #include <stdioh>

  #include <mathh>

  #define M 5

  #define N 10

  /*tongj函数统计a指向二维数组每行中存放的连续非0整数个数并依次保存到n指向的数组中*/

 void tongj(int a[][N],int n[])

 {

     int i,j;

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

     {

       j=0;

       while(a[i][j]!=0  && j<N)

       j++;

       ______(23)_____  ;

     }

  }

  int check(int *a,  int *b, int len)

  {

    int i,g;

    if(len<=3) return 0;

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

      b[i]=0;

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

    { g=a[i+1]-a[i];

      if(g<0)____(24)___;

      b[i]=g;

    )

    g=b[1]-b[0];

    if(g<=0) return 0;

    for (i=2; i<len-1;i++)

       if(___(25)___!=g) return 0;

    return 1;

  }

 

  int main()

  {

    int a[M][N]= {{-3,-2,1,6,13},{1,2,3,4},{2,5,4,6},

                  {1,2,5,7,11,6,13,7},{5,2,4}},b[N];

    int n[M],i,j,x;

    tongj(a,n);

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

    {x=check( ___(26)___    );

     if (x==1)

        printf("\nYes ");

    else

       printf("\nNo  ")

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

      printf("%4d", b[j]);

    }

    printf("\n");

    return 0;

  }

16.已知一个单向链表结点的数据结构定义如下:

    struct node

    {

    char data;

    struct node *next;

    };

函数struct node *cre (char *s)的功能是:根据s指向的字符串建立一个结点类型为struct node头指针为h的单向链表,使h链表中各结点的数据域分别存储s指向字符串中所有大写字母的编码,函数返回h链表首结点的地址.例如,s指向的字符串为"3Aa26Bx5Y9",h指向的链表如下图所示。

 

#include  <stdio. h>

#include  <stdlib. h>

struct node

{

    char data;

    struct node *next;

};

struct node *cre(char *s)

{

    struct node *p,*p1,*h;

    if (___(27)___) return NULL;

    h=p1=p=(struct node *)malloc(sizeof(struct node)) ;

    p->data=*s ;

    s++;

    while (*s)

    {

       if(*s>='A' && *s<='Z')

       {

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

           p->data=*s ;

           ___(28)____ = p;

           p1=p ;

       }

       s++;

    }

    ___ (29)___   =NULL;

    ___(30)___;

}

void print(struct node *h)

 {

    struct node *p=h;

    while (p!=NULL)

    {   printf ("%3c", p->data) ;

        p=p->next ;

    }

    printf ("\n") ;

}

int main()

 {

    struct node *head=NULL;

    char *p=”3Aa26Bx5Y9";

    head=cre (p) ;        print (head) ;

    return 0;

}

 (1) C (2) B (3) D  (4) A (5) D (6) D (7) C(8) C. (9) D(10) C

(11) D(12)B (13) B(14) B(15) A(16) C(17) A (18)B(19)C(20)B

 

21. D 22. C 23. D 24. A 25. B 26. D 27. B 28. A 29. B 30. C

(1) pow( x,1.0/3)/(a+b) pow( x,1/3.0)/(a+b) pow( x,1.0/3.0)/(a+b)

(2) float     (3)1   (4)int *p;  (5)"a+"  (6)30   (7)a*b**

(8) 531      (9) Bg2013   (10) 3579  (11) 5   (12)1 1 2   (13)13 21 34

(14) 125   (15) 436   (16) 20  (17) 0  (18) y  (19)p++++p  

 (20) t =- t  (21) e * 10 +*p - '0'   (22) e-- --e  (23) n[i] =j

 (24) g =- g g = abs( g) (25) b[i] - b[i-1]   (26)a[i], b, n[i]   (27)*s=='\0' *s==0  !*s

  (28) p1 -> next     (29) p1 -> next p -> next   (30) return h