2007年春季江苏计算机C语言试题 |
2007年春江苏省二级考试(C语言理论试题) (本试卷笔试时间为120分钟) 说明: 1.本试卷包括计算机基础知识部分和程序设计部分。 2.本试卷满分为60分,分选择题和填空题,试卷不分A、B类型。 3.计算机基础知识部分全部是选择题(20分),程序设计部分分为选择题(10分)和填空 (30分)两种。 4.选择题用答题卡答题。每一项有A、B、c、D四个可供选择的答案,请选择其中一个你认 正确的答案,用HB铅笔或2B铅笔涂写在答题卡的相应答题号内。每选对一项得1分, 选或选错不得分。 5.填空题用答题纸答题。请将答案用蓝色或黑色笔填写在答题纸的相应答题号内,每个答 只占一行,不得换行。每填对一个答案得1分,不填或填错不得分。 6.请认真填写并仔细核对答题卡和答题纸上的学校名称、准考证号和姓名。 7.考试结束时将试卷、答题卡和答题纸放在桌上,不得带走。待监考人员收毕清点后,方 离场。 第一部分基础知识 1.微电子技术是信息技术领域的关键技术,它以集成电路(Ic)为核心。下列有关叙述错误 是(1) 。 A.目前Ic芯片(如CPU芯片)的集成度可达数千万个电子元件 B.Moore定律指出,单块IC的集成度平均每半年翻一番 c.从原料熔炼到最终产品包装,IC的制造工序繁多,工艺复杂,技术难度非常高 D.非接触式Ic卡采用电磁感应方式无线传输数据,所以又称为射频卡或感应卡 2.下列有关通信中使用的传输介质的叙述错误的是(2) 。 A.计算机局域网中大多使用无屏蔽双绞线,其无中继有效传输距离大约 B.同轴电缆可用于传输电视信号 . c.光纤价格高,一般不在校园网和企业网中使用 D.微波的波长很短,适合于长距离、大容量无线通信 3.二进制数(1010)与十六进制数(B2)相加,结果为(3) 。 A (273)8 B (274) 4.设有一段文本由基本ASCII字符和GB2312字符集中的汉字组成,其代码为B A.1个汉字和9个西文字符 B.3个汉字和5个西文字符 C.2个汉字和7个西文字符 D 4个汉字和3个西文字符 5.下列有关CPU的叙述错误的是(5)。 A.CPU的主要组成部分有运算器、控制器和寄存器组 B.CPU的主要功能是执行指令,不同类型CPU的指令系统通常有所不同 C.为了加快运算速度,CPU中可包含多个算术逻辑部件(ALU) D.目前PC机所用的CPU芯片均为Intel公司的产品 6.PC机在加电启动过程中会运行POST程序、引导程序、系统自举程序等。若在启动过程中用户按某一热键(通常是Del键)则可以启动CMOS设置程序。这些程序运行的顺序是(6) A.POST程序--CMOS设置程序---系统自举程序一-引导程序 B.POST程序--引导程序一-系统自举程序---CMOS设置程序 C.CMOS设置程序一系统自举程序_--引导程序--POST程序 D.POST程序--CMOS设置程序一引导程序---系统自举程序 7.目前Pc机一般都有USB和FireWire接口,用于连接各种外部设备。下列关于这两种接口的叙述错误的是(7) A.USB是一种串行接口,可以连接键盘、鼠标器、优盘、数码相机等多种设备 B.FireWire是一种并行接口,通常用于连接需要高速传输大量数量的设备(如音视频设备) C.USB 2.0的数据传输速率是USB 1.0的数十倍 D.一个USB接口上可以连接不同的设备 。 8.下列关于PC机外存储器的叙述错误的是(8) A.1.44MB软盘的每一面有吞0个磁道,每个磁道分为18个扇区,每个扇区512字节 B.硬盘的主要性能指标之一是平均存取时间,它与硬盘的转速(rpm)有很大关系。 c.优盘的缺点是:优盘均无写保护功能,且不能起到引导操作系统的作用 D.cD-R是目前常用的可记录式光盘,但其该录的数据不能修改 9.下列关于Windows 98/XP操作系统的存储管理功能的叙述错误的是.(9) A.存储管理的功能主要包括内存的分配与回收、共享和保护、自动扩充(虚存的实现)等 B.系统将程序(及其数据)划分成固定大小的页面,以页面为单位进行内存的分配和调度 c.虚拟存储器采用的页面调度算法是“先进先出”(FIFO)算法 D.在Windows 98和Windows XP中,虚拟内存其实就是一个磁盘文件,即“交换文件” 10.人们常说“软件的主体是程序,程序的核心是算法”。下列有关程序、算法和数据结构的叙述错误的是.(10)。 A.程序是用程序设计语言对解题对象和解题步骤进行的一种描述 B.算法和数据结构是设计与编写程序时首先要考虑的两个重要方面 c.算法是问题求解规则的一种过程描述,它必须有输入,但可以没有输出 D.数据结构主要是研究数据的逻辑结构、存储结构以及在这些数据上定义的运算 11.下列关于局域网的叙述错误的是(11) 。 A.光纤分布式数字接口网(FDDI)常用于构造局域网的主干部分 。 B.采用红外线或者无线电波进行数据通信,可以构造无线局域网 C.两个或多个局域网可以进行互连 D.所有的局域网均为以太网 12·下列有关IP地址、域名和URL的叙述错误的是(12) 。 A·目前互联网中IP地址大多数使用4个字节(32个二进位)表示 B·使用C类IP地址的网络规摸最大,一少c类物理网络可以拥有上千万台主机 C.一台主机通常只能有一个IP地址,但可以有多个域名 D·URL用来标识WWW网中的每一个信息资源,不同的信息资源对应不同的URL 13·TCP/IP协议栈的应用层包括了各种高层协议,其中用于实现网络主机域名到IP地址映射的是(13) 。 A.DNS B.SMTP C .FTP D.Telnet 14·ADSL是一种宽带接入技术,在线路两端加装ADSL MODEM即可实现连网。下列关于 ADsL的叙述错误的是(14) I A.它利用普通铜质电话线作为传输介质,成本较低 B.在上网的同时,还可以接听和拨打电话,几乎互不影响 C·从实现的技术上来看,数据的上传速度比数据的下载速度快 D.利用ADSL技术上网的用户,其PC机必须安装以太网卡 15·目前PC机使用的字符集及其编码标准有多种,20多年来我国也颁布了多个汉字编码标准。在下列汉字编码标准中,不支持简体汉字的是(15) 。 I A.GB2312 B.GBK C.BIG5 D. GB18030 16.下列有关数字图像的压缩编码和图像文件格式的叙述错误的是 (16) 。 A·图像压缩的出发点是图像中的数据相关性很强,且人眼的视觉有一定的局限性 B·压缩编码方法的优劣主要是看压缩倍数、重建图像的质量和压缩算法的复杂度等 C.JPEG图像的压缩倍数是可以控制的,且大多为无损压缩 D·GIF格式的图像能够支持透明背景,且具有在屏幕上渐进显示的功能 17.下列有关MIDI音乐的叙述错误的是(17 ) A·MIDI是一种音乐描述语言,它规定了乐谱的数字表示方法 B·MIDI音乐的文件扩展名为MID或MIDI C·MIDI音乐可以使用Windows中的媒体播放器等软件进行播放 D·播放MIDI音乐时,声音是通过音箱合成出来的 18.下列有关中文版Windows 98/2000/xP操作系统功能与操作的叙述错误的是 (18) 。 A·“五笔字型”汉字输入法是Windows内置的输入法之一 B·在“画图”软件中画圆和正方形时,可在按Shift键的同时用鼠标拖放操作 c·在“资源管理器’’窗口中,按Ctrl键的同时用鼠标单击文件,可以实现该文件的反向选定 D·作为虚拟存储器使用的(页)交换文件可以设置在不同的逻辑硬盘上 19·下列有关Microsoft Word 97/2000/2003功能和操作的叙述错误的是 (19) 。 A·Word文档可以分别设置打开文件时的密码和修改文件时的密码 B·页边距的计量单位可以设置为磅、英寸和厘米等 c·可以将选中的英文统一设置为小写,或大写,或词首字母大写,或句首字母大写等 D·利用工具栏上的“格式刷”,可以复制字体的格式,但不能复制段落的格式 20.下列有关Microsoft PowerPoint 97/2000/2003功能和操作的叙述错误的是 (20) 。 A.PowerPoint文件可以另存为网页文件 B.演示文稿可以按讲义方打印,且一张纸(如A4规格)可以打印多达6或9张投影爿 c.演示文稿的放映方式可以设置为循环放映 D.演示文稿中可以插入声音文件,但不可以录制旁白 一、选择题(10分) 21、以下关于C语言源程序的叙述中,错误的是_____。 A.一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义 B.函数定义由函数头部和函数体两部分组成 C.在一个函数定义的函数体中允许定义另一个函数 D.在一个函数定义的函数体中允许调用另一个函数或调用函数本身 22、以下表示中,不能用作C语言常量表示的是____。 A.0UL B.(long)123 C.1e0 D.’\x 23、以下标识符中,不能用作变量名或自定义函数名的是___。 A.main B.scanf C._float D.sizeof 24、以下表示数学式“a<B<C”的逻辑表达式中,错误的是____。< P> A.a<b<c B.a<b && b<c C.!(a>=b)&&!(b>=c) D.!(a>=b||b>=c) 25.以下程序运行后的输出结果是____。 A.2 2 B.7 2 C.7 5 D.6 2 main() { char a[7]=”a0\ i=sizeof(a); j=strlen(a); printf(“%d %d”,i,j); } 26.下面关于循环语句for、while、do_while的叙述中,正确的是____。 A.三种循环语句的循环体都必须放入一对花括号中 B.三种循环语句中都可以缺省循环终止条件表达式 C.三种循环语句的循环体都至少被无条件地执行一次 D.三种循环语句都可能出现无穷循环 27.以下程序段中,有语法错误的是____。 A.fun(char aa[10]) { while(*aa) printf(“%c”,*aa++); } B.fun( char *aa) { while(aa[0]) printf(“%c”,*aa++); } C.main() { char *aa=”Hello!”; while(*aa) printf(“%c”,*aa++); } D.main() { char aa[10]=”Hello!”; while(*aa) printf(“%c”,*aa++); } 28.若有声明“int a[ ]={1,2,3,4},*p,i;”,则以下程序段中不能输出13的是_____。 A.for(i=0;i<4;i+=2) printf(“%d”,a[i]); B.for(p=0;p<4;p+=2) printf(“%d”,a[p]); C.for(p=a;p<a+4;p+=2) printf(“%d”,*p); D.for(p=a,i=0;i<4;i+=2) printf(“%d”,p[i]); 29.若有如下的类型定义和变量声明,则在给出的选项中值不为7的表达式是____。 A.ptr->a B.(++ptr)->a C.x[1].a D.x[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.与整型数学算式 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 * {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); } 完善程序(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=0在x0附近的一个误差小于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=p则A已找到,否则将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函数将数组S的4个元素中大于等于平均值的那些数保存到a数组,小于平均值的那些数保存到b数组,变量n、m分别保存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结构数组相应元素的成员x和y中,对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 )_____); } } |