江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2007年春季江苏计算机C语言试题

2007年春江苏省二级考试(C语言理论试题)

(本试卷笔试时间为120分钟)

说明:

1.本试卷包括计算机基础知识部分和程序设计部分。

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

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

  (30)两种。

4.选择题用答题卡答题。每一项有ABcD四个可供选择的答案,请选择其中一个你认

  正确的答案,用HB铅笔或2B铅笔涂写在答题卡的相应答题号内。每选对一项得1分,

  选或选错不得分。

5.填空题用答题纸答题。请将答案用蓝色或黑色笔填写在答题纸的相应答题号内,每个答

  只占一行,不得换行。每填对一个答案得1分,不填或填错不得分。

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

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

  离场。

第一部分基础知识

1.微电子技术是信息技术领域的关键技术,它以集成电路(Ic)为核心。下列有关叙述错误

  (1) 

  A.目前Ic芯片(CPU芯片)的集成度可达数千万个电子元件

  BMoore定律指出,单块IC的集成度平均每半年翻一番

  c.从原料熔炼到最终产品包装,IC的制造工序繁多,工艺复杂,技术难度非常高

  D.非接触式Ic卡采用电磁感应方式无线传输数据,所以又称为射频卡或感应卡

2.下列有关通信中使用的传输介质的叙述错误的是(2) 

  A.计算机局域网中大多使用无屏蔽双绞线,其无中继有效传输距离大约100m

  B.同轴电缆可用于传输电视信号   

  c.光纤价格高,一般不在校园网和企业网中使用

  D.微波的波长很短,适合于长距离、大容量无线通信

3.二进制数(1010)与十六进制数(B2)相加,结果为(3) 

A (273)8   B  (274)8    C (314)8   D(313)8

4.设有一段文本由基本ASCII字符和GB2312字符集中的汉字组成,其代码为B0 A1 57 69 6E D6 DO CE C4 B0 E6,则在这段文本中含有(4) 

  A1个汉字和9个西文字符    B3个汉字和5个西文字符

C2个汉字和7个西文字符    D  4个汉字和3个西文字符

5.下列有关CPU的叙述错误的是(5)

  ACPU的主要组成部分有运算器、控制器和寄存器组

  BCPU的主要功能是执行指令,不同类型CPU的指令系统通常有所不同

  C.为了加快运算速度,CPU中可包含多个算术逻辑部件(ALU)

  D.目前PC机所用的CPU芯片均为Intel公司的产品

6PC机在加电启动过程中会运行POST程序、引导程序、系统自举程序等。若在启动过程中用户按某一热键(通常是Del)则可以启动CMOS设置程序。这些程序运行的顺序是(6)   

  APOST程序--CMOS设置程序---系统自举程序一-引导程序

  BPOST程序--引导程序一-系统自举程序---CMOS设置程序

  CCMOS设置程序一系统自举程序_--引导程序--POST程序

  DPOST程序--CMOS设置程序一引导程序---系统自举程序

7.目前Pc机一般都有USBFireWire接口,用于连接各种外部设备。下列关于这两种接口的叙述错误的是(7)

  AUSB是一种串行接口,可以连接键盘、鼠标器、优盘、数码相机等多种设备

  BFireWire是一种并行接口,通常用于连接需要高速传输大量数量的设备(如音视频设备)

  CUSB 20的数据传输速率是USB 10的数十倍

  D.一个USB接口上可以连接不同的设备   

8.下列关于PC机外存储器的叙述错误的是(8)

  A144MB软盘的每一面有吞0个磁道,每个磁道分为18个扇区,每个扇区512字节

  B.硬盘的主要性能指标之一是平均存取时间,它与硬盘的转速(rpm)有很大关系。

  c.优盘的缺点是:优盘均无写保护功能,且不能起到引导操作系统的作用

  DcD-R是目前常用的可记录式光盘,但其该录的数据不能修改

9.下列关于Windows 98XP操作系统的存储管理功能的叙述错误的是.(9) 

  A.存储管理的功能主要包括内存的分配与回收、共享和保护、自动扩充(虚存的实现)

  B.系统将程序(及其数据)划分成固定大小的页面,以页面为单位进行内存的分配和调度

  c.虚拟存储器采用的页面调度算法是先进先出”(FIFO)算法

  D.在Windows 98Windows XP中,虚拟内存其实就是一个磁盘文件,即交换文件

10.人们常说软件的主体是程序,程序的核心是算法。下列有关程序、算法和数据结构的叙述错误的是.(10)

    A.程序是用程序设计语言对解题对象和解题步骤进行的一种描述

    B.算法和数据结构是设计与编写程序时首先要考虑的两个重要方面

    c.算法是问题求解规则的一种过程描述,它必须有输入,但可以没有输出

    D.数据结构主要是研究数据的逻辑结构、存储结构以及在这些数据上定义的运算

11.下列关于局域网的叙述错误的是(11) 

    A.光纤分布式数字接口网(FDDI)常用于构造局域网的主干部分   

    B.采用红外线或者无线电波进行数据通信,可以构造无线局域网

    C.两个或多个局域网可以进行互连

    D.所有的局域网均为以太网

12·下列有关IP地址、域名和URL的叙述错误的是(12) 

    目前互联网中IP地址大多数使用4个字节(32个二进位)表示

    使用CIP地址的网络规摸最大,一少c类物理网络可以拥有上千万台主机

  C.一台主机通常只能有一个IP地址,但可以有多个域名

  D·URL用来标识WWW网中的每一个信息资源,不同的信息资源对应不同的URL

13·TCPIP协议栈的应用层包括了各种高层协议,其中用于实现网络主机域名到IP地址映射的是(13) 

ADNS    BSMTP  C .FTP    D.Telnet

14·ADSL是一种宽带接入技术,在线路两端加装ADSL MODEM即可实现连网。下列关于  ADsL的叙述错误的是(14)    I

  A.它利用普通铜质电话线作为传输介质,成本较低  

  B.在上网的同时,还可以接听和拨打电话,几乎互不影响   

  从实现的技术上来看,数据的上传速度比数据的下载速度快  

  D.利用ADSL技术上网的用户,其PC机必须安装以太网卡   

15·目前PC机使用的字符集及其编码标准有多种,20多年来我国也颁布了多个汉字编码标准。在下列汉字编码标准中,不支持简体汉字的是(15)      I

AGB2312    BGBK    CBIG5  D. GB18030

 

16.下列有关数字图像的压缩编码和图像文件格式的叙述错误的是  (16) 

  图像压缩的出发点是图像中的数据相关性很强,且人眼的视觉有一定的局限性

  压缩编码方法的优劣主要是看压缩倍数、重建图像的质量和压缩算法的复杂度等

  CJPEG图像的压缩倍数是可以控制的,且大多为无损压缩

  D·GIF格式的图像能够支持透明背景,且具有在屏幕上渐进显示的功能

17.下列有关MIDI音乐的叙述错误的是(17 )

    A·MIDI是一种音乐描述语言,它规定了乐谱的数字表示方法

    B·MIDI音乐的文件扩展名为MIDMIDI

    C·MIDI音乐可以使用Windows中的媒体播放器等软件进行播放

    播放MIDI音乐时,声音是通过音箱合成出来的

18.下列有关中文版Windows 982000xP操作系统功能与操作的叙述错误的是  (18) 

  A·“五笔字型汉字输入法是Windows内置的输入法之一

  画图软件中画圆和正方形时,可在按Shift键的同时用鼠标拖放操作

  资源管理器’’窗口中,按Ctrl键的同时用鼠标单击文件,可以实现该文件的反向选定

  作为虚拟存储器使用的()交换文件可以设置在不同的逻辑硬盘上

19·下列有关Microsoft Word 9720002003功能和操作的叙述错误的是  (19) 

  A·Word文档可以分别设置打开文件时的密码和修改文件时的密码

  页边距的计量单位可以设置为磅、英寸和厘米等

  可以将选中的英文统一设置为小写,或大写,或词首字母大写,或句首字母大写等

  利用工具栏上的格式刷,可以复制字体的格式,但不能复制段落的格式

20.下列有关Microsoft  PowerPoint 9720002003功能和操作的叙述错误的是  (20) 

  APowerPoint文件可以另存为网页文件

  B.演示文稿可以按讲义方打印,且一张纸(A4规格)可以打印多达69张投影爿

  c.演示文稿的放映方式可以设置为循环放映

  D.演示文稿中可以插入声音文件,但不可以录制旁白

 

一、选择题(10分)

21、以下关于C语言源程序的叙述中,错误的是_____。

A.一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义

B.函数定义由函数头部和函数体两部分组成

C.在一个函数定义的函数体中允许定义另一个函数

D.在一个函数定义的函数体中允许调用另一个函数或调用函数本身

22、以下表示中,不能用作C语言常量表示的是____。

A0UL   B.(long123      C1e0      D’\x2a

23、以下标识符中,不能用作变量名或自定义函数名的是___。

Amain      Bscanf         C_float       Dsizeof

24、以下表示数学式“a<B<C”的逻辑表达式中,错误的是____。< P>

Aa<b<c                              Ba<b && b<c

C!(a>=b)&&!(b>=c)                 D!(a>=b||b>=c)

25.以下程序运行后的输出结果是____。

A2   2           B7   2        C7   5         D6   2

main()

{ char a[7]=”a0\0a0\0”;  int i,j;

  i=sizeof(a);   j=strlen(a);

  printf(“%d  %d”,i,j);

}

26.下面关于循环语句forwhiledo_while的叙述中,正确的是____。

A.三种循环语句的循环体都必须放入一对花括号中

B.三种循环语句中都可以缺省循环终止条件表达式

C.三种循环语句的循环体都至少被无条件地执行一次

D.三种循环语句都可能出现无穷循环

27.以下程序段中,有语法错误的是____。

Afun(char aa[10])

   { while(*aa) printf(“%c”,*aa++); }

Bfun( char *aa)

   { while(aa[0]) printf(“%c”,*aa++); }

Cmain()

   { char *aa=”Hello!”;

while(*aa) printf(“%c”,*aa++);

}

Dmain()

   { char aa[10]=”Hello!”;

while(*aa) printf(“%c”,*aa++);

}

28.若有声明“int a[ ]={1,2,3,4},*p,i;”,则以下程序段中不能输出13的是_____。

Afor(i=0;i<4;i+=2) printf(“%d”,a[i]);

Bfor(p=0;p<4;p+=2) printf(“%d”,a[p]);

Cfor(p=a;p<a+4;p+=2) printf(“%d”,*p);

Dfor(p=a,i=0;i<4;i+=2) printf(“%d”,p[i]);

29.若有如下的类型定义和变量声明,则在给出的选项中值不为7的表达式是____。

Aptr->a          B(++ptr)->a          Cx[1].a       Dx[0].b->a

struct ss

  { int a; struct  ss  *b;} x[3]={{5,&x[1]},{7,&x[2]},{9,0}},*ptr=&x[0]; 

30.若需要对一个数据文件abc.txt 中的数据做加密处理并且限定只能做一次打开文件操作,则在“fp=fopen(“abc.txt”,模式字符串)中,模式字符串应当是____。

A”w+”           B”r+”            C”a+”          D”r”

二、填空题(共30分)

1.在声明局部变量时,不能使用的存储类别标识符是__( 1 )__

2.与整型数学算式  等价的C语言表达式是__ _( 2 ) __

3.在以下程序的main函数中,语句"fun(x,10);"内的实参x表示数组x__(3 ) ___

void fun(int a[10],int n)

{int i; for(i=0;i<n;i++)   a[i]++;}

main()

{int x[10]={0}; fun(x,10); }

4.已知程序中有声明“int a; long b;”,若需要接收从键盘输入的电话号码字符串(010)64782656(其中010为区号,64782656是电话号码)并将其中的区号、电话号码分别存储到变量a,b中,则实现该功能的输入语句为"scanf("___( 4 )____",&a,&b);"

5.若要使表达式p="jiangsu"无任何错误(包括语法错误和警告错误),p的声明形式应为__( 5 )_____

阅读程序(13分)

6.以下程序运行后输出结果为__(  6  )____

#include "stdio.h"

int m(int a)

{static int s;

 return(++s)+(--a);

 }

void main()

{int a=2;

 printf("%d",m(m(a)));

}

 

7.以下程序运行后输出结果为___(  7 )___

#include "stdio.h"

enum days{ mon=1,tue,wed,thu,fri,sat,sun}today=tue;

void main()

{printf("%d",(today+2)%7);}

 

8.以下程序运行后输出结果为___(  8  )____

#include "stdio.h"

int mystery(int a,int b)

{if(b==1)  return a;

 else return  a+mystery(a,b-1);

}

void main()

{int x=5,y=3;

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

}

 

9.以下程序运行后输出结果中第一行为____( 9)____,第二行为____( 10 )____

#include "stdio.h"

void main()

{int i=5;

 do

 {switch(i%2)

  {case 0: i--; break;

   case 1: i--; continue;

   }

  i--;

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

  }while(i>0);

}

10.以下程序运行后输出结果中第一行为_____(11)___,第二行为______(12)___ _

#include

int fun(int a[],int n,int b[])

{int i=0,j,m=0,c,x;

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

 {x=a[i]; c=1;

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

    if(a[j]==x)  c++;

    else {i=j-1; break; }

  if(j>=n) i=j;

  if(c==1)  b[m++]=x;

  else  {b[m++]=-c;  b[m++]=x;  }

 }

 return m;

}

void main()

{int x[]={4,4,4,4,4,4,4,4,1,2},y[10],i,j,n=10;

n=fun(x,n,y);

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

 {if(i%2==0)  printf("\n");

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

  }

}

11.以下程序运行后输出结果中第一行为____( 13 )__________,第二行为____( 14 )_____

第三行为____( 15 )___________

#include "stdio.h"

#define N 3

main()

{int a[N][N],b[N*N]={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[j][i]=b[i*N+j];

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

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

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

   printf("\n");

  }

}

12.以下程序运行后输出结果中第一行为__(16)_,第二行为__(17)____,第三行为_(18)____

#include "stdio.h"

#include "stdlib.h"

struct node

{char data; struct node *next; };

struct node *insert(struct node *h,char c)

{struct node *p,*p1,*p2;

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

 p->data=c; p->next=NULL;

 if(h==NULL) h=p;

 else

 {p1=p2=h;

  while(c>p1->data&&p1->next!=NULL)

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

  if(c<=p1->data)

   if(p1==h)  {p->next=h; h=p; }

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

  else

  {p1->next=p; }

 }

 return h;

}

struct node *del(struct node *h)

{struct node *p=h;

 while(p!=NULL)

 {if(p->data%2==0) p->next=p->next->next;

  p=p->next;

 }

 return h;

}

void print(struct node *h)

{struct node *p=h;

 while(p!=NULL)

 {printf("%c",p->data);  p=p->next; }

 printf("\n");

}

void main()

{ struct node *head=NULL;

  char *item="32659",*p=item;

  puts(item);

  while(*p)  head=insert(head,*p++);

  print(head);  del(head); print(head);

}

 

完善程序(12分)

13.以下程序的功能是:用简单迭代法求方程cos(x)-x=0在区间(0,1)上的一个近似实根。迭代公式为:xn+1=cos(xn),(n=0,1,2,...),当xn+1-xn的绝对值小于1e-6时,xn+1即是方程cos(x)-x=0x0附近的一个误差小于1e-6的近似实根(此根的近似值是0.7391)。

#include

#include

float root(float x0)

{float x1;    _____( 19 )________;

 do

 { x0=x1;

   x1=cos(x0);

 }while(____20___________);   

 return x1;

}

void main()

{float x;

 x=__(   21   )__;

 printf("x=%f,cos(%f)-%f=%f",x,x,x,cos(x)-x);

}

14.以下程序的功能是找到具有这样特性的正整数A:若将A的个位数p移到首位,所得到的数为原数的p倍。例如,将102564的个数4移到首位得到410256,而410256=102564*4,因此数102564具有此特性。对于p=2,3,4,5,6,7,8,9均存在具有此特性的整数。但除本例外,其余数的倍数均超过12,不能用普通整型数表示,但可用类似手算的方法找到它们。

函数int serch(int p)的功能是:找到末位数是p且具有上述特性的正整数A,以十进制形式将A保存到数组a中,每个数组元素保存A的一位数(个位数p保存在a[0]中,十位数保存在a[1]中,百位数保存在a[2]中,其他位依次类推)。

算法提示:(1)将p保存到a[0],将a[0]a[1]的进位值置为0;

          2)对于i=1,2,3,....,计算“a[i-1]*p+a[i-1]a[i]的进位值得到t,若t=pA已找到,否则将t 的个位数保存到a[i]t的十位数作为a[i]a[i+1]的进位值。

#include

#define N 60

int a[N];

int search(int p)

{int i,t,c=0;

 a[0]=____( 22 )____;           

 for(i=1;;i++)

 {t=__( 23 )___________;                  

  if(t==p) break;

  a[i]=t%10; c=t/10;

  }

  return i;

}

void main()

{int p,i,n;

 scanf("%d",&p);

 n=search(p);

 printf("p=%d; A=",p);

 for(i=__( 24 )______;i>=0;i--)               

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

}

 

15.以下程序的功能是:main函数通过调用fun1函数将数组S4个元素中大于等于平均值的那些数保存到a数组,小于平均值的那些数保存到b数组,变量nm分别保存a数组和b数组中数据的个数。输出数组S中数据的平均值和a、数组中的数据。

#include"stdio.h"

#deine N 4

double fun1(int *x,int *y,int *z,int *n,int *m)

{int i;

 double av=0;

___( 25 )__________;                 

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

_____(26)__________;               

av/=N;

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

if(__27_____)                     

{y[*n]=x[i];  (*n)++;  }

else

 {z[*m]=x[i];  (*m)++;  }

 return av;

}

void main()

{int S[N]={60,80,50,90},a[N]={0},b[N]={0},t,i,j,m,n; double ave;

 ave=fun1(S,a,b,&n,&m);

 printf("%f\n",ave);

 for(i=0;i<n;i++)   printf(“%3d”,a[i]);

 printf("\n");

 for(i=0;i<m;i++) printf(?%3d?,b[i]);

}

16.以下程序的功能是:在不改变a数组中数据存储位置的前提下,按a数组第一列元素的值从大到小依次输出a数组的各行元素。实现算法:将a数组每行第一个元素的值和地址依次保存到index结构数组相应元素的成员xy中,对index 数组按成员x的值从大到小排序,依次输出index数组每个元素的成员y指向的a数组中一行的全部元素的值。

#include <stdio.h>

struct link

{int x,*y; }

void main()

{ int a[ ][3]={{20,40,30},{30,10,20},{40,50,30},{60,60,30}},i,j,k,*p;

  struct link index[4]={0},tmp;

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

 { index[i].y=__( 28 )______;                

   index[i].x=a[i][0];

  }

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

  {k=i;

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

   if(__( 29 )_____) k=j;                    

  if(k!=i) {tmp=index[i];index[i]=index[k];index[k]=tmp; }

  }

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

  {p=index[i].y;

   printf("\n");

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

     printf("%3d",______( 30 )_____);             }

}