江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2009江苏省计算机等级考试C语言考前冲刺模拟试卷3

考试模拟试题3

1.下列关于信息的叙述错误的是____(1)__

A.      信息是指事物运动的状态及状态变化的方式

B.       信息是指认识主体所感知或所表述的事物运动及其变化方式的形式、内容和效用

C.       在计算机信息系统中,信息是对用户有意义的数据,这些数据将可能影响到人们的行为与决策

D.      在计算机信息系统中,信息是数据的符号化表示

2.下列关于集成电路的叙述中错误的是____(2)____

A.将大量晶体管、电阻及互连线等制作在尺寸很小的半导体单晶片上就构成集成电路

B. 现代集成电路使用的半导体材料通常是硅或砷化镓

C. 集成电路根据它所包含的晶体管数目可分为小规模、中规模、大规模、超大规模和极大规模集成电路

D. 集成电路按用途可分为通用和专用两大类。微处理器和存储器芯片都属于专用集成电路

3.移动通信指的是处于移动状态的对象之间的通信,下面的叙述中错误的是__(3)______

A.      移动通信始于上世纪20年代初,70~80年代开始进入个人领域

B.       移动通信系统进入个人领域的主要标志就是手机的广泛使用

C.       移动通信系统由移动台、基站、移动电话交换中心等组成

D.      目前广泛使用的GSM是第三代移动通信系统

4.下列不同进位制的四个数中,最小的数是__(4)______

A.二进制数1100010  B. 十进制数65  C. 八进制数77  D. 十六进制数45

5.下面是关于PC机主存储器的一些叙述,其中正确的是_____(5)____

A.主存储器每次读写一个字节(8)

B.主存储器也称内存,它是一种动态随机存储器

C.目前市场上销售的pC机器,其内存容量多数已达128MB

D.PC机的容量总是可扩充的

A.   B.  C.  D.

6.下面关于USB接口的叙述中,错误的是____(6)______

A.USB2.0的数据传输速率比USB1.1快的多

B.USB具有热插拔和即插即用功能

C.主机不能通过USB连接器向外围设备供电

D.从外观上看,USB连接器要比PC机的串行口连接器小

7.下列关于目前流行的台式PC机主板的叙述,正确的是_______(7)____

主板上通常包含微处理器插座和芯片组

.主板上通常包含内存储器(内存条)插槽和BIOS ROM芯片

.主板上通常包含PCI(PCI-E)总线插槽

.主板上通常包含IDE(SATA)连接器

A  B.   C.   D.

8.为了读取硬盘存储器上的信息,必须对硬盘盘片上的信息进行定位,在定位一个扇区时,不需要以下参数中的_____(8)___

A.      柱面(磁道)号

B.       盘片(磁头)号

C.       通道号

D.      扇区号

9.下列各类存储器中,____(9)____在断电后其中的信息不会丢失。

A.寄存器  B. Cache  C. Flash   ROM  D. DDR SDRAM

10. 下列关于操作系统处理器管理的说法中,错误的是____(10)___ 

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

B.       分时是指将CPU时间划分成时间片,轮流为多个程序服务

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

D.多任务处理都要求计算机必须有多个CPU

11.在下列有关程序设计语言及其处理程序的叙述中,错误的是_(11)_。

A.用多种不同的汇编语言编写一个程序称为"交叉汇编"

B.汇编语言是一种用助记符号表示的、与机器语言接近的符号语言

C.机器语言指令是由一串“0”和“1”组成的二进位代码

D.编译程序应具有词法分析和语法分析功能

12.以下关于局域网和广域网的叙述中,正确的是____(12)___

A.      广域网只是比局域网覆盖的地域广,它们所采用的技术是相同的

B.       家庭用户拨号入网,既可接入广域网,也可接入局域网

C.       现阶段家庭用户的PC机只能通过电话线接入网络

D.      个人不允许组建计算机网络

13.将异构的计算机网络进行互连通常使用的网络互连设备是_____(13)___

A. 网桥  B. 集线器  C. 路由器  D. 中继器

14.TCP/IP网络中,任何计算机必须有一个IP地址,而且__(14)______

A. 任意两台计算机的IP地址不允许重复

B. 任意两台计算机的IP地址允许重复

C. 不在同一城市的两台计算机的IP地址允许重复

D. 不在同一单位的两台计算机的IP地址允许重复

15. 当网络中的两台计算机之间需要互相传送多个文件时,一般应使用_______(15)____服务

A.www      B.Telnet        C.FTP     D.电子邮件

16. 在浏览器的地址栏中输入想要浏览的网页URL时,不能缺省的输入是___(16)_____

A.执行的传输协议

B.网页所在的Web服务器的域名或IP地址

C.端口号

D.网页的文件名和查找路径

17. 下面关于我国汉字编码标准的叙述中,错误的是__  (17)_________

A.GB2312国标字符集所包含的汉字许多情况下已不够使用

B.GBK字符集既包括简体汉字,也包括繁体汉字

C.GB18030编码标准中所包含的汉字数目超过2万个

D.无论采用上述哪一种汉字编码标准,汉字在计算机中均采用双字节编码

18. 下列关于计算机合成图像(计算机图形)的应用中,错误的是__(18)_______

A.      可以用来设计电路图 

B.       可以用来生成天气图

C.       计算机只能生成实际存在的具体景物的图像,不能生产虚拟景物的图像

D.      可以制作计算机动画

19.计算机中用于描述乐谱并由声卡合成出乐曲的一种专用语言,称为_____(19)_____

A.MP3   B.JPEG2000    C.MIDI    D.XML

20.PC机中安装视频输入设备就可以获取数字视频,下面关于视频获取设备的叙述中,错误的是____(20)_________

A.视频卡能通过有线电视电缆接收模拟电视信号并进行数字化

B.视频卡一般插在PC机的PCI插槽内

C.数字摄像头必须通过视频卡与PC机相连接

D.数字摄像头拍摄的数字视频可通过USBIEEE1394接口直接输入计算机

二:c语言程序设计

21.一个用c语言编写的程序,____________是必不可少的

A.取名为main的函数定义        B.#include <stdio.h>      C.变量声明  D.注释

22.已有枚举类型定义:"enum letter{ABC=7DE}",以下表达式中除(22)外,其他表达式的机内值均等于10

  A'\xb'-1    BB+E    C010+2    D0xf-3

23.以下声明中正确的是(23) 

  Aint n=2a[n]={10}    Bint n=10*p[2]=&n

  Cint n=10a[2]={n}Dint a[2][2]={lO}(*p)[2]=a+1

24.若有函数fun的定义为

    void fun(…)

    {static int a=1

       ...

    }

  则下列叙述中不正确的是  ( 24) 

  A.在每次调用fun函数时,变量a的值是上次调用结束时a的值

  B.在fun函数之外,可以用变量名a直接引用a的值

  c.在其他函数中,可以出现声明double a=25

  Dfun函数的形式参数不能取名为a

 25.已知数据类型定义和变量声明如下:

    struct sk   

    {int afloat b} data[2]*p   

    若有P=data,则以下对data[0]中成员a的引用中错误的是:(25)

    Adata[0]->a    Bdata->a    CP->a    D.(*p).a

 26.以下单目运算符均只需妻一个操作数,其中要求操作数的类型只能是指针型的是

    (26)   

    A&    B++    C!    D.*

27.已知有声明"int good=1",若要使得表达式"P="good"+good"无语法错误(包括警告错

    )P应当声明为( 27)

    Achar p    Bchar *p    Cint pD.int*p

28.已知有声明"char c='1',;int x=300float t=35000double d=3.1234567e10",则以下表达

    式求值时除  ( 28 )  外其结果都可能是不准确的。

    Ax=t/c    Bt=d/x    Ct=d/le5f   D.t=x+c

 29.已有预处理命令和声明如下:

    #define N 10

    int a=2c=1

    double b=1.2

    下述程序段正确的是(29)

    Aswitch(a)                Bswitch(a)

       {case c a--break       {case N>0a=1break

        case c+1:a++break        case 1    a=Obreak

       }                            }

C. switch(a)                                 D.switch(b)

   {                                            {  case 1.0:  b++;break;

      case 2:  b++;break;                          case 1.2: b=1;break;

      case '0': b=3;                            }

   }

30.若有以下声明和定义:

    void fun(int c){prinff("%d"C)}

    main()

    {void(*a)(int)=fun*b(int)(*c)(int)

    /*调用fun函数语句位置*/

    }

    void*b(int C){}

  如果在main函数中需要调用fun函数,以下调用语句中错误的是_______(30)______ 

  Afun(1)    B(*a)(1)    Cb=fun(*b)(1) 

Dc=a(*c)(1)

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

●基本概念题(5)

1.若有声明"char a=0int b=1float c=2double d=3",则表达式"c=a+b+c+d"值的类型

  (1) 

2.若某个程序运行时创建了多个输入流,当执行到程序中的scanf函数时,只有在  (2)

  人流为空时才会暂停程序运行而等待输入。   

3.执行"printf("%d%d"ijkm)"后在屏幕上将输出_____(3)______个整数。

4.设已有非空文本数据文件fileldat,要求能读出文件中原有的全部数据,并在文件原有数据

  之后添加新数据,则用FILE *fp=fopen("fileldat", ____(4)_________  )打开该文件。

5.若有函数定义int f(){int x=4y=3z=2return xyz},则调用函数f后的返回值是

    (5)  

●阅读程序题(13)

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

    #include<stdioh>

    #define M 3

    #defme N M+1

    #define NN N*N/2

    main()   

    {printf("%d\n"NN);}

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

#include <stdio.h>

  main()

    {char a=256

     int d=a

     prinff("%d"d+1)

    }   

  8•有如下程序,假定所用编译系统用两个字节存储一个int型操作数,已知输出结果第一行是FFD2,则第二行应当是( 8)

    main()

    {int a[10]={1234567890}*p

     P=&a[5]   

     printf("%X\n"p)printf("%X\n",p-1);

 9•以下程序运行时输出结果的第一行是(9)  ,第二行是(10)

    int C

    void fl(int xint *sum)

    {static int y

     x++y++c=c+y

     *sum=(x+y)/c

    }

 

    main()

    {int ab=100

     for(a=Oa<2a++)

     {f1(a&b)printf("%d%d%d\n"abc)}  

10.以下程序运行时输出结果的第一行是___(11)_______,第三行是______(12)__________

    #include<stdioh> 

    void mat_change(int b[4][4])

    {int ijmnkc[6][6]

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

      for(j=0j<6j++) c[i][j]=1

for(i=1i<5i++)

       for(j=1j<5j++)  c[i][j]=b[i-1][j-1]

    for(i=1i<5i++)

      for(j=1j<5j++)

      {if(c[i][j]==0)

        {k=0

          for(m=-1m<=1m++)

            for(n=-1n<=1n++)

                 if(!(m==O&&n==O))k=k+c[i+m][j+n]

          if(k==8)c[i][j]=1

        }

       }

    for(i=1i<5i++)

      for(j=1j<5j++)

         b[i-1][j-1]=c[i][j]

    }

    main()

    {int i,ja[4][4]={{01}{111l}{0101}{0111}}

    mat_change(a)

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

     {for(j=0;j<4j++)printf("%d"a[i][j])

     printf("\n")

     }

    }

11.以下程序运行时输出结果是(13) 

    #include<stdioh>

    void f(int a[]int nint xint *c)

    main()

    {int a[10]={1,3,52353741}t=0 

     f(a105&t)printf("%d"t)

    }

    void f(int a[]int nint Xint *c)

    {if(n==0)return

     if(a[O]>=x)(*c)++

     f(a+1n-1xc)

    }

12.以下程序运行时输出结果的第一行是  (14)  ,第二行是(15)  ,第三行是(16)

    #include<stdioh> 

    typedef struct s

    {

       int index;

       int value;

    }M;

   

    main()

    {static int ijkc[4][4]

    M a[10]={{0,1}{3,2}{5,3}{64}{95}{156}{-l0}}*p=a

      b[10]={{11}{3,2}{4,3}{6,4}{lO5}{136}{-10}}*q=b

    while(p->index!=-1) 

    {

      i=p->index/4;

      j=p->index%4;

      c[i][j]=P->value

      p++;

    }

    while(q->index!=-1)

    {

       i=q->index/4;

       j=q->index%;

       c[i][j]+=q->value;

       q++;

    }

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

   {

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

      printf("%d"c[i][j])   

    printf("\n");

   }

 }

13.以下程守运行时输出结果的第一行是__(17)______ ,第二行是____(18)________ 

    void q(char *sint left, int right)

    { int i,j;

      char x,y;

      i=left; j=right;

      x=s[(1eft+right)/2]

      do

      {while(s[i]>x&&i<right)i++

       while(s[j]<x&&j>left)j--

  if(i<=j)

    { y=s[i]

      s[i]=s[j]

      s[j]=y

      i++j--

    }

    }while(i<=j) 

   }

    main()

    {char strl[6]="abcde"str2[7]="25134"

     q(strl04)puts(strl)

     q(str214)puts(str2)

    }

●完善程序题(12)    7

14.如果一个两位整数是质数,将组成它的两个数字交换位置后形成的整数仍为质数,则称这 样的数为绝对质数。例如,13就是一个绝对质数。以下程序用于找出所有两位绝对质数。

    #include<stdioh>

    int a_prime(int n)  

    {int jkm[2]

     m[O]=n

     m[1]= _____(19)_______

     for(j=0j<2j++)

        for(k=m[j]/2k>1k--)

            if(    (20)    )return 0

        return 1

    }

    main()

    {int i

    for(i=10i<100i++)

         if(a_prime(i))printf("%d"i) 

    }   

        20  i

15.计算∑  n!的值,即求(1!)+(1!+2!)+(1!+2!+3!)++(1!+2!+3!++20!)

        i=1 n=1

    main()

   {int indouble s=0t

    for(i=1i<=20i++)

    {  ________(21)__________

      for(n=1_____(22)___________  n++)

      {  t=t*ns=s+t}

    } 

    printf("1!+(1!+2!)++(1!+2!++20 !)=%e\n"s)

    }   

16.以下程序中函数strmerge的功能是:合并ab两个有序的字母字符串(字典序)而产生一

  个新的字符串,在合并的过程中删除重复出现的字符,合并后的字符串仍然保持原序并保

  存到c指向的数组中,函数返回在合并过程中删除的字符个数。main函数中输出合并后

  的字符串“copy”以及在合并过程中删除的字符个数3

    include<stdioh>

    int strmerge(char *achar *bchar *c)

    {int i=0j=0k=Ochar t

    while(a[i]!='\0' &&  (     22       )

    {if(a[i]==b[j])

      {t=a[i]i++

         (   24        )

      }

    else   

        if(a[i]<b[j])

           t=a[i++] 

        else

          t=b[j++]

     if(t!=c[k-1])

          (       25       )    =t   

    }

    while(a[i])

      if(a[i]!=c[k-1])

       c[k++]=a[i++]

      else

         i++

    while(b[j])

      if(b[j]!=c[k-1])

        c[k++]=b[j++]

    else

      j++

    e[k]='\0'

    return    (       26      ) 

    }

    main()

    {static char s1[10]="ccp"s2[10]="oppy"s3[20]int n

     n=strmerge(sls2s3)

     puts(s3)

     printf("%d"n)

    }

17.设某链表上每个结点的数据结构为

    typedef struct node

    {int d  

     struct node *next

    }NODE

    函数NODE *invert(NODE *head)的功能是:将head指向的单链表逆置,即原链表最后一

个结点变为第一个结点,原来倒数第二个结点变成第二个结点,以此类推。在逆置过程中不建

立新的链表。

    NODE *invert(NODE *head)

    {NODE *P*q*r

     if(head==0||  (      (27)    )

       return head

     P=head

     q=P->next

     while(q!=0)

     {r=    (       28        ) 

      q->next=pp=qq=r

     }

    (    29      )    =O

    head=  (           30         ) 

    return head

    }  

 

 

 

 

 

答案:

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

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

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

(1)float  (2)标准  (3)2  (4)”a+”  (5)2  (6)6  (7)1  (8)FFD0   (9)021  (10)113

(11)1100  (12)0111  (13)3  (14)1104  (15)3380  (16)0550  (17)edcba  (18) 25431

(19)n/10+n%10*10  (20)m[j]%k==0  (21)t=1  (22)n<=i  (23)b[j]!=’\0’ (24)j++

(25)c[k++]  (26) i+j-k  (27)head->next==0  (28)q->next (29)head->next (30) p 

 

上机模拟试卷一:

改错题:(20)

以下程序检查地名登记表,使每个地名只登记一次,并输出登记表内容

函数del_line删除s指向的n行字符串中重复出现的字符串,只保留第一次出现的字符串

若程序正确,运行后输出结果应为:shanghai beijing nanjing

含有错误的源程序如下:

#include <stdio.h>

#include <string.h>

 

int del_line(char s[10][ ],int n)

{

  int i,j,k;

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

  {j=i;

   while(j<n)

     if(strcmp(s[i],s[j])==0)

     {for(k=j;k<n;k++) s[k]=s[k+1];

       s[k][0]=0;n--;

     }

     else j++;

  }

  return n;

}

 

main()

{

  char line[10][10]={“shanghai”,”beijing”,”nanjing”,”shanghai”,”nanjing”};

  int k,n=5;

  n=del_line(line,n);

  for(k=0;k<n;k++)  puts(line);

}

将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。

2•改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译

   预处理命令,但不能增加其他语句,也不能删去整条语句。

  3.改正后的源程序(文件名myflc)必须放在考试软盘的根目录下,供阅卷用,否则不

  予评分。

二:编程题(20)

1.        编写函数int gcd_max(int a[ ],int b[ ],int n),求长度为n的数组a中所有相邻两元素的最大公约数(n-1),并将之依次保存到数组b中,函数返回b数组中最大数的下标

2.        编写函数main函数,声明一个数组并用以下测试数据对其初始化,调用函数gcd_max,将求得的所有公约数,最大公约数及其下标写入文件myf2.out中。

例如:输入测试数据3,6,4,16,8,5,15,10,12,18,则输出结果应为:3,2,4,8,1,5,5,2,6,max1=3,max=8

1.将源文件取名为myf2c,输出结果文件取名为myf2out   

2.数据文件的打开、使用和关闭等操作均用C标准库中缓冲文件系统的文件操作函数

实现。

3.源程序文件和运行结果文件均须保存在T:盘的根目录下,供阅卷用。

4.不要将myf2objmyf2exe保存到T:盘中。

 

 

改错答案:

(1)         int del_line(char s[10][ ],int n)修改为: int del_line(char s[ ][10],int n)

(2)         j=i;  修改为:j=i+1;

(3)         s[k]=s[k+1]  修改为:strcpy(s[k],s[k+1])

(4)         puts(line); 修改为: puts(line[k]);

编程题答案:

#include "stdio.h"

 

int gcd_max(int a[ ],int b[ ], int x)

{

int i,k=0,t,r,m,n;

int max,maxk;

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

{

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

  if(m<n) t=m,m=n,n=t;

  r=m%n;

  while(r!=0)

  {

    m=n;n=r;r=m%n;

}

b[k++]=n;

}

max=b[0]; maxk=0;

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

  if(max<b[i]) max=b[i],maxk=i;

return maxk;

}

 

main()

{

  FILE *fp;

  int a[10]={ 3,6,4,16,8,5,15,10,12,18},i,k;

  int b[9]={0};

  if((fp=fopen("myf2.out","w"))==NULL)

  {

     printf("Create file myf2.out failed!\n");

     exit(0);

  }

  k=gcd_max(a,b,10);

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

  {

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

    fprintf(fp,"%5d",b[i]);

  }

  fprintf(fp,"\n");

  fprintf(fp,"max1=%d,max=%d\n",k,b[k]);

  fclose(fp);

}