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

考试模拟1

 

1.以下关于微电子技术的叙述中,错误的是_____________

集成电路芯片是微电子技术的结晶,它是计算机和通信设备的硬件核心,是现代信息产业的基础

集成电路根据包含的电子元件数目分为小规模,中规模,大规模、超大规模和极大规模集成电路

小规模集成电路以简单的门电路或单级放大器为集成对象

随着微米、亚微米量级的微细加工技术的采用和硅抛光片面积的增大,集成电路的规模越来越小

2.以下关于通信技术的叙述中,错误的是_________________

通信系统中被传输的信息必须以某种电(或光)信号的形式才能通过传输介质进行传输

多路复用技术有两种,时分多路复用和频分多路复用,其中频分多路复用是指以事先规定的顺序轮流使用同一传输线路进行数据传输

模拟通信的优点是结构比较简单,成本低,数字通信传输的是数字信号

微波是一种极高频率的电磁波,波长很短,通常为1m—1mm

3.使用8个二进制位来表示整数的编码时,十进制-88对应的原码与补码分别是_______

A.11011000 10100111           B.0101100010101000

C.11011011 10100111           D.1101100010101000

4. .PC机中,各类存储器的速度由高到低的次序是________

A.Cache、主存、硬盘、软盘

B.主存、Cache、硬盘、软盘

C. 硬盘、Cache、主存、软盘

D. Cache的、硬盘、主存、软盘

5.下面关于计算机局域网特性的叙述中,服务错误的是________

A. 数据传输速率高

B. 通信延迟时间短、可靠性好

C. 可连接任意多的计算机

D. 可共享网络中的软硬件资源

6. 下列关于计算机组成及功能的说法中,正确的是__________

A.一台计算机内只能有一个CPU

B.外存中的数据是直接传送给CPU处理的

C. 多数输出设备的功能是将计算机中用“0和“1表示的信息转换成人可直接识别的形式

D. I/O设备是用来连接CPU、内存、外存和各种输入输出设施并协调它们工作的一个控制部件

7. .键盘、显示器和硬盘等常用外围设备在操作系统启动时都需要参与工作,所以它们的驱动程序都必须预先存放在________中。

A. 硬盘 B. BIOS ROM  C. 内存   D. CPU

8.在计算机加电启动过程中,1.POST程序、2. 操作系统、3.引导程序、4.自举装入程序,这四个部分程序的执行顺序为________

A. 1234  B. 1324  C. 3241  D. 1432

9.以下关于操作系统中多任务处理的叙述中,错误的是:________

A. CPU时间划分成许多小片,轮流为多个程序服务,这些小片称为"时间片"

B. 由于CPU是计算机系统中最宝贵的硬件资源,为了提高CPU的利用率,一般采用多任务处理

C. 正在CPU中运行的程序称为前台任务,处于等待状态的任务称为后台任务

D.在单CPU环境下,多个程序在计算机中同时运行时,意味着它们宏观上同时运行,微观上由CPU轮流执行

10.广域网是一种跨越很广的的计算机网络,下面关于广域网的叙述中,正确的是___________

A.广域网是一种公用计算机网,所有计算机都可无条件的接入广域网

B.广域网使用专门的通信线路,数据传输更高

C.广域网能连接任意多的计算机,也能将相距任意距离的计算机互相连接起来

D.广域网像很多局域网一样按广播方式通信

11.当局域网中一台计算机向同一网络中的另一台计算机发送数据帧时,在数据帧中必须包含发送方主机和接收方主机的_____________

A.MAC地址   B.IP地址    C.域名   D.计算机名

12.网络服务是指用户通过计算机网络在共享资源及数据通信方面能够得到的新增功能,下面关于网络服务的叙述中,错误的是_____________

A.文件服务允许网络用户使用网络上其他计算机中可共享的程序和数据

B.应用服务是指网络用户需要执行的某项任务,部分甚至全部可由网上的另一台计算机完成

C.连接在网络上的计算机只要有帐号就可以获得他所需要的服务

D.消息服务允许网络用户之间能相互通信,互相传递消息

13.以下汉字编码中,不再我国大陆使用而在台湾与香港地区使用的是___________

A.GB18030         B.GBK       C.GB2312          D.BIG5

14.以下关于图像与图形说法错误的是_____________

A.图像获取的过程实际上是模拟信号的数字化过程

B.一幅取样图像由M*N个取样点组成,每个取样点表示一个像素

C.数据压缩分为无损和有损压缩,有损压缩是指对压缩的图像还原时,会影响到人们对图像的正确理解

D.BMP是微软公司在Windows操作系统下使用的一种标准图像文件格式

15.以下对数字声音的叙述中错误的是______________

A.声音信号的数字化过程包括:取样,量化,编码

B.声卡既参与声音的获取也负责声音的重建

C.声音的重建是声音信号数字化的逆过程,分为三步:解码,数模转换,插值处理

D.声音的获取设备包括麦克风和声卡,麦克风的作用是把电信号转换为声波

16.彩色图像所使用的颜色描述方法称为颜色模型,显示器使用的颜色模型为RGB三基色模型,彩色喷墨打印机在打印彩色图像时所使用的颜色模型是___________

A.YUV     B.HSB       C.CMYK          D.RGB

17.人们说话时所产生的语音信号必须数字化之后才能由计算机存储和处理,假设语音信号数字化时的取样频率为8KHZ,量化精度为8位,数据压缩倍数为4倍,那么1分钟数字语音的数据量是___________

A960KB     B.480kb         C.120kb         D.60kb

18.把全局E-R模型图转化称关系模式的结构,属于数据库系统设计的________

A.逻辑结构设计     B.概念结构设计     C.物理结构设计     D.程序结构设计

19. 下列有关Windows98/2000/XP操作系统的叙述中,错误的是_________________

 A.任务栏上的“快速启动”工具栏可以关闭。

 B.对于中文版的Windows操作系统来说,任务栏上显示的输入法指示图标不能被关闭。

 C.即使计算机未物理连接打印机,也可以安装多个打印机驱动程序。

 D.在“我的电脑”的“属性”窗口中可以查看当前计算机的内存的大小

20. Windows操作系统和Office软件环境下操作时,下列操作中不能实现的是 _____________

  A.在“Windows资源管理器”窗口中同时选中多个不连续的文件与文件夹。

  B.Word编辑窗口中同时选定多个不连续的段落。

  C.Word编辑窗口中同时选定多个绘制的图形对象。

D.Excel编辑窗口中同时选定多个不连续的单元格。

 

C程序设计部分

一:选择题:

21.当需要定义一个函数时,以下标识符中,__________21___________不能用作函数名。

A.scanf     B.for        C._sum             D.F2

22.已有声明语句”unsigned char ch;”,与表达式”ch=’B’”的值不相同的表达式是_____(22)______(注释:字符AAscii码以十进制表示为65)

A.ch=0x42        B.ch=0102          C.ch=’\102’           D.ch=066

23.若要对a进行++运算,则a应具有以下说明_______(23)_______

A.int a[3][2]            B.char *a[]={“12”,”ab”};

C.int b[10],*a=b;        D.char  (*a)(char);

24.以下对于break语句使用的正确描述是______(24)___________

A.可以出现在程序中的任何位置         B.只能出现在循环或switch结构中

C.只能出现在switch结构中             D.只能出现在循环结构中

25.若有声明语句”int a=5,b=4,c=3,*p=&a;”,则下列________(25)__________表达式语句是正确的。

A.(*p)++=c;

B.*(*p)++;

C.printf(a%4= =0?”%3d\n”:”%3d”,*p);

D.a>20?return *p-20:return *p-1;

26.”int x=2,y=3,z=(++x<=y--)?((--y= =1)?y--:--y):y--;”,x,y,z的值为____________

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

27.下列程序段执行后的结果为____(27)__________

main()

{

  struct int a[3][3]={1,3,5,7,9,11,13,15,17},y,x,*p=&a[2][2];

  for(x=0;x<3;x++) y+=*(p-4*x);

  printf(“\n%d”,y);

}

A.45  B.33       C.17         D.27

28.设有函数f的定义如下;

    void f(int x,int *y)

    {  *y=x*x*x;}

    main()

    {int i,c[4]={1,2,3,4},s[4]={0};

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

    {______________/*调用f函数*/

    printf("%d",s[i]);}

    若在main函数中欲调用f函数,则正确的调用语句是 ____(28)______

    A.f(c,s);           B.f(c[i],s[i]);

    C.f(*(c+i),&s[i]);  D.f(c+i,s+i);

29.设有定义如下;

    typedef stuct{int x,y;}POINT;

    typedef enum{RED,YELLOW,BLUE,GREEN}COLOR;

    struct

    {POINT xy;COLOR c;}pixel,*p=&pixel;

    以下对变量pixel的赋值操作中正确的是  (29) 

    A.pixel={1,2,BLUE};

    B.P->xy.x=1;p->xy.y=2;p->c=BLUE;

    C.scanf("%d%d%d",P->xy.x,P->xy.y,&pixel.c);

    D.scanf("%d%d,,,&pixel.xy);pixel.color=2;

30.执行了以下程序段后,xw的值为___(30)_________

    int x=0,y=1,z=2,w;

    if(x++) w=x;

    else if(x++&y>=1) w=y;

    else if(x++&&z>1) w=z;

  A.01    B.11    C.21  D.32

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

●基本概念题(5)

1.一个用c语言编写的程序必须有-个并且只能有-_____(1)____函数。

2.若有定义"int k=1;",执行语句"while(k++<5);",k的值为______(2)_____

3.在程序中需要调用库函数sqrt时必须包含头文件:_____(3)________ 

4.已知声明语句:"FILE *fpl,*fp2;long a[2]={12345678,12345678};",当执行了以下语句

  ,文件f1.datf2.dat长度分别是____(4)_____字节和____(5)______字节。

    fpl=fopen("f1.dat","w");fprintf(fpl,"%ld%ld",a[0],a[1]);fclose(fpl);

    fp2=fopen("f2.dat","wb");fwrite(a,sizeof(long),2,fp2);fclose(fp2);

●阅读程序题(7)

5.以下程序运行后输出____(6)____

    #include<stdio.h>

    int f(char *sl,char *s2)

    {static int nl,n2;

    while(*s1++)n1++;

    while(*s2++)n2++;  

    return n1-n2;

    }

    main()

{printf("%d",f("c:\\program","\12a\t34\n"));}

6•下列程序执行后,x的值为____(7)______

   main()

    {int x,y;

    for(x=1,y=1;x<=100;x++) 

    {if(y>=20)break;

    if(y%3==1){y+=3;continue;}

    y-=5;

    }

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

    }

7.以下程序运行时输出_____(8)________

    #include<stdio.h>

    #include<string.h>

    main()

    {char s[20]="acef",sl[]="bd"

    int i,j,k;

for(k=0;sl[k]!='\0';k++)

{j=0;

    while(sl[k]>=s[j]&&s[j]!='\0')j++;

    for(i=strlen(s);i>=j;i--)s[i+1]=s[i];

    s[j]=sl[k];

  }

    puts(s);

 }

8.以下程序运行时输出结果的第-行是___(9)_____,第二行是____(10)______

    int m=5,n=7,a[10]={0,1,2};

    void fl(void);

    void f2(int m);

 

    main()

    { int i;

      for(i=0;i<7;i++)fl();

      f2(1);printf("\n%d,%d",a[m],a[n]);

    }

    void fl(void)

    {static int n=3;

      a[n]=a[n-1]+a[n-2]+a[n-3];n++;

    }

    void f2(int m)

    {for(;m<3;m+=2)

      {int m;

        for(m=1;m<4;m++)

          printf("%d,",a[m++]);

      }

    }

9.以下程序运行后输出结果的第-行是__(11)_____,第二行是___(12)______

    extern int m1,m2;

    void fun(int n,int *p1,int *p2)

    {int i;

      *p1=1;*p2=1;

      for(i=1;i<=n;i++){*p1+=3;*p2*=3;}

       m1+=*p1;m2+=*p2;

    }

    int m1,m2;

    main()

    {

      int i,k1[4],k2[4];

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

         fun(i,&k1[i],&k2[i]);

      for(i=0;i<4;i++) printf(“%d,”,k1[i]);

      printf(“%d\n”,m1);

      for(i=0;i<4;i++) printf(“%d,”,k2[i]);

      printf(“%d”,m2);

    }

完善程序题(共18分)

10.以下程序中函数encode完成一个字符串的加密功能,将s1字符串中的字符经过变换后保存到s2指向的字符数组中,二维数组cs保存了一个明码密码对照表,第一行是明码字符,第二行是对应的密码字符,加密方法如下:从s1字符串中每取一个字符,均在cs表第一行中查找有无该明码字符,若找到则将对应的密码字符放入s2中,否则将s1中原来的字符放入s2中。

#include <string.h>

#include <stdio.h>

char cs[2][10]={“aceghjlnp”,”fonptiude”};

 

void encode(char *s1, char *s2)

{

  int n,i,j;

  for(n=0;s1[n]!=’\0’;n++)

  {

for(i=0;i<10&&s1[n]!=cs[0][i];_______(13)____)

     if(i<10)  s2[n]=______(14)_____;

     else s2[n]=______15_______;

  }

  s2[n]=’\0’;

}

 

main()

{

  char ts[80]=”jntwrnwt”, td[80];

  encode(ts,td);

  puts(td);

}

11.以下程序依次输入某单位每位职工的姓名和工资数(整型数),然后计算发放工资时所需

  发给每位职工的不同面值的纸币张数,并计算工资总和以及累计所需不同币值的张数

    #include<stdio.h>

    #include<string.h>

    struct{

       char name[10];    /*姓名*/

       int total;    /*工资数*/

       int mnum[7];    /*发放工资时所需不同币值的张数*/

       }st[21];

    int mvalue[7]={100,50,20,10,5,2,1};

 

    main()

    {FILE *fp;

    int n=0,i,j,wage;   

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

    if(fp= =NULL)exit(1);

    while(!feof(fp))

    {fscanf(fp,"%s%d",st[n].name,&st[n].total);

     wage=st[n].total;

     for(j=0;j<7&&wage;j++)

     {st[n].mnum[j]=___(16)_________;

      wage= _____(17)______;

    }

    _________(18)________;

    }

    strcpy(st[n].name,"summary");

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

    {  st[n].total+=st[i].total;

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

         st[n].mnum[j]+=_____(19)_______;

    }

    for(i=O;i<n+1;i++)

    {printf("\n%s%d=",st[i].name,st[i].total);

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

         printf("%d",st[i].mnum[j]);

    }

 }

 

12.以下函数的功能是以十进制字符形式打印出任一int函数

    #include "stdio.h"

 

    void f(int n)   

    {int i;

     if(n<0)

     {putchar('-');____(20)____;}

      if((_____(21)______)!=0)f(i);

      putchar(____(22)_______+'0');

    }

13.以下程序中函数maxmin的功能是:对于x中存储的一个任意的四位整数,求出:(1)组成以这个整数的四个数字由大到小排列后构成的最大的四位数;(2)组成以这个整数的四个

数字由小到大排列后构成的最小的四位数。

    #include <stdio.h>   

    void maxmin(int x,int *pmax,int *pmin)

    {int num[4],i,j,k,temp;

     *pmax=0;*pmin=0;

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

    {num[i]=x%10;x=_____(23)_____;}

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

    {k=i;

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

        if(num[k]<num[j])k=j;

     if(____(24)_____){temp=num[i];num[i]=num[k];num[k]=temp;}

    }

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

    {*pmax=*pmax*10+____(25)____;    /*生成最大的四位数*/

     *pmin=*pmin*10+ _____(26)_______;    /*生成最小的四位数*/

    }

  }

    main()

    {int n=3169,max=0,min=O;

     maxmin(n,&max,&min);

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

    }

14.设某链表上结点的数据结构定义如下:

struct node{

   int x;

   struct node *next;

}  

函数create的功能是:创建一个有序的链表(结点中x的值按升序排序),链表中结点的个数为参数n的值,函数返回该有序链表的头指针。算法思想如下:每产生一个新的结点,插入到链表中的恰当位置,使得插入新结点以后的链表仍然保持有序

_______(27)_______create(int n)

{

  struct node *p,*p1,*p2,*h=NULL; int i=0;

  if(n<1)  return NULL;

  while(______(28)________)

  {

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

    scanf(“%d”,&p->x);p->next=NULL;

    if(h= =NULL)_______(29)____________;

    else

    {p1=p2=h;

     while(p2 &&p->x>=p2->x) {p1=p2;p2=p2->next;}

     if(p2==h){_____(30)____________;h=p;}

     else{p->next=p2;p1->next=p;}

   }

   i++;

   }

 return h;

}

答案:

1.D2.B3.D4.A5.C6.C7.B8.D9.C10.C11.A12.B13.D14.C15.D16.C17.C18.A19.B20.B

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

1main  (2)6  3math.h  (4)16  (5)8  (6)4  (7)8  (8)abcdef  (9)1,3

(10)11,37  (11)1,4,7,10,2  (12)1,3,9,27,40  (13)i++  (14)cs[1][i]  (15)s1[n]

(16)wage/mvalue[j]   (17)wage%mvalue[j]  (18)n++  (19)st[i].mnum[j]

(20)n=-n  (21)i=n/10  (22)n%10  (23)x/10  (24)i!=k  (25)num[i]  (26)num[3-i]

(27)struct node *   (28)i<n  (29)h=p   (30)p->next=p2

改错题目:

下列程序中函数divfun的功能是对于s指向的一个含有数字字符和非数字字符的字符串(串长不超过80),将其中连续的数字字符转换为一个整数,如果连续的数字字符个数超过4个,则以4个数字字符为一组进行转换。将转换后生成的整数一次存放到整型数组a中。函数返回a数组中整数的个数。例如:若输入的字符串”c123yz45! 786 *56abc123456789”,a数组中的数值分别为:{123,45,786,56,1234,5678,9}

#include <stdio.h>

#include <ctype.h>

 

void divfun(char *s, int a)

{

  char *p=s;

  int i=0,k,sum;

  while(*p)

           if(isdigit(*p))

           {

        sum=*p-'0';p++;k=1;

                   while(isdigit(*p))

                   {

                            k++;

                            if(k<=4){sum=sum+*p-'0';p++;}

                            else{a[i++]=sum;

                                     k=1;sum=*p-'0';p++;

                            }

                   }

                   a[i++]=sum;

           }

                  

           else p++;

           return i-1;

}

 

main()

{

  char *str;int i,n,num[40];

  gets(str);n=divfun(str,num);

  puts(str);

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

           printf("%6d",num[i]);

  printf("\n");

}

 

编程题目:

编写函数int value(int bb[ ]),在三位正整数中寻找所有符合以下条件的正整数:它既是完全平方数并且又有两位数字相同。例如:14412的平方并且有两位数字相同,因此144是符合条件的数。将找到的数按从小到大的次序依次存入bb数组中,函数返回bb数组中有效数据的个数

编写main函数,调用函数value,将结果数组中全部有效数据按照每行5个数据的格式保存到文件myf2.out中。

符合上述条件的整数有:100,121,144,225,400,441,484,676,900

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

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

实现。

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

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

 

改错题目答案:

(1) void divfun(char *s, int a) 

    修改为:int divfun(char *s, int a)

(2) void divfun(char *s, int a)

   修改为:int divfun(char *s, int a[ ])

(3) if(k<=4){sum=sum+*p-'0';p++;}

修改为:if(k<=4){sum=sum*10+*p-'0';p++;}

(4) char *str;

    修改为:char str[80];

编程题目答案:

#include <stdio.h>

 

int value(int bb[ ])

{

  int i,i2,j=0,a,b,c;

  for(i=10;i<32;i++)

  {

     i2=i*i;

          a=i2/100;

          b=i2/10%10;

          c=i2%10;

          if((a==b||b==c||c==a)&&!(a==b&&b==c))     /*两个数相同*/

                    bb[j++]=i2;

        

  }

  return j;

}

 

main()

{

         int i,n,zz[32]={0};

         FILE *fp;

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

         {

       printf("Can't open file!");exit(0);

         }

         n=value(zz);

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

         {

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

                   fprintf(fp,(i+1)%5?"%7d":"%7d\n",zz[i]);

         }

         fprintf(fp,"\n");

         fclose(fp);

}