2009年春季江苏省二级c语言
(总分46, 做题时间120分钟)
第一部分计算机基础知识
1. 
在下列有关现代信息技术的一些叙述中,正确的是________。
A 集成电路是20世纪90年代初出现的,它的出现直接导致了微型计算机的诞生
B 集成电路的集成度越来越高,目前集成度最高的已包含几百个电子元件
C 目前所有数字通信均不再需要使用调制解调技术和载波技术
D 光纤主要用于数字通信,它采用波分多路复用技术以增大信道容量
2. 
最大的10位无符号二进制整数转换成八进制数是________。
A 1023
B 1777
C 1000
D 1024
3. 
在下列有关目前PC机CPU的叙述中,错误的是________。
A CPU芯片主要是由Intel公司和AMD公司提供的
B "双核"是指PC机主板上含有两个独立的CPU芯片
C Pentium 4微处理器的指令系统由数百条指令组成
D Pentium 4微处理器中包含一定容量的Cache存储器
4. 
在下列有关当前PC机主板和内存的叙述中,正确的是________。
A 主板上的BIOS芯片是一种只读存储器,其内容不可在线改写
B 绝大多数主板上仅有一个内存插座,因此PC机只能安装一根内存条
C 内存条上的存储器芯片属于SRAM(静态随机存取存储器)
D 目前内存的存取时间大多在几个到十几个ns(纳秒)之间
5. 
在下列有关PC机辅助存储器的叙述中,正确的是________。
A 硬盘的内部传输速率远远大于外部传输速率
B 对于光盘刻录机来说,其刻录信息的速度一般小于读取信息的速度
C 使用USB 2.0接口的移动硬盘,其数据传输速率大约为每秒数百兆字节
D CD-ROM的数据传输速率一般比USB 2.0还快
6. 
在下列PC机I/O接口中,数据传输速率最快的是________。
A USB 2.0
B IEEE-1394
C IrDA (红外)
D SATA
7. 
计算机软件可以分为商品软件、共享软件和自由软件等类型。在下列相关叙述中,错误的是________。
A 通常用户需要付费才能得到商品软件的使用权,但这类软件的升级总是免费的
B 共享软件通常是一种"买前免费试用"的具有版权的软件
C 自由软件的原则是用户可共享,并允许拷贝和自由传播
D 软件许可证是一种法律合同,它确定了用户对软件的使用权限
8. 
人们通常将计算机软件划分为系统软件和应用软件。下列软件中,不属于应用软件类型的是________
A AutoCAD
B MSN
C Oracle
D Windows Media Player
9. 
在下列有关Windows 98/2000/XP操作系统的叙述中,错误的是________。
A 系统采用并发多任务方式支持多个任务在计算机中同时执行
B 系统总是将一定的硬盘空间作为虚拟内存来使用
C 文件(夹)名的长度可达200多个字符
D 硬盘、光盘、优盘等均使用FAT文件系统
10. 
在下列有关算法和数据结构的叙述中,错误的是________。
A 算法通常是用于解决某一个特定问题,且算法必须有输入和输出
B 算法的表示可以有多种形式,流程图和伪代码都是常用的算法表示方法
C 常用的数据结构有集合结构、线性结构、树形结构和网状结构等
D 数组的存储结构是一种顺序结构
11. 
因特网的IP地址由三个部分构成,从左到右分别代表________。
A 网络号、主机号和类型号
B 类型号、网络号和主机号
C 网络号、类型号和主机号
D 主机号、网络号和类型号
12. 
在下列有关ADSL技术及利用该技术接入因特网的叙述中,错误的是________。
A 从理论上看,其上传速度与下载速度相同
B 一条电话线上可同时接听/拨打电话和进行数据传输
C 利用ADSL技术进行数据传输时,有效传输距离可达几公里
D 目前利用ADSL技术上网的计算机一般需要使用以太网网卡
13. 
人们往往会用"我用的是10M宽带上网"来说明白己计算机连网的性能,这里的"10M"指的是数据通信中的________指标。
A 最高数据传输速率
B 平均数据传输速率
C 每分钟数据流量
D 每分钟IP数据包的数目
14. 
计算机局域网按拓扑结构进行分类,可分为环型、星型和________型等。
A 电路交换
B 以太
C 总线
D 对等
15. 
网络信息安全主要涉及数据的完整性、可用性、机密性等问题。保证数据的完整性就是________。
A 保证传送的数据信息不被第三方监视和窃取
B 保证发送方的真实身份
C 保证传送的数据信息不被篡改
D 保证发送方不能抵赖曾经发送过某数据信息
16. 
某计算机系统中,西文使用标准ASCII码、汉字采用GB2312编码。设有一段纯文本,其机内码为CB F5 DO B4 50 43 CA C7 D6 B8,则在这段文本中含有:________。
A 2个汉字和1个西文字符
B 4个汉字和2个西文字符
C 8个汉字和2个西文字符
D 4个汉字和1个西文字符
17. 
以下关于汉字编码标准的叙述中,错误的是________。
A GB 2312标准中所有汉字的机内码均用双字节表示
B 我国台湾地区使用的汉字编码标准BIG 5收录的是繁体汉字
C GB 18030汉字编码标准收录的汉字在GB 2312标准中一定能找到
D GB 18030汉字编码标准既能与UCS(Unicode)接轨,又能保护已有中文信息资源
18. 
若波形声音未进行压缩时的码率为64kb/s,已知取样频率为8kHz,量化位数为8,那么它的声道数是________。
A 1
B 2
C 4
D 8
19. 
从信息处理的深度来区分信息系统,可分为业务处理系统、信息检索系统和信息分析系统等。在下列几种信息系统中,不属于业务处理系统的是________。
A DSS
B CAI
C CAM
D OA
20. 
在下列有关信息系统开发、管理及其数据库设计的叙述中,错误的是________。
A 常用的信息系统开发方法可分为结构化生命周期方法、原型法、面向对象方法和CASE方法等
B 在系统分析中常常使用结构化分析方法,并用数据流程图和数据字典来表达数据和处理过程的关系
C 系统设计分为概念结构设计、逻辑结构设计和物理结构设计,通常用E-R模型作为描述逻辑结构的工具
D 从信息系统开发过程来看,程序编码、编译、连接、测试等属于系统实施阶段的工作
第二部分 C程序设计
21. 
以下定义和声明中,语法均有错误的是________ ①int j(int x){}②int f(int f){} ③int 2x=1; ④struet for{int x;};
A ②③
B ③④
C ①④
D ①②③④
22. 
设有定义和声明如下: #define d 2 int x=5;float Y =3.83;char c='d'; 以下表达式中有语法错误的是___________
A x++
B y++
C c++
D d++
23. 
以下选项中,不能表示函数 功能的表达式是_________。
A s=(X>0)?1:(X<0)?-1:0
B s=X<0?-1:(X>0?1:0)
C s=X<=0?-1:(X==0?0:1)
D s=x>0?1:x==0?0:-1
24. 
以下语句中有语法错误的是__________。
A printf("%d",0e);
B printf("%f",0e2);
C printf("%d",Ox2);
D printf("%s","0x2");
25. 
以下函数定义中正确的是__________。
A double fun(double x,double y){}
B double fun(double x;double Y){}
C double fun(double x,double Y);{}
D double fun(double X,Y){}
26. 
若需要通过调用f函数得到一个数的平方值,以下f函数定义中不能实现该功能的是___________ 。
A void f(double *a){*a=(*a)*(*a);}
B void f(double a,double *b){*b=a*a;}
C void f(double a,double b){b=a*a;}
D double f(double a){return a*a;}
27. 
设有声明"int P[10]={1,2},i=0;",以下语句中与"P[i]=P[i+1],i++;"等价的是___________。
A P[i]=P[i++];
B P[++i]=P[i];
C P[++i]=P[i+1];
D i++,P[i-1]=P[i];
28. 
已知有声明"char a[]="It is mine",*p="It is mine";",下列叙述中错误的是________。
A strcpy(a,"yes")和strcpy(p,"yes")都是正确的
B a="yes"和p="yes"都是正确的
C *a等于*p
D sizeof(a)不等于sizeof(p)
29. 
已知有声明"int a[3][3]={0},*p1=a[1],(*p2)[3]=a;",以下表达式中与"a[1][1]=1"不等价的表达式是________。
A *(p1+1)=1
B p1[1][1]=1
C *(*(p2+1)+1)=1
D p2[1][1]=1
30. 
设有结构定义及变量声明如下: struct product {char code[5]; float price; }y[4]={"100",100}" 以下表达式中错误的是_________。
A (*y).code[0]='2';
B y[0].code[0]='2';
C y->price=10;
D (*y)->price=10;
二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,共30分)
1. 
在一个C语言源程序中,必不可少的是____(1)____。
2. 
若有声明"int x;"且sizeof(x)的值为2,则当x值为____(2)____时"x+1>x"为假。
3. 
若有声明"float y=3.14619;int x;",则计算表达式"x=y*100+0.5,Y=x/100.0"后y的值是____(3)____。
4. 
执行以下程序段中的语句"k=M*M+1"后k的值是____(4)____ #define N 2 #define M N+1 k=M*M+1:
5. 
以下程序运行时输出结果是____(5)____ #include<stdio.h> void main() {double x[3]={1.1,2.2,3.3},Y; FILE *fp=fopen("d:\\a.out","wb+"); fwrite(x,sizeof(double),3,fp)" fseek(fp,2L*sizeof(double),SEEK_SET); fread(&y,sizeof(double),1,fp)" printf("%.1f",y); fclose(fp)" }
6. 
以下程序运行时输出结果是____(6)____。 #include<stdio.h> void main() { int k=5,n=0; while(k>0) { switch(k) { case 1: case 3:n+=1;k--;break" default:n=0;k--; case 2: case 4: n+=2;k--;break; } } printf("%3d",n); } }
7. 
以下程序运行时输出结果是____(7)____。 #include<stdio.h> void change(int x,int Y,int *z) { int t; t=x;x=y;y=*z;*z=t; } void main() { int x=18,y=27,z=63; change(x,y,&z); printf("x=%d,y=%d,z=%d\n",x,y,z); }
8. 
以下程序运行时输出结果是____(8)____。 #include<stdio.h> int f(int x,int y) {retum x+y; } void main() {double a=5.5,b=2.5; printf("%d",f(a,b)); }
9. 
以下程序运行时输出结果中第-行是____(9)____,第三行是____(10)____。 #include<stdio.h> define N 5 void main() { static char a[N][N]; int i,j,t,start=0,end=N-1; char str[]="123",ch; for(t=0;t<=N/2;t++) { ch=str[t]; for(i=j-start;i<end;i++)a[i][j]=ch; for(j=start;j<end;j++)a[i][j]=ch; for(i=end;i>start;i--)a[i][j]=ch; for(j=end;j>start;j--)a[i][j]=ch; if(start==end) a[start][end]=ch; start++,end--; } for(i=O;i<N;i++) { for(j=0;j<N;j++) printf("%c",a[i][j]); printf("\n"); } }
10. 
以下程序运行时输出结果中第一行是____(11)____,第二行是____(12)____。 #include<stdio.h> void fun(int x,int P[],int *n) { int i,j=O; for(i=1;i<=x/2;i++) if(x%i==0)p[j++]=i; *n=j: } void main() {int x,a[10],n,i; fun(27,a,&n); for(i=0;i<n;i++) printf("%5d",a[i]); printf("\n%5d",n); }
11. 
以下程序运行时输出结果是____(13)____。 #include<stdio.h> #include<ctype.h> int count(char s[]) { int i=0; if(s[i]=='\0') return 0; while(isalpha(s[i]))i++; while(!isalpha(s[i])&&s[i]!='\O')i++; return 1+count(&s[i]); } void main() {char line[]="one world,one dream."; printf("%d",count(line)); }
12. 
以下程序运行时输出结果中第一行是____(14)____ ,第二行是____(15)____ #include<stdio.h> int fun(char *a,char *b) {int m=0,n=0: while(*(a+m)!='\0')m++; while(b[n]) { *(a+m)=b[n];m++;n++; } *(a+m)='\0'; return m; } void main() {char s1[20]="yes",s2[5]="no"; printf("%d\n",fun(s1,s2)); puts(s1); }
13. 
以下程序运行时输出结果中第-行是____(16)____,第二行是____(17)____,第三行是____( 18 )____ #include<stdio.h> typedef struct{int x;int y;}S; void fun(S pp[],int n) {int i,j,k;S t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if((pp[j].x<pp[k].x)||(pp[j].x==pp[k].x&&pp[j].y<pp[k].y)) k=j; if(k!=i) {t=pp[i];pp[i]=pp[k];pp[k]=t;} } } void main() {S a[5]={{3,2},{3,1},{1,2},{2,4},{2,3}}; int i,n=5; fun(a,n); for(i=0;i<n;i++) printf("%d,%d\n",a[i].x,a[i].y); }
14. 
以下程序求一组整数的最大公约数。试完善程序以达到要求的功能。 #include<stdio.h> int gcd(int a,int b) i {int r; while(_____(19)_______) {r=a%b;a=b;(_____20_____);} return a; } void main() {int x,i,a[6]={12,56,48,32,16,24}; x= (___21_____) ; for(i=1;i<6;i++) x=gcd(___(22)_____,a[i]); printf("(%d,",a[O]); for(i=1;i<5;i++) printf("%d,",a[i]); printf("%d)=;d\n",a[5],x); }
15. 
以下程序完成两个长正整数的加法运算并输出计算结果。函数add模拟手工加法运算的过程,将a和b指向的数组中存储的两个以字符串形式表示的n位正整数相加,并将运算结果以字符串形式保存到c指向的数组中。main函数中pl和p2数组分别存放被加数字符串和加数字符串,p3数组存放运算结果字符串。若p1中的字符串为"1000000001"、p2中的字符串为"9000000009",调用add函数后p3得到的是以字符串表示的这两个整数相加的结果"10000000010"。试完善程序以达到要求的功能。 #include "stdio.h" #include "string.h" void add(char a[],char b[],char c[],__(23)____) {int i,k; c[n]='\0';k=0; for(i=n-1;i>=0;i--) {c[i]=(a[i]-'O')+(b[i]-'0')+k; k=______(24)______; c[i]=c[i]%10+'0'; } if(k) {for(i=n+1;i>O;i--) c[i]=___(25)____; c[i]=k+'0'; } } void main() {char p1[80]="1000000001",pz[80]="9000000009",p3[80]; int i,x=strlen(p1),y=strlen(p2); if(x<y) { for(i=x;i>=0;i--) {p1[i+y-x]=p1[i];p1[i]='0';} _____(26)______; } if(x>y) for(i=y;i>=0;i--) {p2[i+x-y]=p2[i];p2[i]='0';} add(p1,p2,p3,x); puts(p3); }
16. 
以下程序创建-个链表并实现数据统计功能。函数WORD *create(char a[][20],int n)创建-个包含n个结点的单向链表,结点数据来自a指向的数组中存储的n个单词(字符串)。函数void count(WORD *h)统计h指向的单向链表中不同单词各自出现的次数,将统计结果保存到局部数组c中并输出。程序运行时输出结果为"red:1 green:2 blue:3"试完善程序以达到要求的功能。 #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct w {char word[20]; struct w *next: }WORD; WORD *create(char a[][20],int n) {WORD *p1,*p2,*h=0;int i; for(i=0;i<n;i++) {p1=(WORD *)malloc(sizeof(WORD)); strcpy(___(27)___,a[i]); if(h==O) h=p2=p1: else {p2->next=p1;p2=pl;} } p2->next=_____(28)____; return h; } void count(WORD *h) { struct {char word[20]; int num; }c[6]={0}; int m=0,i; while(h) {if(m==O) {strcpy(c[0].word,h->word); c[0].num=1;m++; } else {for(i=O;i<m;i++) if(strcmp(c[i].word,h->word)==0) { ______(29)_____ ; break; } if(i>=m) {strcpy(c[m].word,h->word); c[m++].num=1; } } ____(30)_____; } for(i=0;i<m;i++) printf("%s:%d",c[i].word,c[i].num); } void main() {char words[6][20]={"red","green","blue","blue","green","blue"}; WORD *head=0: head=create(words,6); count(head); }
答题卡