国家二级C语言机试(程序设计题)模拟试卷2(题后含答案及解析)
国家二级C语言机试(程序设计题)模拟试卷2 (题后含答案及解析)
题型有:1.
1. 使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。例如,若8所指字符串中的内容为“ABCDEFG12345”,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是“BDF12345”。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<string.h>void fun(char*s,char t[]){}main( ){char s[100],t[100];void NONO( );printf(“\nPlease enter string S:”);Scanf(“%s”,s);fun(s,t);printf(“\nThe result is:%s\n”,t);NONO( );}void NONO( ){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],t[100];FTLE*rf,*wf;int i;rf=fopen(“in.dat”,”r”);wf=fopen(“out.dat”,”w”);for(i=0;i<10;i++){fscanf(rf,”%s”,s);fun(s,t);fprintf(wf,”%s\n”,t);}fclose(rf);fclose(wf);}
正确答案:void fun(char*s,char t[]){int i,j=0;for(i=0;i<strlen(s);i++)if(!((i%2)==0&&(s[i]%2)))t[j++]=s[i];t[j]=0;}
解析:本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。在赋值新的字符串之前,先对数组元素的下标和ASCII码的值进行判断,将满足要求的元素赋给新的字符串。
2. 使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放入主函数的age数组中。要求函数把0~9岁年龄段的人数放在d[0]中,把10~19岁年龄段的人数放在d[1]中,把20~29岁年龄段的人数放在d[2]中,依此类推,把100岁(含100岁)以上年龄的人数都放在d[10]中。结果在主函数中输出。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#define N50#define M11void fun(int*a,int*b){}double rnd( ){static t=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}void main( ){FILE*wf;int age[N],i,d[M];int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};for(i=0;i<N;i++)age[i]=(int)(115*rnd( ));/*产生一个随机的年龄数组*/printf(“The original data:\n”);for(i=0;i<N;i++)printf((i+1)%10==0?”%4d\n”:”%4d”,age[i]);/*每行出10个数*/printf(“\n\n”);fun(age,d);for(i=0:;i<10;i++)printf(“%4d﹣﹣﹣%4d:%4d\n”,i*10,i*10+9,d[i]);
printf(“Over100:%4d\n”,d[10]);/*********found*********/wf=fopen(“out.dat”,”w”);fun(b,d);for(i=0;i<10;i++)fprintf(wf,”%4d—%4d:%4d\n”,i*10,i*10+9,d[i]);fprintf(wf,”Over100:%4d”,d[10]);fclose(wf);/*********found*********/}
正确答案:void fun(int*a,int*b){int i,j;for(j=0;j<M;j++)b[j]=0;/*数组b初始化为0*/for(i=0;i<N;i++)if(a[i]>=100)b[10]++;/*如果年龄大于等于100,b[10]自增1*/elseb[a[i]/10]++;/*如果年龄小于100,则将其分别统计到b[a[i]/10]中*/}
解析:本题是一个分段函数的问题,用两个循环来完成。第1个循环的作用是使b中的所有元素值都为0。这个循环不能省略,因为若未对b中的元素赋初值,则它们的值是不可预测的。第2个循环的作用是分别统计a中各年龄段的人数。当a[i]≥100时,按题意要将其统计到b[10]中。else的作用是如果年龄小于100,则将其分别统计到b[a[i]/10]中。由运算优先级可知先进行a[i]/10的运算,所得结果作为b的下标。若a[i]为0~9时,a[i]/10的值为0,且0~9岁的人数正好要存入b[0]中。若a[i]为10~19时,a[i]/10的值为1,且10~19岁的人数正好要存入b[1]中,依此类推。
3. 编写函数fun,其功能是:根据以下公式计算S,并将计算结果作为函数值返回,n通过形参传入。 例如,若n的值为11时,函数的值为1.833333。
注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>float
fun(int n){}void main( ){ int n; float s; system(“CLS”);
printf(“\nPlease enter N:”); scanf(“%d”,&n); s=fun(n); printf f”The
result is:%f\n”,s);}
正确答案:float fun(int n){int i,s1=0;float s=0.0;for。(i=1;i<=n;i++){s1=s1+i; /*求每一项的分母*}s=s+1.0/s1; /*求多项式的值*/}return s;}
解析:此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。本题中表达式的规律是1+2+…+n的倒数之和,那么可以通过for循环语句来实现第1项到第n项的变化。其实就是累加算法,方法是先根据题目要求定义变量,注意该变量的数据类型,然后对其进行初始化操作,因为该变量的作用是累加器,所以初始值应为0(或0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。本题中s1用来表示每一项的分母,每一项的分母都是由前一项分母加项数。注意,由于s1定义成一个整型,所以在s=s+1.0/s1语句中不能把1.0写成1。
4. 请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数己按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数
fun的花括号中填入你编写的若干语句。1 #include<stdio.h>2 #define.N 803
int fun(int a[],int n)4 {56 }7 main( )8 {int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;void NONO( );9
printf(‘‘The original data:\n’’);10 for(i=0; i<n; i++)printf(‘‘%3d’’,a[i]);11 n=fun(a,n);12 printf(‘‘\n\nThe data after deleted:\n’’);13 for(i=0;i<n;i++)printf(‘‘%3d’’,a[i]);printf(‘‘\n\n’’);14 NONO( );15 }16 void
NONO( )17 {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/18 FILE *rf,*wf;int a[N],n,i,j;19
rf=fopen(‘‘in.dat’’,’’r’’);20 wf=fopen(‘‘out.dat’’,’’w’’);21 for(i=0;i<5;i++) {22 fscanf(rf,’’%d’’,&n);23 for(j=0 ; j<n; j++)fscanf(rf,’’%d’’,&a[j]);24 n=fun(a,n);25 for(j=0;j<n;j++) fprintf(wf,’’%4d’’,a[j]);26 fprintf(wf,’’\n’’);27 }28 fclose(rf); fclose(wf);29 }
正确答案:1 int i,t,j=0,‘p=a;2 t=p[0]; //设置临时变量t初值指向第一数组值3 for(i=0;i<=n; i++)4 if(t==p[i]) //当临时变量与数组中的某个值相同则跳出,比较下一个元素5 ;6 else //如果临时变量与数组中值不同,则对临时变量重新赋值7 { a[j]=t;8 t=p[i];9 j++;}10
if(i>=n) a[j]=t;11 return j;
解析:该程序功能是删去一维数组中所有相同的数,使之只剩一个。解题思路是,首先在函数中定义临时变量指向每一个元素,然后在循环过程中将临时值和其他元素进行比较,如果相同,那么跳过相同字符。 (1)首先,设置一个临时变量,初值设置为一维数组的第一个元素。 (2)然后,依次将数组的元素与临时变量比较,如果相同,则继续取数组下一个元素与临时变量比较:如果不同,则将临时变量的值赋值到数组的第一个元素,同时将此与临时变量不同的数组元素赋值给临时变量。 (3)循环执行,直到所有的数据处理完毕。
5. 请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。 例如,二维数组中的数据为: 33 33 33 33 44
国家二级C语言机试(程序设计题)模拟试卷19(题后含答案及解析)
国家二级C语言机试(程序设计题)模拟试卷19 (题后含答案及解析)
题型有:1.
1. 下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a [][N]),该函数的功能是:将数组左下半三角元素中的值全部置0。例如a数组中的值为:1 9 72 3 84 5 6则返回主程序后a数组中的值应为:0 9 70 0 80
0 0注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<(20hio.h>#include<stdio.h>#include<stdlib.h>#define N5void fun(int a[][N]){}void main( ){FILE*wf;int a[N][N],i,j;int b[N][N]={1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4};system(“CLS”);printf(“*****The array*****\n”);for(i=0;i<N;i++)/*产生一个随机的5*5矩阵*/{for(j=0;j<N;j++){a[i][j]=rand( )%10;printf(“%4d”,a[i][j]);}printf(“\n”);}fun(a);printf(“THE RESULT\n”);for(i=0;i<N;i++){for(j=0;j<N;j++)printf(“%4d”,a[i][j]);printf(“\n”);}/****************/wf=fopen(“out.dat”,”w”);fun(b);for(i=0;i<N;i++){for(j=0;j<N;j++)fprintf(wf,”%4d”,b[i][j]);fprintf(wf,”\n”);}fclose(wf);/****************/}
国家二级C语言机试(程序设计题)模拟试卷14(题后含答案及解析)
国家二级C语言机试(程序设计题)模拟试卷14 (题后含答案及解析)
题型有:1.
1. 已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。已给出函数的首部,请完成该函数。注意:部分源程序在文件PROGl.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序:#include < stdio .h >#include < string .h >#include < conio .h >#include
< stdlib.h >#de fine N 10typedef struct ss{ char num[10] ; int s;} STU;fun(STU a[], STU *s) { }void main ( ) { FILE *wf; STU a[N] =
{ {“A01”,81 }, {“A02”,A05”,77}, {“A06”,90}, {“A07”,79}, int i;
system (“CLS”); printf (“ ***** The original data*****\n”); printf (“No
=%s Mark =%d\n”, a[i].nim,a[i].s); printf (“**** THE RESULT **** \n”),
printf (“The lowest:%s, %d\n”,m.num,m.s);/*********found*********/
wf=fopen (“out.dat”, “w”) ; fprintf (wf, “% s, %d”,m.num,m.s); fclose
(wf);/******************/
国家二级C语言机试(程序填空题)模拟试卷9(题后含答案及解析)
国家二级C语言机试(程序填空题)模拟试卷9 (题后含答案及解析)
题型有:1.
1. 函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数isleap用来判别某一年是否为闰年。例如,若输入:2008 5 1,则程序输出:2008年5月1日是该年的第122天。请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>int
isleap(int year){int leap;leap=(year%4==0&&year%100!=0||year%400==0);return___1___;}int fun(int year,int month,int day){int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int days=0,i;for(i=1;i<month;i++)days=days+table[i];/******found******/days=days+___2___;if(isleap(year)&&month>2)/******found******/days=days+___3___;return
days;}main( ){int year,month,day,days;printf(“请输入年、月、日:”);scanf(“%d%d%d”,&year,&month,&day);days=fun(year,month,day);printf(“%d年%d月%d日是该年的第%d天\n”,year,month,day,days);}
正确答案:(1)leap(2)day(3)1
解析:本题考查:对循环结构的理解和掌握。填空1:leap isleap( )函数判断是否是闰年,由于初始化2月为28天,但是闰年是29,所以闰年要多加1天,isleap( )应该返回0或者1,leap的表达式为逻辑运算,得到的结果刚好是0或1。填空2:day前面累加了平年月份的天数,还需要加上日的天数。填空3:如果是闰年并且累加月份大于2月,需要多加1天。
国家二级(C语言)机试模拟试卷298(题后含答案及解析)
国家二级(C语言)机试模拟试卷298 (题后含答案及解析)
题型有:1. 程序填空题 2. 程序修改题 3. 程序设计题
程序填空题(30分)
1. 给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。
例如,当形参n的值为10时,函数返回:-0.204491。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意;源程序存放在考生文件夹下的BLANKl.C中。 不得增行或删行,也不得更改程序的结构!#include double fun(int n){ int i,k;double s,t; s=0;/**********found***********/ k=【1】; for(i=1;i0):”); scarlf(“%d”,&n);) printf(“\nThe result is:%f\n”, fun(n));}
正确答案:(1)1 (2)2*i (3)(一1)
解析:第一空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);”可知t*t表示的是级数项的分母,t=2*i,t=2,4,6…,故t的初始化值应为1,因此第一空处应为“1”。
第二空:由第一空的分析可知,第二空处应为“2*i”。 第三空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);”可知,k是级数项的(-1)n-1部分,所以在循环中k是每次都乘以-1,故第三处应为“(-1)”。
程序修改题(30分)
2. 给定程序MODIl.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>/***********found**********/void fun(10ng s,long t){long sl=10; s/=10; *t=s%10;/*********found*********/ while(s<0) { s=s/100; *t=s%10*s1+*t; s1=s1*10; }}main( ){long s,t; printf(“\nPlease enLer
国家二级C语言机试(程序设计题)模拟试卷11(题后含答案及解析)
国家二级C语言机试(程序设计题)模拟试卷11 (题后含答案及解析)
题型有:1.
1. 请编写函数fun,其功能是:统计s所指字符串中的数字字符个数,并作为函数值返回。 例如,s所指字符串中的内容是:2det35adh253kjsdf
7/kj8655x, 函数fun返回值为:11 注意:部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序:#include < stdio.h >void
NONO( );int fun(char*s){}main( ){char*s=“2clef35adh25 3kjsdf7/kj8655x”;
printf(“%s\n”,s); printf(“%d\n”,fun(s)); NONO( );}void NONO( ){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE*fp,* wf; int i; char s[256]; fp=fopen(“in.clat”,”r”);
wf=fopen(“out.dat”,”w”); for(i=0;i < 10;i++){ fgets(s,2 55,fp);
fprintf(wf,”%d\n”,fun(s)); } fclose(fp); fclose(wf);}
正确答案:int fun (char * s){ int n =0;char *p;n ++ ;return n;}
解析:要统计字符串中数字字符的个数,首先应定义变量n,并初始化为0,然后遍历字符串,逐个判断字符是否为数字字符,判断条件为该元素的ASCII码在字符0和9的ASCII码之间,若判断条件成立,则使n的值加1,否则,继续判断下一个字符,直到字符串结束。
国家二级C语言机试(C语言基础知识)模拟试卷2(题后含答案及解析)
国家二级C语言机试(C语言基础知识)模拟试卷2 (题后含答案及解析)
题型有:1. 选择题
选择题
1. 下列叙述中错误的是
A.C程序可以由多个程序文件组成
B.一个C语言程序只能实现一种算法
C.C程序可以由一个或多个函数组成
D.一个C函数可以单独作为一个C程序文件存在
正确答案:B
解析:算法是指为解决某个特定问题而采取的确定且有限的步骤。在C语言中一个算法是用函数来实现的。一个C语言源程序由许多函数组成,这些函数都是根据实际任务,确定具体的算法,由用户自己编写。C语言源程序可以放在不同的文件中,同一个源程序中的函数也可放在不同的文件中,所以一个C语言程序可以实现多种算法。 知识模块:C语言基础知识
2. 以下选项中关于程序模块化的叙述错误的是
A.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块
B.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序
C.把程序分成若干相对独立的模块,可便于编码和调试
D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序
正确答案:B
解析:如果应用结构化程序设计方法设计程序,那么可采用自顶向下,逐步细化的设计方法把若干独立模块组装成所要求的程序。 知识模块:C语言基础知识
3. 以下不能用于描述算法的是
A.程序语句
B.E.R图
C.伪代码和流程图
D.文字叙述
正确答案:B
解析:E-R图为实体.联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。描述算法的有流程图,盒图,伪代码,文字描述以
及程序代码描述。 知识模块:C语言基础知识
4. 以下叙述中正确的是
A.每个后缀为.c的C语言源程序都应该包含一个main函数
B.在C语言程序中,main函数必须放在其他函数的最前面
C.每个后缀为.c的C语言源程序都可以单独进行编译
D.在C语言程序中,只有main函数才可单独进行编译
国家二级C语言机试(程序设计题)模拟试卷10(题后含答案及解析)
国家二级C语言机试(程序设计题)模拟试卷10 (题后含答案及解析)
题型有:1.
1. 请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出”YES”,否则返回0,主函数中输出” NO”。回文是指顺读和倒读都一样的字符串。 例如,字符串LEVEL是回文,而字符串123312就不是回文。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数maln和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include < stdio .h >#define N 80int fun (char *
str){main ( ) { char s[N] ; FILE * out; char * test[]
={“1234321”,”123421”, “123321”, “abcdCBA” } ; int i; printf (“Enter a
string : “); gets (s) ; printf (“\n\n”) ; puts (s) ; if (fun
(s))printf (“YES\n”) ; elseprintf (“NO\n”) ;/******************/ out
= fopen (“out.dat”‘“w”) ; if (fun (test[i] )) fprintf (out, “YES\n”) ; else
fprintf (out, “NO\n”) ; fclose (out) ;/******************/ }
正确答案:int fun(char*str){int i,n =0, fg =1;char *p=str;while(*p)/*将指针p置位到字符串末尾,并统计字符数*/{n++;p++;}for(i=0;i < n/2;i++)/*循环比较字符*/if (str[i]==str[n 一1一1]);/*相同,什么都不作*/else/*不同,直接跳出循环*/{fg=0;break;}return fg;}
国家二级(C语言)机试模拟试卷391(题后含答案及解析)
国家二级(C语言)机试模拟试卷391 (题后含答案及解析)
题型有:1. 程序填空题 2. 程序修改题 3. 程序设计题
程序填空题(30分)
1. 给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!
正确答案:(1)i (2)ps[j] (3)tp
解析:本题中函数fun的功能是利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。在fun函数中采用了选择排序法,在选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。
程序修改题(30分)
2. 下列给定程序中函数fun( )的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:
#include<stdio.h> #include <conio.h>
/*************found**************/ void fun(long s,long t)
{ long s1=10; s/=10; *t=s%10; /*************found**************/
国家二级(C语言)机试模拟试卷45(题后含答案及解析)
国家二级(C语言)机试模拟试卷45 (题后含答案及解析)
题型有:1. 选择题 2. 程序填空题 3. 程序修改题 4. 程序设计题
选择题
1. 下列叙述中正确的是
A.一个算法的空间复杂度大,则其时间复杂度也必定大
B.一个算法的空间复杂度大,则其时间复杂度必定小
C.一个算法的时间复杂度大,则其空间复杂度必定小
D.算法的时间复杂度与空间复杂度没有直接关系
正确答案:D
解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。
2. 下列叙述中正确的是
A.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化
B.循环队列中的元素个数随队头指针的变化而动态变化
C.循环队列中的元素个数随队尾指针的变化而动态变化
D.以上说法都不对
正确答案:A
解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。
3. 一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为
A.219
B.229
C.230
D.231
正确答案:B
解析:二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。
4. 对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为
A.9
B.10
C.45
D.90
正确答案:C
解析:冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。
国家二级(C语言)机试模拟试卷396(题后含答案及解析)
国家二级(C语言)机试模拟试卷396 (题后含答案及解析)
题型有:1. 程序填空题 2. 程序修改题 3. 程序设计题
程序填空题(30分)
1. 给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKl.C中。 不得增行或删行,也不得更改程序的结构!#include <stdio.h>void fun(char *s){int i, n, k; char c; n=0; for(i=0;
s[i]!=‘\0’; i++) n++;/**********found**********/ if(n%2==0) k=n-【1】; else
k=n-2;/**********found**********/ c=【2】; for(i=k-2; i>=1; i=i-2)
s[i+2]=s[i];/**********found**********/ s[1]=【3】;}main( ){char
s[80]=“abcdefgh”; printf(“\nThe original string is : %s\n”,s); fun(s);
printf(“\nThe result is : %s\n”,s);}
正确答案:1 s[k]c
解析:第一空:“for(i=0; s[i]!=‘\0’; i++) n++;”n记录了数组s的长度,“if(n%2==0)”如果长度n是偶数,那么最右边被移出的字符的下标是在n-1,如果n是奇数,那么最右边被移出的字符的下标是n-2,因此第一空处应为“1”。第二空:题目要求最右边被移出字符串的字符绕回放到第一个奇数位置,因此最右边被移出的字符是s[k],在s[k]被替换之前必须先把s[k]保存在其他变量中,故第二空处应为“s[k]”,将s[k]保存在c中。第三空:此处是把最右边被移出字符串的字符绕回放到第一个奇数位置,最右边被移出字符保存在c,第一奇数位置是s[1],故第三处应为“c”。
