1、C语言22次四川省普通高等学校计算机应用知识和能力第二十二次等级考试二级(C与C+语言) 笔 试 试 卷时间: 2005年4月16日 上午 9:0011:00第一部分软件技术基础(共15分)一、是非判断题(每小题1分,共10分)( 判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B )1. C+语言中所定义的类实际上也是一种数据类型。 ( 1 )2. 数据结构的表示包括数据逻辑结构和存储结构两方面的表示。 ( 2 )3. 冒泡排序算法是一种只能实现升序排序,而不能实现降序排序的排序算法。 ( 3 )4. 线性表采用链式存储时,结点的存储地址必须是连续的。 ( 4 )5. 栈顶的
2、位置是随着进栈和退栈操作而变化的。 ( 5 )6. 在软件生存期内,软件必须进行维护,维护不会产生副作用。 ( 6 )7. 采用动态重定位进行地址转换,允许程序在执行过程中在内在中移动。而静态重定位则不可以。 ( 7 )8. 在软件的需要分析阶段,要直接面向用户,主要考虑用户的经济承受能力和费用的支付问题。 ( 8 )9. 需求分析阶段的主要任务应由系统分析员主持完成。 ( 9 )10.操作系统是最重要的系统软件。 ( 10 )二、选择题( 每小题1分,共5分 )1. 以下特征中哪个不是算法的特征 ( 11 )。 11 (A) 可行性 (B) 确定性 (C) 有穷性 (D) 唯一性2. 在多道
3、程序设计系统中,处于后备状态的作业要经过 ( 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
4、) 程序设计语言的先进性 (D) 程序的规模第二部分C与C+语言程序设计(共85分)一、单项选择题(每小题1分,共10分) 1. 下列程序运行的结果是 ( 16 ) # include 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 # include main() char *p,*q; p=(char *)malloc(sizeof(char)*20)
5、; 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 void main() int a=-1,b=4,k; k=(a+=0)&(!(b-=0); coutkabendl; 18 (A) 003 (B) 103 (C)112 (D) 012 4. 关于类概念的描述中,( 19 ) 是错误的。 19 (A) 类就是C语言中的结构体类型 (B) 类是创建对象的样板(C)
6、 类是具有共同行为的若干对象的统一描述体(D) 类是抽象数据类型的实现 5.下列程序的运行结果是 ( 20 ) 。 # include 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 # define M 3# define N M+1# define NN N*N/2main() printf(%dn,NN);
7、 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 (xy); (B) if(x=y) x+=y; (C) if(x!=y) x=x*x else x+=1; (D) if(xnext=
8、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 # include void fun(char *s,int m) char t,*p1,*p2; p1=s; p2=s+m-1; while(p1p2) t=*p1+; *p1=*p2-; *p
9、2=t; main() char a=ABCDEFG; fun(a,strlen(a); puts(a); 26 (A) GFEDCBA (B) AGADAGA (C) GAGGAGA (D) AGAAGAG 2. 读下列C程序,选择正确的输出结果。# include # include void fun(char str10, int n) char t20; int i,j; for(i=0;in-1;i+) for(j=i+1;jn;j+) if( strlen(stri) strlen(strj) ) strcpy(t,stri); strcpy(stri,strj); strcpy(
10、strj,t); main() char str10=abc,aabcd,abed,a,acdefg; int i; fun(str,5); for(i=0;i5;i+) printf(%2d,strlen(stri); printf(n); for(i=0;i5;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)acd
11、efg (D)a aabcd abc aabcd abc abed abed abed aabcd a aabcd abc abed acdefg acdefg a aabcd 3. 以下是一个C+程序,读程序并回答问题。# include 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; coutuv; t=fun(u,v); couttendl; coutu*v/tendl; 若从键盘中输入10 15;回答下列两个问题:(1) 第一条输
12、出语句的输出结果为( 29 )。 29 (A) 5 (B) 10 (C) 15 (D) 30(2) 第二条输出语句的输出结果为( 30 )。30 (A) 5 (B) 10 (C) 15 (D) 30 4. 以下程序的运行结果是 ( 31 )。# include chang(char *c,int fg) if(*c= ) return 1; else if( fg & *c=a ) *c+=A-a; return 0;main() int flag=1; char ch; do ch=getchar(); flag=chang(&ch,flag); putchar(ch); while(ch!
13、=n); 程序运行时,从第一列开始输入以下字符,代表换行符。 This is a book! 31 (A) tHIS IS A BOOK! (B) this Is A Book! (C) This Is A Book! (D) This Is a Book! 5. 以下程序的运行结果是( 32 ):# include 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,
14、2,4 (C) 10,4,8,10,2,8 (D) 9,4,8,2,2,5 6. 以下程序的输出是( 33 )。# include 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,
15、j,t;for(j=1;j=0 & tak ) ak+1=ak; k-; ak+1=t; 则该程序段的功能是( 34 )。 34 (A) 对数组a进行插入排序(升序) (B) 对数组a进行插入排序(降序)(C) 对数组a进行选择排序(升序) (D) 对数组a进行选择排序(降序) 8. 选择下面程序运行的结果。# include 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条pr
16、intf语句行输出的结果是( 36 )。 36 (A) 0 (B) 1 (C) 2 (D) 3 9. 选择下面程序运行的结果(设int占2个字节)# include 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个答案都
17、是错误的 第2条printf语句行输出的结果为( 38 )。 38 (A) mix=2 (B) mix=4 (C) mix=6 (D) 前3个答案都是错误的 10. 读下面程序,程序的命名为MyCopy.c 。/*-MyCopy.c-*/# include main(int argc,char *argv) if(argc!=3) printf(nFormat:MyCopy n); else FILE *source,*desine; source=fopen(argv1,rb); desine=fopen(argv2,wb); if(source=NULL) printf(ERROR:Can
18、t open source file %s!n,argv1); else if(desine=NULL) printf(ERROR:Cant 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
19、FILE1 FILE2,则程序将实现( 40 )。 41 (A) 将FILE1的信息显示在屏幕上 (B) 将FILE1和FILE2合并 (C) 将一个FILE2复制到FILE1中 (D) 将一个FILE1复制到FILE2中注意: 请把下面“程序填空”中各小题答案写在主观题答题纸上 每一个空只填一个语句或一个语句所缺的部分内容三、程序填空 ( 每空2分,共30分 ) 1. 以下程序的功能是将磁盘文件a.dat中的10个整数读入并进行升序排序。# include void sort(int *p,int n) int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn,j+)
20、 if( ) t=pi; pi=pj; pj=t; main() int a10,i; FILE *fp; fp=fopen(a.dat,r); for(i=0;i10;i+) ; fclose(fp); for(i=0;i10;i+) printf(%d ,ai); printf(n); ; for(i=0;i10;i+) printf(%d ,ai); printf(n); 2. 下列程序用递归算法实现,输入任意一个整数,在各数位之间插入空格后输出。# include main() long int n; void func(long); scanf(%ld,&n); ;void func
21、( ) if(m=0) ; printf( %d,m%10); 3. 程序功能:有10个数按升序放在一个数组中,输入一个数,要求用折半查找该数是数组中的第几个元素,如果该数不在数组中,打印出“NO”。折半查找法:设数组长度为n,则将输入的数m与an/2比较,若man/2,则将an/2到an的数继续折半进行查找。# include 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(bot
22、t=top) mid= ; if(num=amid) printf(%d is the %d numbern,num,mid+1); break; else if(numamid) ; else bott=mid+1; if( ) printf(Non); 4. 有两个字符串str1和str2,将str1和str2对应字符中ASCII码值较大者存入字符数组str3的对应位置,若str1和str2长度不一致,则将较长字符串中剩余字符直接连接到str3的末尾。例如:str1存放字符串abaxef,str2存放字符串bac,则str3中的字符串为bbcxef。# include # include
23、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 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);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1