四川省计算机等级考试二级C语言笔试题(共21页).doc
精选优质文档-倾情为你奉上四川省计算机等级考试二级C语言笔试题(第二十二次)一 2009-03-29 15:24:34 四川省普通高等学校计算机应用知识和能力第二十二次等级考试二级(C与C+语言) 笔 试 试 卷时间: 2005年4月16日 上午 9:0011:00第一部分软件技术基础(共15分)一、是非判断题(每小题1分,共10分)( 判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B )1. C+语言中所定义的类实际上也是一种数据类型。 ( 1 )2. 数据结构的表示包括数据逻辑结构和存储结构两方面的表示。 ( 2 )3. 冒泡排序算法是一种只能实现升序排序,而不能实现降序排序的排序算法。 ( 3 )4. 线性表采用链式存储时,结点的存储地址必须是连续的。 ( 4 )5. 栈顶的位置是随着进栈和退栈操作而变化的。 ( 5 )6. 在软件生存期内,软件必须进行维护,维护不会产生副作用。 ( 6 )7. 采用动态重定位进行地址转换,允许程序在执行过程中在内在中移动。而静态重定位则不可以。 ( 7 )8. 在软件的需要分析阶段,要直接面向用户,主要考虑用户的经济承受能力和费用的支付问题。 ( 8 )9. 需求分析阶段的主要任务应由系统分析员主持完成。 ( 9 )10.操作系统是最重要的系统软件。 ( 10 )二、选择题( 每小题1分,共5分 )1. 以下特征中哪个不是算法的特征 ( 11 )。 11 (A) 可行性 (B) 确定性 (C) 有穷性 (D) 唯一性2. 在多道程序设计系统中,处于后备状态的作业要经过 ( 12 ) 调度后才能真正执行。 12 (A) 作业调度 (B) 作业调度和进程调度 (C) 进程调度 (D) 作业调度和设备调度3. 为解决CPU和I/O设备之间速度匹配问题,常采用“缓冲区”方法。“缓冲区”的结构多为 ( 13 )。 13 (A) 顺序栈 (B) 链栈 (C) 顺序队列 (D) 循环队列4. 对象实现了数据和操作的结合,使数据和操作 ( 14 ) 于对象的统一体中。 14 (A) 结合 (B) 程序的效率 (C) 封装 (D) 抽象5. 结构化程序设计主要强调的是 ( 15 )。 15 (A) 程序易读性 (B) 程序的效率 (C) 程序设计语言的先进性 (D) 程序的规模第二部分C与C+语言程序设计(共85分)一、单项选择题(每小题1分,共10分) 1. 下列程序运行的结果是 ( 16 ) # include <stdio.h>void swap(int x,int y) x=y;y=x;x=y; main() int a=010,b=1; swap(a,b); printf("%d,%dn",a,b); 16 (A) 10,1 (B) 8,1 (C) 1,8 (D) 1,10 2. 有以下程序 # include <malloc.h># include <stdio.h>main() char *p,*q; p=(char *)malloc(sizeof(char)*20); q=p; scanf("%s %s",p,q); printf("%s,%s",p,q);若输入:abc def <回车>,则输出为 ( 17 ) 。 17 (A)def,def (B) abc,def (C) abc,d (D) d,d 3. 下列程序的输出是 ( 18 )。# include <iostream.h>void main() int a=-1,b=4,k; k=(a+<=0)&&(!(b-<=0); cout<<k<<a<<b<<endl; 18 (A) 003 (B) 103 (C)112 (D) 012 4. 关于类概念的描述中,( 19 ) 是错误的。 19 (A) 类就是C语言中的结构体类型 (B) 类是创建对象的样板(C) 类是具有共同行为的若干对象的统一描述体(D) 类是抽象数据类型的实现 5.下列程序的运行结果是 ( 20 ) 。 # include <stdio.h>main() void fu(); fu(); fu();void fu() static int a=0; printf("a=%d,",!a ? 1 : 8 ); 20 (A) a=8,a=8, (B) a=1,a=8 (C) a=8,a=1, (D) a=1,a=1, 6. 以下程序中,输出值是 ( 21 ) 。# include <stdio.h># define M 3# define N M+1# define NN N*N/2main() printf("%dn",NN); 21 (A) 3 (B) 4 (C) 6 (D) 8 7. 若有语句:char s1="string1",s28,*s3,*s4="string2" 则 ( 22 ) 是对库函数strcpy的错误调用。 22 (A) strcpy(s1,"string2"); (B) strcpy(s4,"string1");(C) strcpy(s3,"string1"); (D) strcpy("string2",s2); 8. 以下 ( 23 ) 为不正确的if语句 。 23 (A) if (x>y); (B) if(x=y) x+=y; (C) if(x!=y) x=x*x else x+=1; (D) if(x<y) x+;y+; 9. 关于C+函数参数的描述中,错误的是 ( 24 ) 。 24 (A) 实参个数与形参个数可以不同 (B) 缺省参数必须放在形参表的最右端 (C) 用引用变量作形参可以实现地址传递 (D) 重载函数可以有缺省参数 10. 若有如下定义:struct node int data; struct node *next;46q且已建立下面的链表结构,指针p,q分别指向图中所示结点,则不能将q所指结点插入链表末尾的一组语句是( 25 )。p445 NULL head 25 (A) q->next=NULL; p=p->next; p->next=q; (B) p=p->next; q->next=p->next; p->next=q;(C) p=p->next; q->next=p; p->next=q; (D) p=(*p).next; (*q).next=(*p).next; (*p).next=q;二、读程序回答问题(每个选择3分,共45分) 1. 下列程序运行的结果为 ( 26 )。# include <stdio.h># include <string.h>void fun(char *s,int m) char t,*p1,*p2; p1=s; p2=s+m-1; while(p1<p2) t=*p1+; *p1=*p2-; *p2=t; main() char a="ABCDEFG" fun(a,strlen(a); puts(a); 26 (A) GFEDCBA (B) AGADAGA (C) GAGGAGA (D) AGAAGAG 2. 读下列C程序,选择正确的输出结果。# include <stdio.h># include <string.h>void fun(char str10, int n) char t20; int i,j; for(i=0;i<n-1;i+) for(j=i+1;j<n;j+) if( strlen(stri) < strlen(strj) ) strcpy(t,stri); strcpy(stri,strj); strcpy(strj,t); main() char str10="abc","aabcd","abed","a","acdefg" int i; fun(str,5); for(i=0;i<5;i+) printf("%2d",strlen(stri); printf("n"); for(i=0;i<5;i+) puts(stri); (1) main函数中,第一个for循环的输出结果为: ( 27 )。27 (A) 6 5 4 3 1 (B) 1 3 4 5 6 (C) 7 6 5 4 2 (D) 2 4 5 6 7(2) main函数中,第二个for循环的输出结果为: ( 28 )。 28 (A) abc (B)a (C)acdefg (D)a aabcd abc aabcd abc abed abed abed aabcd a aabcd abc abed acdefg acdefg a aabcd 3. 以下是一个C+程序,读程序并回答问题。# include <iostream.h>int fun(int u,int v) int temp; while(v!=0) temp=u%v; u=v; v=temp; return u;void main() int u,v; int t; cout<<"Input two integers:" cin>>u>>v; t=fun(u,v); cout<<t<<endl; cout<<u*v/t<<endl; 若从键盘中输入10 15;回答下列两个问题:(1) 第一条输出语句的输出结果为( 29 )。 29 (A) 5 (B) 10 (C) 15 (D) 30(2) 第二条输出语句的输出结果为( 30 )。30 (A) 5 (B) 10 (C) 15 (D) 30 4. 以下程序的运行结果是 ( 31 )。# include <stdio.h>chang(char *c,int fg) if(*c=' ') return 1; else if( fg && *c<='z' && *c>='a' ) *c+='A'-'a' return 0;main() int flag=1; char ch; do ch=getchar(); flag=chang(&ch,flag); putchar(ch); while(ch!='n'); 程序运行时,从第一列开始输入以下字符,<CR>代表换行符。 This is a book!<CR> 31 (A) tHIS IS A BOOK! (B) this Is A Book! (C) This Is A Book! (D) This Is a Book! 5. 以下程序的运行结果是( 32 ):# include <stdio.h>main() int a=1,b=2,c=3; a+; c+=b; int b=4,c; c=2*b; a+=c; printf("%d,%d,%d,",a,b,c); printf("%d,%d,%dn",a,b,c); 32 (A) 10,4,8,10,2,5 (B) 6,2,4,6,2,4 (C) 10,4,8,10,2,8 (D) 9,4,8,2,2,5 6. 以下程序的输出是( 33 )。# include <stdio.h>main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+;break; case 1: b+;break; case 2: a+; b+; break; case 3: a+;b+; printf("a=%d,b=%dn",a,b); 33 (A) a=1,b=0 (B) a=2,b=1 (C) a=1,b=1 (D) a=2,b=2 7. 若有以下程序段:int a=4,0,2,3,1,k,j,t;for(j=1;j<5;j+) t=aj; k=j-1; while( k>=0 && t>ak ) ak+1=ak; k-; ak+1=t; 则该程序段的功能是( 34 )。 34 (A) 对数组a进行插入排序(升序) (B) 对数组a进行插入排序(降序)(C) 对数组a进行选择排序(升序) (D) 对数组a进行选择排序(降序) 8. 选择下面程序运行的结果。# include <stdio.h>int m33=1,2,3;int n33=1,2,3;main() printf("%dn",m10+n00); printf("%dn",m01+n10); 第1条printf语句行输出的结果是( 35 )。 35 (A) 0 (B) 1 (C) 2 (D) 3 第2条printf语句行输出的结果是( 36 )。 36 (A) 0 (B) 1 (C) 2 (D) 3 9. 选择下面程序运行的结果(设int占2个字节)# include <stdio.h>main() struct date int year,month,day; today; union long i; int k; char c; mix; printf("date=%dn",sizeof(struct date); printf("mix=%dn",sizeof(mix); 第1条printf语句行输出的结果为( 37 )。 37 (A) date=2 (B) date=4 (C) date=6 (D) 前3个答案都是错误的 第2条printf语句行输出的结果为( 38 )。 38 (A) mix=2 (B) mix=4 (C) mix=6 (D) 前3个答案都是错误的 10. 读下面程序,程序的命名为MyCopy.c 。/*-MyCopy.c-*/# include <stdio.h>main(int argc,char *argv) if(argc!=3) printf("nFormat:MyCopy <source_file> <desine_file>n"); else FILE *source,*desine; source=fopen(argv1,"rb"); desine=fopen(argv2,"wb"); if(source=NULL) printf("ERROR:Can't open source file %s!n",argv1); else if(desine=NULL) printf("ERROR:Can't open source file %s!n",argv2); else while(!feof(source) fputc(fgetc(source),desine); fclose(source); fclose(desine); (1)程序的功能是( 39 )。 40 (A) 将磁盘文件的信息显示在屏幕上 (B) 将一个磁盘文件复制到另一个磁盘文件中 (C) 将两个磁盘文件合并 (D) 以上答案都不对 (2)当编译、连接后,在命令行键入:MyCopy FILE1 FILE2<回车>,则程序将实现( 40 )。 41 (A) 将FILE1的信息显示在屏幕上 (B) 将FILE1和FILE2合并 (C) 将一个FILE2复制到FILE1中 (D) 将一个FILE1复制到FILE2中注意: 请把下面“程序填空”中各小题答案写在主观题答题纸上 每一个空只填一个语句或一个语句所缺的部分内容 三、程序填空 ( 每空2分,共30分 ) 1. 以下程序的功能是将磁盘文件a.dat中的10个整数读入并进行升序排序。# include <stdio.h>void sort(int *p,int n) int i,j,t; for(i=0;i<n-1;i+) for(j=i+1;j<n,j+) if( ) t=pi; pi=pj; pj=t; main() int a10,i; FILE *fp; fp=fopen("a.dat","r"); for(i=0;i<10;i+) ; fclose(fp); for(i=0;i<10;i+) printf("%d ",ai); printf("n"); ; for(i=0;i<10;i+) printf("%d ",ai); printf("n"); 2. 下列程序用递归算法实现,输入任意一个整数,在各数位之间插入空格后输出。# include <stdio.h>main() long int n; void func(long); scanf("%ld",&n); void func( ) if(m>=0) printf(" %d",m%10); 3. 程序功能:有10个数按升序放在一个数组中,输入一个数,要求用折半查找该数是数组中的第几个元素,如果该数不在数组中,打印出“NO”。折半查找法:设数组长度为n,则将输入的数m与an/2比较,若m<an/2,则将a0到an/2继续折半进行查找;若m=an/2,则表示找到该数的位置;若m>an/2,则将an/2到an的数继续折半进行查找。# include <stdio.h>main() int a10=12,32,45,62,71,76,80,85,90,95; int num,bott,top,mid; printf("Input a number:n"); scanf("%d",&num); bott=0; top=9; while(bott<=top) mid= if(num=amid) printf("%d is the %d numbern",num,mid+1); break; else if(num<amid) else bott=mid+1; if( ) printf("Non"); 4. 有两个字符串str1和str2,将str1和str2对应字符中ASCII码值较大者存入字符数组str3的对应位置,若str1和str2长度不一致,则将较长字符串中剩余字符直接连接到str3的末尾。例如:str1存放字符串"abaxef",str2存放字符串"bac",则str3中的字符串为"bbcxef"。# include <stdio.h># include <string.h>main() int i; char str80,str280,str380=" " char *p1,*p2; p1=str1; p2=str2; gets(str1); gets(str2); for(i=0; i+) if( *(p1+i) > *(p2+i) ) str3i = *(p1+i); else str3i = *(p2+i); if( ) strcat(str3,p1+i); else printf("Result:%sn",str3); 5. 下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。# include <stdio.h>void main() int i,s,k,count=0; for(i=100;i<=1000;i+) s=0; k=i; while( ) s=s+k%10; k= if(s!=5) else count+; printf("total=%dn",count);第二十二次等级考试第一部分 软件技术基础一、是非判断题(正确选填A,错误选填B)(每小题1分,共10分)110:AABBABBBAA二、单项选择题:(每小题1分,共5分)15 :DCDCA第二部分 C与C+语言程序设计一、单项选择题 (每小题1分,共10分)1、B 2、A 3、B 4、A 5、D6、C 7、D 8、C 9、D 10、C二、读程序题(每个选择3分,共45分)1、D 2、(1)A (2)C 3、(1)A (2)D4、C 5、A 6、B 7、B 8、(1)D (2)A 9、(1)C (2)B 10、(1)B (2)D 三、程序填空题(每空2分,共30分) 1、 pi>pj fscanf(fp,"%d",&ai ) sort(a,10) 2、 func(n) long m func(m/10) 3、 (bott+top)/2 top=mid-1 bott>top 4、 str1i!= '0'&&str2i!= '0' strlen(str1)>strlen(str2) strcat(str3,p2+i ) 5、 k>0 k/10 continue专心-专注-专业