江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
江苏二级C2009秋考试试题

    2009秋季C语言笔试试卷

  第一部分:计算机基础知识

 1.下列关于个人移动通信的叙述中,错误的是____

  A.1代个人移动通信(简称1G)采用的通信技术是数字通信技术

  B.目前广泛使用的GSM手机采用的通信技术属于第2代移动通信技术(简称2G)

  c.3代移动通信技术(简称3G)将无线通信与互联网、多媒体通信相结合

  D.3G有多个国际技术标准,其中也有我国自主制定的3G技术标准。   

  2.在下列有关集成电路的叙述中,正确的是2

  A.现代集成电路所使用的半导体材料都是硅

  B.所有的集成电路都是数字集成电路

  C.Moore定律认为单块集成电路的集成度平均每年翻一番

  D.Intel公司微处理器产品Core 2 Duo,其集成度已高达数千万个电子元件

  3.与十六进制数AB等值的八进制数是3 

  A. 253    B.254    C.171   D.172

  4.在下列有关PCCPU的叙述中,错误的是4

  A.CPU中包含几十个甚至上百个寄存器,用来临时存放数据、指令和控制信息

  B.所有PC机的CPU都具有相同的指令系统,因而PC机可使用相同的软件

  C.一台计算机至少包含1CPU,也可以包含2个、4个、8个甚至更多个CPU

  D.Intel公司是国际上研制和生产CPU的主要公司,我国也能生产CPU

  5.在下列有关PC机主板上部件的叙述中,错误的是5 

  A.BIOS保存在主板上的一个闪存中,其内容在关机后通常不会改变

  B.CMOS中保存有用户设置的开机口令,关机后主板上的电池继续给CMOS供电

  C.启动CMOS设置程序可以重新设置CMOS中的数据,该程序是BIOS的组成部分

  D.网卡通常集成在主板上,由主板上独立的IC实现其功能,与芯片组无关

  6.PC机存储器的层次结构来看,下列存储器中存取速度最快的是6 

  A.Cache存储器  B.RAMROM  C.寄存器  D.硬盘和优盘

  7.在下列4PC机常用I/O接口中,数据传输速率最高的是7

  A.PS/2    B.SATA    C.IEEE-1394b D.USB 2.0

  8.在下列有关I/O操作、I/O总线和I/O接口的叙述中,错误的是8

  A.I/O操作的任务是在I/O设备与内存的指定区域之间传送信息

  B.I/O总线传送的只能是数据信号,它不能传送控制信号和地址信号

  C.不同类型的I/O接口,其插头/插座以及相应的通信规程和电气特性通常各不相同

  D.并行总线的数据传输速率不一定比串行总线高

  9.在下列有关PCI/0设备的叙述中,错误的是9

  A.数码相机的成像芯片可以为CCD器件或CMOS芯片,目前大多数用CCD器件

  B.平板式扫描仪的分辨率通常远远高于胶片扫描仪和滚筒式扫描仪

  C.常见的宽屏液晶显示器的宽度与高度之比为16:9(16:10)

  D.目前在银行、超市等商业部门一般采用针式打印机来打印存折和票据

  10.在下列有关计算机软件的叙述中,错误的是10 

  A.程序设计语言处理系统和数据库管理系统被归类为系统软件

  B.共享软件是一种具有版权的软件,它允许用户买前免费试用

  C.机器语言和汇编语言与特定的计算机类型有关,取决于CPU

  D.目前PC机只能使用Windows系列操作系统,均不能使用UNIXLinux操作系统

  11.在下列常用的PC机软件中,编辑的文档(内容)能直接保存为图片类型(例如JPEG

文件类型)的是11 

    A.Microsoft Word        B.Microsoft Excel

    C.Microsoft PowerPoint  D.Microsoft FrontPage

    12.在下列关于以太网(局域网)的叙述中,错误的是12

    A.在共享式以太网中,任何时间只允许一对计算机进行通信

    B.在交换式以太网中,每台计算机均独享相同的带宽,其带宽仅由交换机决定

    c.无论是共享式以太网还是交换式以太网,网络中的所有计算机都要安装以太网网卡

    D.无论是共享式以太网还是交换式以太网,它们的数据帧和MAC地址格式均相同

    13.连接在因特网上的每一台主机都有一个IP地址。下面不能作为IP地址的是13 

    A.211.256.49.68 B.21.18.33.48  C.120.34.0.18 D.37.251.68.0

    14.为了将异构的计算机网络互相连接起来,必须使用的网络设备是14 

    A.调制解调器    B.以太网集线器  c.以太网交换机  D.路由器

    15.下列网络协议中,与发送电子邮件有关的是15 

    A.Http    B.FTP    C.SMTP D.TELNET

    16.在下列有关字符集及其编码的叙述中,错误的是16 

    A.基本的ASCII字符集共有128个字符,每个字符使用7个二进位进行编码

    B.GB2312字符集中收录了6千多个汉字,每个字符在机内通常使用双字节编码

    C.GBK字符集中的字符也采用双字节编码,且该字符集收录了部分繁体汉字

    D.GB18030字符集中所有的字符均采用4字节编码,因此该字符集的代码空间很大

    17.目前数码相机拍摄的照片在保存时通常采用的文件类型是17 

    A.BMP    B.GIF    C.JPEG D.TIF

    18.MP3是数字波形声音的一种压缩编码文件格式,它采用的压缩编码标准属于18 

    A.MPEG-1    B.MPEG-2    C.MPEG-4 D.Dolbv AC-3

    19.使用Macromedia公司的Flash软件制作的动画是一种矢量图形,在保存为动画文件

时其文件扩展名通常为19 

  A.GIF    B.SWF    C.AVI D.MPG   

    20.在计算机应用中,CADCAM是典型的信息系统。它们属于20 

  A.管理业务系统    B.辅助技术系统

  c.信息检索系统    D.信息分析系统

 

    第二部分C语言程序设计

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

  21.以下叙述中正确的是21 

  A.C语言系统以函数为单位编译源程序

  B.main函数必须放在程序开始

  C.用户定义的函数可以被一个或多个函数调用任意多次

  D.在一个函数体内可以定义另外一个函数

  22.以下选项中,不能用作c语言标识符的是 22

  A.print    B.FOR    C.&a D._00

  23.已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768

的是23

  A.printf("%d",32768);    B.printf("%ld",32768);

  C.printf("%f",32768);     D.printf("%c",32768);

  24.已知有声明"int a=3,b=4,c=5;",以下表达式中值为0的是24 

  A.a&&b    B.a<=b    C.a||b&&c   D.!(!c||1)

  25.已知有声明"long x,y;"x中整数的十进制表示有n位数字(4<n<10),若要求去

掉整数x十进制表示中的最高位,用剩下的数字组成一个新的整数并保存到y,则以下表达

式中能正确实现这一功能的是25 

  A.y=x/(10*(n-1))        B.y=x%(10*(n-1))

  C.y=x%(long)pow(10,n-1) D.y=x%(10^(n-1))

  26.已知有声明"int x,y;",若要求编写一段程序实现"x大于等于0y取值1,否则Y

取值-1",则以下程序段中错误的是___26___

    A.if(x>=0) y=1;else y=-1;    B.y=x>=0?1:-1;

    C.switch()                   D.switch(x-abs(x))

       {  case x>=0: y=1;break;     {  case 0:y=1;break;

           default:y=-1;               default:y=-1;

       }                            }

    27.已知有声明"int m[]={5,4,3,2,1},i=0;",下列对m数组元素的引用中,错误

___27___

    A.m[++i]    B.m[5]    C.m[2*2]  D.m[m[4]]

    28•已知有声明"char s[80];",若需要将键盘输入的一个不含空格的字符串保存到

组中,则下列语句中正确的是28 

  A.scanf("%s",s);    B.scanf("%s",s[0]);

  C.s=gets();         D.s=getchar();

  29.若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是29

  A.实参和其对应的形参占用同一存储单元

  B.形参不占用存储单元

  C.同名的实参和形参占用同一存储单元

  D.形参和实参占用不同的存储单元    ,

  30.已知有声明"int i,a[10],*p=a;",现需要将1--l0保存到a[0]--a[9],以下程

序段中不能实现这一功能的是30 

  A.for(i=0;i<10;i++) a[i]=i+1;  B.for(i=0;i<10;i++) p[i]=i+1;

  C.i=1;while(p<a+10)  *p++=i++; D.i=1;while(p<a+10) *a++=i++;

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

  ●基本概念

  1.C语言中有!&&||三个逻辑运算符,其中优先级高于算术运算符的是  (1) 

  2.若有声明"int r=2;",则执行语句"printf("%d",sizeof(2*3.14*r));"时输

  (2) 

  3.数学表达式 所对应的C语言表达式为  (3) 

  4.若有以下声明:

    char *p="%d,%d\n";int a=1,b=2;

    则执行语句"printf(p,a,b);"时输出(4) 

  5.声明局部变量时若缺省存储类别,该变量的存储类别是(5) 

  ●阅读程序

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

    #include<stdio.h>

    void main()

    {FILE *fp;

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

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

     fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]); 

     fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);

     fclose(fp);

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

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

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

     fclose(fp);

    }

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

    #include<stdio.h>

    void main()

    {int i=1,m=0;

    switch(i)

     {  case 1:

        case 2:  m++;

        case 3:  m++;

    }

    printf("%d",m);

    }‘

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

    #include<stdio.h>

    void fun(int a[],int b[],int *x)

    {  int i,j=0;

       for(i=0;a[i];i++)

       {if(i%2==0)continue;

        if(a[i]>10)

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

       }

      *x=j;

    }

    void main()

    {int a[10]={3,15,32,23,11,4,5,9},b[10];

     int i=0,x=0;

     fun(a,b,&x);

     for(i=0:i<x;i++)

      printf("%d\t",b[i]);

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

    }

 

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

    #include<stdio.h> 

    int fun(int *x,int n)

    {if(n==0) return x[0];

     else return x[0]+fun(x+1,n-1);

    }

    void main()

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

    printf("%d\n",fun(a,2));

10.以下程序运行时输出到屏幕的结果是(11) 

    #include<stdio.h>

    long f(int n)

    {static long s;

    if(n==1) return s=2;

    else return ++s;

    }

    void main()

    {long i,sum=0;

     for(i=1;i<4;i++,) sum+=f(i);

     printf("%ld",sum);

    }

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

    #include<stdio.h>

    #define f(x,y) y=x*x

    void g(int x,int y)

    {    y=x*x;    }

    void main()

    {  int a=2,b=0,c=2,d=0;

       f(a,b);

       g(c,d);

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

    }

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

    #include<stdio.h>

    void main()

    {  int a[3][3]={{3,8,12},{4,7,10},{2,5,11}},i,j,k,t;

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

      for(k=0;k<2;k++)

        for(i=0;i<2-k;i++)

          if(a[i][J]>a[i+1][j]) 

            t=a[i][j],a[i][j]=a[i+1][j],a[i+1][j]=t;

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

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

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

    printf("\n");  

    }

13.以下程序运行时输出到屏幕的结果是( 16 ) 

    #include<stdio.h>

    #include<string.h>

    void main()

    {  int i=0,n=0;char s[80],*p;

       strcpy(s,"It is a book.");

       for(p=s;p!='\0';p++)

         if(*p==' ')

          i=0;

         else

           if(i==0)

            {n++;i=1;  }

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

    }

14.以下程序运行时输_出到屏幕的结果第一行是  (17)  ,第二行是  (18) 

    #include<stdio.h>

    typedef struct fact

    {  int m,z;

    }FACT;

    FACT fun1(FACT t1,FACT t2)

    {FACT t3;

     t3.m=t1.m*t2.m ;

     t3.z=t1.z*t2.m+t2.z*t1.m;

     retum t3;

    }

    FACT fun2(FACT t)

    {int m,n,k;   

     m=t.m;

     n=t.z;

     while(k=m%n)

    {  m=n;n=k;  }

    t.m=t.m/n;

    t.z=t.z/n;

    return t;

    }

    void main()

    {FACT s,s1={8,4},s2={6,5};

     s=fun1(sl,s2);

     printf("%d,%d\n",s.z,s.m);

     s=fun2(s);

     printf("%d,%d",s.z,s.m);

    }

    完善程序

    15.以下程序求方程的一个近似根。root函数采用二分法计算并返回方程f(x)=0[a,b]内的一个近似根,main函数调用root函数求方程cos(x)=0[0,3.14]内的一个近似根。

试完善程序以达到要求的功能。

    #include<stdio.h>

    #include<math.h>

    double root(double a,double b,double(*f)(double))

    {double x,y;

     if((19))

      {printf("There is no root between%f and%f",a,b);

       return 0;

      }

    do

    { x=( 20 );

      y=f(x);

      if(fabs(y)<1e-6||fabs(b-a)<le-6) break;

      if((21)<0)b=x;

      else a=x;

    }while(1);

    return x;

    }

    void main()

    {printf("\n x=%f",root(0,3.14,(22));

  16.以下程序在3-50范围内验证:大于等于3的两个相邻素数的平方之间至少有4

素数。例如,35是相邻素数,3^25^2之间有素数1113171923。试完善程序以达到要

的功能。

    #include<stdio.h>

    #include<stdlib.h)

    #include<math.h>

    int prime(int n)

    {int i;

     for(i=2;i<=sqrt(n);i++)

       if((23)) return 0;

     return 1;

    }

    void main()

    {int i,j,k=0,m,n,c,a[30]={0};

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

      if(prime(i)) (24)  ;

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

    {  m=a[i]*a[i];

       n=a[i+1]*a[i+1];

       c=  (25)  ;

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

        if((26)) c++:

       if(c>=4)

         printf("\n  %d*%d-%d*%d:%d",a[i],a[i],a[i+1],a[i+1],c);

       else{printf("Error");exit(0);}

    }

  17.fun函数的功能是删除s指向的链表中满足以下条件的结点:该结点的编号值是奇数

且存放的字母ASCII编码值也为奇数(提示:aASCII编码是97);将删除的结点添加到t

指向的链表尾部。试完善fun函数以达到要求的功能。

  例如,若删除前的s链表为:

 s à1  a    à2  b  à3  b   à  4  c  0

则删除后的s链表为:

 sà2  b  à3  b  à4  c  0

    #include<stdio.h>

    struct node

    {int i;    /* 存放结点的编号 */

     char c:    /* 存放一个字母的ASCII编码 */

     struct node *next;

    };

    struct node *t=NULL:

    struct node *fun(struct node *s)

    {struct node *p,*q;struct node *r;

     p=q=s;

     while(p!=NULL)

     {if(((pài)%2)&&((pàc)%2))

      {if(s==p)

        s=q=( 27 );

      else

      {  ( 28 )  ;

         q=p->next;

      }

      if(t==NULL)

        t=r=p;

      else

       {  r->next=p;    r=r->next;  }

    }

    p=(29)  ;

    }

    if(t!=NULL)

    ( 30 )    ;

    return s;

    }

      参考答案

一、选择题

1.A 2.D 3.A 4.B 5.D 6.C 7.B 8.B 9.B 10.D 11.C 12.B 13.A 14.D

15.C  16.D  17.C  18.A  19.B  20.B

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

二、填空题

(1)!    (2)8

(3)sqrt(fabs(x))!=4*a/(b*c)sqrt(fabs(x))!=4*a/b/c

<4)1,2    (5)auto

(6)123,456    (7)2

(8)15 23    (9)2

(10)6    (11)9

(12)4    (13)0

(14)2 5 10    (15)4 8 12

(16)4    (17)64,48

(18)4,3    (19)f(a)*f(b)>0

(20)(a+b)/2 (21)y*f(a)f(x)*f(a)

(22)cos    (23)n%i==0!(n%i)

(24)a[k++]=ia[k]=i,k++

(25)0    (26)prime(j)

(27)p->next    (28)q->next=p->next

(29)p->next    (30)r->next=NULL