江苏计算机等级考试二级C语言考前模拟试卷第2套 |
考试模拟2 1.下面关于集成电路(IC)的说法中错误的是_______(1)_______ A.集成电路是现代信息产业的基础 B.现代PC机中使用的微型处理器都是超大规模或极大规模集成电路 C.集成电路的特点是体积小,重量轻,可靠性强 D.IC卡分存储器卡与智能卡(CPU卡),比如手机的SIM卡就是一种存储器卡 2.下面关于通信技术的叙述中,错误的是_________(2)________ A.数字通信是当代通信技术的主流,它比模拟通信更能适应现代社会的要求 B.计算机网络中采用的最基本的多路复用技术是时分多路复用技术 C.信息在光纤中传输时,每隔一定距离需要加入中继器,将信号放大后再继续传输 D.无线通信可以按频率分成中波,短波,超短波和微波,其中微波的波长很短,通常在 3.Pentinum处理器中的一个16位带符号整数,如果它的十六进制数是FFF0,那么它的实际数值是________(3)____ A.-16 B 4.下面关于微处理器的叙述中不正确的是___(4)______ A.微处理器通常以单片集成电路制成 B.它具有运算和控制功能,但不具备数据存储功能 C.Pentinum4及其兼容的微处理器是目前PC机中使用最广泛的一种处理器 D.Intel公司是国际上研制、生产CPU最著名的公司 5.下面关于PC机的主机叙述不正确的是_________(5)________ A.RAM代表随机存取存储器,ROM代表只读存储器,关机后前者所有存储的信息会丢失,而后者不会 B.保存在BIOS中的自举程序的功能是装入操作系统 C. 数码相机和优盘中使用的芯片类型是Flash Rom D.I/O总线上有三类信号:数据信号、地址信号和控制信号 6. .磁盘存储器的下列叙述中,错误的是____(6)____。 A磁盘盘片的表面分成若干个同心圆,每个圆称为一个磁道 A. 硬盘上的数据存储地址由两个参数定位:磁道号和扇区号 B. 硬盘的盘片、磁头及驱动机构全部密封在一起,构成一个密封的组合件 C. 每个磁道分为若干个扇区,每个扇区的容量一般是512字节 7. 在下列几种存储器中,速度慢、容量小的是_____(7)___。 A. 优盘 B. 光盘存储器 C. 硬盘存储器 D.软盘存储器 8.下列有关操作系统作用的叙述中,正确的是___(8)____。 A. 有效地管理计算机系统的资源是操作 系统的主要作用之一 B. 操作系统只能管理计算机系统中的软件资源,不能管理硬件资源 C. 操作系统提供的用户界面都是图形用户界面 D. 在计算机上开发和运行应用程序与安装和运行的操作系统无关 9.下面关于算法和数据结构的叙述中,错误的是___(9)__________ A.算法的基本特征是:确定性,有穷性,能行性,输出 B.算法的一个显著特征是,它解决的是一个问题而不是一类问题 C.算法的好坏除了考虑正确性外,还要看执行算法所占用的空间资源 D.数据结构研究如何根据实际问题组织数据与定义新数据类型,与具体的程序设计语言无关 10. 以太网是一种使用的最广泛的局域网,下面是关于以太网的叙述, ①以太网的节点每次只能发送一帧信息 ②以太网中的每个节点都有一个唯一的地址,发送每一帧信息时,必须包含自己的地址和接收节点的地址,该地址就是IP地址 ③以太网的数据传输速率为10Mbps—100Mbps,甚至更快 ④以太网大多使用集线器组网,网络中每一个节点通过网卡和双绞线与集线器连接 正确的是_________(10)______ A. ①③④ B. ①② C. ①②③④ D①④ 11.广域网是一种跨越很广的的计算机网络,下面关于广域网的叙述中,正确的是______(11)_____ A.广域网是一种公用计算机网,所有计算机都可无条件的接入广域网 B.广域网使用专门的通信线路,数据传输更高 C.广域网能连接任意多的计算机,也能将相距任意距离的计算机互相连接起来 D.广域网像很多局域网一样按广播方式通信 12.能将异构的计算机网络互相连接起来的基本设备是________(12)________ A.中继器 B.路由器 C.集线器 D.调制解调器 13.以下关于因特网提供的服务,错误的是_______(13)______ A.电子邮件必须要有邮件服务器才能使用,邮件服务器程序包括SMTP协议与POP3协议 B.Web服务器中的网页采用的是http超文本传输协议传输 C.把网络上一台计算机中的文件移动到另外一台计算机中,称为远程文件传输,简称mailto D.远程登录的含义是用户可以把自己的机器作为一个终端,通过因特网连接到远程的计算机上,就可以使用这台计算机了,使用的协议是Telnet 14.下面对汉字编码标准叙述错误的是______(14)_____ A.采用GB2313,GBK,和GB18030三种不同的汉字编码标准时,一些常用的汉字如”中”,”国”等,它们在计算机中的表示(内码)都是相同的 B.GB2312,GBK主要在我国大陆使用,而台湾、香港地区使用的是BIG5汉字编码 C.GBK汉字编码比GB2312的汉字多,已经得到了较好的应用,微软公司的Windows操作系统均支持GBK编码 D.Unicode是包含的汉字比GB18030的汉字多 15.下面关于图像压缩编码的叙述中,错误的是_____(15)_____ A.图像压缩编码的目的是为了节省压缩容量和减少在网络上的传输时间 B.图像数据压缩都是有损的,重建的图像与原始图像不会相同 C.大多数图像文件都对图像进行了压缩编码 D.GIF与JPEG是常用的两种文件格式,Gif图像是无损压缩,JPEG图像是有损压缩 16.下面关于计算机输入输出声音信息的叙述中,错误的是_____(16)_____ A.声卡的主要功能是实现波形声音和MIDI声音的输入和输出 B.无论是波形声音还是MIDI声音的输入,都需要使用麦克风 C. 无论是波形声音还是MIDI声音的输出,都需要使用扬声器 D.波形声音和MIDI声音可以混合在一起进行输出 17.数字视频信息的数据量很大,目前DVD光盘上存储的数字视频应用存储的数字视频采用的压缩编码标准是____(17)________ A.MPEG-1 B.MPEG 18.用结构化生命周期方法进行信息系统开发,一般经过五个阶段,其正确顺序为____(18)__ A.系统分析,系统规划,系统设计,系统实施,系统维护 B. 系统规划,系统分析,系统设计,系统实施,系统维护 C. 系统分析,系统规划,系统设计,系统维护,系统实施 D. 系统分析,系统设计,系统规划,系统实施,系统维护 19. 在下列有关Microsoft Office 2000的应用程序功能的叙述中,正确的是___(19)____。 A.Word和Excel编辑的文档均可以另存为HTML语言 B.Word可以直接读取Excel文档(.xls),且Excel可以直接读取Word文档(.doc) C.Word与Excel均支持表格的自动填充功能 D.用户不能利用“剪切板”功能在Word与Excel编辑的文档之间进行交换数据 20在使用Microsoft Word 97/2000编辑文档时,如果需要打印当前文档的第4、6-8页,则应___(20)_____,然后在出现的对话框中设置需打印的页码。 A.使用菜单命令“文件/打印” B.单击“常用”工具栏上的“打印”按钮 C.按键盘上的PrtSc(PrintScreen)键 D.按组合键ALT+PrtSc(PrintScreen) C语言部分 21.在定义任何一个函数时,下列选项中,______________是不可缺少的 A.函数名之前的数据类型 B.函数名之后的一对圆括号 C.形式参数声明 D.函数体内的语句 22.已知某程序如下: float p=1.5; #define p 2.5 main() {printf("%f",p);} 则main函数中标识符P代表的操作数是(22) 。 A.float型变量 B.double型变量 C.float型常量 D.double型常量 23.已有声明"int s[2][3]",以下选项中(23)正确地引用了数组S中的基本元素。 A.S[1>2][!1] B.S[2][0] C.S[1] D.S 24.已有数据类型定义和变量声明如下: struct person { int num; char name[20],sex; strrut{int class;char prof[20];}in; }a={20,"Li ning",'M',{5,"computer"}},*P=&a; 下列语句中正确的是(24) A•printf("%s",a->name); B.printf("%s",P->in.prof); C•printf("%s",*p.name); D.printf(" Ctr P->in->prof); 25.若有以下程序: int x: int f(int Y) {return 标识符;} #include<stdio.h> int w: main() {int z=2;f(z);…} 则在函数f中return语句后允许出现的标识符是 (25) 。 A.x或w B.x或y C.z或w D.NULL 26.逻辑"异或"运算可描述为"a xor b",其中a和b为参加运算的两个操作数,运算结果为当 且仅当a、b两个操作数中只有一个为真时才为真,其他情况下均为假。以下表达式中 (26)可以正确表示逻辑"异或"运算。 A.a||b B.a&&b C.(a&&b)&&!(a||b) D.(a||b)&&!(a&&b) 27.若有声明"int a [5],*b=a,(*c)[3],*d[3];",则在以下表达式中有语法错误的是 (27) 。 A.a[0]=0 B.b[0]= 28.若有声明: int k,a,b; unsigned long y=5; double x=1.23; 则以下表达式中正确的是(28) 。 A.x%(-5) B.x=y[6] C.k=(a=l,b=2,&a+&b) D.a+=a-=(b=2)*(a=3) 29.以下跳转语句中,只有 (29) 可以选择不唯一的跳转目的地。 A.continue; B.break; ’C.goto标识符; D•return; 30.在缺省情况下,标准C的编译系统中预定义的标准输出流stdout直接连接的设备是 (30) 。 A.软盘 B.硬盘 C.键盘 D.显示器 二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行) ●基本概念题(共5分) 1.在声明变量时,类型修饰符unsigned一般用于修饰基本类型中的int和____(1)_________。 2.已知某程序中有如下片段: int i;float f; /*P的声明*/ P=&i;P=&f; 若要保证该段程序没有任何语法错误,P应当声明为( 2 ) 3.已有声明"float x;double y;int a;long b;chat c;",则表达式x+y*a/x+b/y+c值的类型为(3) 4.系统库函数scanf和gets在被调用执行时都可以读取从键盘输入的一串数字字符,其中函数 (4)具有将读取的数字字符串转换为整型数的功能。 5.在文件中,以符号常量EOF作为文本文件(字符流文件)的结束标记,EOF代表的值是( 5 ) ●阅读程序题(共11分) 6.以下程序运行时输出结果是( 6 ) 。 #define PT 3.14 #define S(x) PT*x*x main() ’ {int a=2; printf("% } 7.已知int型变量的存储字节数为2,以下程序运行时输出结果是( 7 )。 #include<stdio.h> main() {int a=3,b=2,c=7,d=6,e=8; long f=a*10000+b*1000+c*100+d*10+e; printf("%ld",f); } 8.以下程序运行时输出结果是( 8 ) 。 #include<stdio.h> main() {char *P="student"; if(P=="student") printf("yes"); else printf("no"); } 9.以下程序运行时输出结果是( 9 )。 #include<ctype.h> #include<stdio.h> main() {char *s=" int k=0,a=0,b=0; do {if(isdigit(s[k])) {if(s[k]%2==0) {a=a+s[k]-'0'; continue; } a=a+s[k]-'0';b=b+s[k]-'0'; } }while(s[k+1]&&++k); printf("%d,%d,%d\n",k,a,b); } 10.以下程序运行时输出结果是(10) 。 #include<stdio.h> int f(int a[],int m,int b[],int n,int c[]) {int i,j,k=0,t; for(i=0;i<m;i++) {for(t=1,j=0;j<n;j++) if(a[i]==b[j]) {t=O;break;} if(t) c[k++]=a[i]; } return k; } void main() {int x[]={7,2,3,6,5,4,1},y[]={5,10,7,9,8,6},z[10],w,j; w=f(x,7,y,6,z); for(j=0;j<w;j++)printf("%d",z[j]); } 11.以下程序运行时输出结果是(11) void fun(int *p1,int *p2); main() {int i,a[6]={1,2,3,4,5,6}; fun(a,a+5); for(i=O;i<5;i++) printf("%2d",a[i]); } void fun(int *pl,int *p2) {int t; if(pl<p2) . { t=*p1,*pl=*p2;*p2=t; fun(p1+=2,p2-=2); } } 12.以下程序运行时输出结果的第一行是 ( 12 ) ,第二行是( 13 )。 void swap(int *a,int *b) {int c; c=*a; *a=*b; *b=c; } main() {int i,j,a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0:i<2:i++) for(j=0;j<2-i;j++) if(i==j) swap(&a[i][j],&a[i+2][j+2]); else swap(&a[i][j],&a[i+1][j+1]); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d",a[i][j]); printf("\n"); } } 13.以下程序运行时输出结果的第一行是 ( 14 ) ,第二行是 ( 15 ) ,第三行是(16 ) 提示:函数int toupper(int ch)的功能是:将小写字母字符转换为对应的大写字母字符。 #include<stdio.h> #include<ctype.h> long fun(char *s) {long n,sign,base=10,t; for(;isspace(*s);s++); sign=(*s=='-')?-1:1; if(*s=='+'||*s=='-')s++; if(*s=='0'&&s++) {if(*s=='x||*s=='X') {base=16;S++;} else base=8; } for(n=0,t=1;t&&(isdigit(*s)||isalpha(*s));s++) switch(base) {case 10:if(isdigit(*s)) n=n*base+*s-'0'; else t=0; break: case 8:if(*s>='0'&&*s<='7')n=n*base+*s-'0'; else t=0: break; default:if(isdigit(*s))n=n*base+*s-'0'; else if(toupper(*s)>='A'&&toupper(*s)<='F') n=n*base+toupper(*s)-'A'+lO; else t=0; } return sign*n: } main() {char c1[]="0x printf("%ld\n%ld\n%ld",fun(c1),fun(c2),fun(c3)); } ●完善程序题(共14分) 14.程序中函数double,mycos(double x)的功能是:根据下列公式计算cos(x)的近似值。 cos(x)=1-x^2/2!+x^4/4!-x^6/6!+....+(-1)^n*(x^2*n/(2*n)!) 精度要求:当通项的绝对值小于等于10^-6时为止。 #include<stdio.h> #include< ____(17)____________> . double mycos(double x) . {int n=1; double sum=0,term=1.0; while( ___(18)_________ >=le-6) {sum+=term; term*= ___(19)_________ ; n=n+2: } return sum; } main() {double x; scanf("%lf",&x); printf("fx(%f)=%f,%f\n",x,mycos(x),cos(x)); } 15.main函数内结构数组P中的元素已按结构成员index的值升序排列。以下程序先在P中插入s1和s2两组数据,再将数组的所有元素输出。要求插入数据后数组p中的元素仍按 结构成员index的值升序排列。 #include<stdio.h> typedef struct s {int index; char text[10]; }T; int inserttv(T *p,T s,int n) {int k,j; for(k=0;k<n;k++) if( 20 )>s.index) {for(j=n;j>k;j--)p[j]=p[j一1]; break; } ( 21 ) =s; return n+1; } main() {int n; T p[8]={{0,"a",},{5,"t",},{10,"e",},{15,"r"}}; T s1={3,"f"},s2={16,"s"},*q; n=inserttv(p,s2, __________(22)__________ ); for(q=p;q<p+n;q++)printf("%d%s\n",q->index,q->text); } 16.以下程序的功能是:查找所有满足以下条件的两个整数对:(1)两个整数都是3位数;(2) 组成两个整数各位的数字各不相同并且不出现数字O;(3)第二个数等于第一个数的两 倍。例如,134和268就是满足该条件的一个整数对。 main() {int a,b,c,j,k,w,s[6],sum; for(a=1;a<=5;a++) /*a百位,b十位,c个位*/ for(b=1;b<=9;b++) for(c=1;c<=9;c++) {s[o]=a;s[1]=b;s[2]=c; sum= ____(23)_________ ; sum=2*sum; if(sum>999) continue; s[3]= ______(24)_____________ ; s[4]=(sum-s[3]*100)/10; s[5]=sum%10; _____(25)___________________ ; for(j=0;j<5;j++) for(k=0;k<6;k++) if(s[k]==0||j!=k&& ___(26)____________ w=0; if(w) for(k=0;k<2;k++) printf("%d%d%d\n",s[k*3],s[k*3+1],s[k*3+2]); } } 17.设有一个线性单链表的结点定义如下: struct node {int d; struct node next; }; . 函数int copy_dellist(struct node *head,int x[])的功能是:将head指向的单链表中存储的所有 整数从小到大依次复制到x指向的整型数组中并撤消该链表;函数返回复制到x数组中的整 数个数。算法:找出链表中数值最小的结点,将其值存储到x数组中,再将该结点从链表中删 除,重复以上操作直到链表为空为止。 int copy_dellist(struct node *head,int x[]) {struct node *pk,*pj,*pm,*pn; int data,k=O; while(head!=0) {pk=head;data=pk->d;pn=pk; while(______(27)_______!=0) {pj=pk->next; if(_____(28)___________<data) {data=pj->d;pm=pk;pn=pj;} pk=pj; } x[k++]=pn->d; . if( ___29___________)pm->next=pn->next; else head=pn->next; free(pn); } . ____(30)__________________ ; } 参考答案 1.D2.D3.A4.B5.B6.B7.D8.A9.B10.A11.C12.C13.C14.D15.B16.B17.B18.B19.A20.A 21.B 22. D 23.A 24.B 25.B 26.D (1)char (2)void *p; (3)double (4) scanf (5)-1 (6)8.0 (7)-32768 (8) no (9)3, 9, 3 (10)2,3,4,1 (11)6,2,4,3,5,1 (12)9 6 3 (13)8 5 2 (14)31 (15)32 (16)-33 (17) math.h (18)fabs(term) (19)--x*x/(n*(n+1)) (20)p[k].index (21)p[k] (22)inserttv(p,s1,4) (23)a*100+b*10+c (24)sum/100 (25)w=1; (26)s[j]==s[k] (27)pk->next (28)pj->d (29)pn!=head (30)return k 一:改错题(20分) 题目: 函数find_replace的功能是:在s1串中查找s2子串,并用s3子串替换找到的所有s2子串,若s1串中没有出现s2子串,则不做替换并使函数返回0,否则返回1. 例如:若s1子串为”This is a test program and a test data.”,s2子串为”test”,s3子串为”actual”,若程序正确,输出结果应为:”This is a actual program and a actual data.” 含有错误的源程序如下: #include <stdio.h> #include <string.h> int find_replace(char *s1, char *s2, char s3) { int i,j,k=0,t=0; char temp[80]; if(*s1='\0' || *s2='\0') return t; for(i=0;s1[i]!='\0';i++) { for(j=0,k=0;s1[j]= =s2[k];j++,k++); /*比较s2是否在s1中*/ if(s2[k]= ='\0') { strcpy(temp, s1[j]); strcpy(&s1[i],s3); i=i+strlen(s3); strcpy(&s1[i],temp); t=1; } } return t; } main() { char line[80]="This is a test program and a test data.", substr1[10]="test",substr2[10]="actual"; puts(line); if(find_replace(line,substr1,substr2)) puts(line); else printf("not found"); } 编程题目: [题目] 1. 编写函数int encode(int a[ ][4]),对二维数组中左下三角的全部元素(包括对角线上的元素)做如下变换:(1)若该元素不是素数则保持不变(2)若该数是素数,则用大于它的最小素数替换该数,函数返回二维数组左下三角的元素中素数的个数 2. 编写main函数,声明一个二维数组并用以下测试数据给二维数组赋初值。调用encode函数对该数组作变换,将变换后的数组全部元素(以二维数组形式)及左下三角元素中素数的个数写入文件myf2.out中 测试数据 3 6 4 7 8 5 9 10 12 19 7 20 4 14 21 23 变换后的数据 5 6 4 17 8 7 9 10 12 23 11 20 4 14 21 29 1.将源文件取名为myf2.c,输出结果文件取名为myf2.out。 ‘ 2.数据文件的打开、使用和关闭等操作均用C标准库中缓冲文件系统的文件操作函数 实现。 3.源程序文件和运行结果文件均须保存在T:盘的根目录下,供阅卷用。 4.不要将myf2.obj、myf2.exe保存到T:盘中。 改错题答案: (1) int find_replace(char *s1, char *s2, char s3) 修改为:int find_replace(char *s1, char *s2, char *s3) (2) if(*s1='\0' || *s2='\0') 修改为: if(*s1= ='\0' || *s2= ='\0') (3) for(j=0,k=0;s1[j]= =s2[k];j++,k++); 修改为:for(j=i,k=0;s1[j]= =s2[k];j++,k++); (4) strcpy(temp, s1[j]); 修改为: strcpy(temp, &s1[j]); 编程题答案: #include <stdio.h> #include <math.h> int prime(int n) /*判断素数算法*/ { int i,k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0) return 0; return 1; } int encode(int a[][4]) { int i,j,k=0; for(i=0;i<4;i++) for(j=0;j<=i;j++) if(prime(a[i][j])) { while(!prime(a[i][j]+=2));k++;/*求大于它的最小素数*/ } return k; } main() { FILE *fp; int a[4][4]={3,6,4,17,8,5,9,10,12,19,7,20,4,14,21,23},i,j,count=0; if((fp=fopen("myf2.out","w"))==NULL) {printf("create file myf2.out failed!\n");exit(0);} count=encode(a); for(i=0;i<4;i++) { for(j=0;j<4;j++) {fprintf(fp,"%4d",a[i][j]); printf("%4d\n",a[i][j]); } fprintf(fp,"\n"); } fprintf(fp,"count=%4d\n",count); fclose(fp); } |