《考练结合题程序员考试测练习题3及答案(1)(1)(备考)》由会员分享,可在线阅读,更多相关《考练结合题程序员考试测练习题3及答案(1)(1)(备考)(18页珍藏版)》请在金锄头文库上搜索。
1、温故而知新,下笔如有神。近两年程序员考试专题测练题及答案试题一阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。【说明】对于大于1的正整数n,(x+1)n可展开为下面流程图的作用是计算(x+1)n展开后的各项系数(i=0,1,.,n)并依次存放在数组A0.n中。方法是依次计算k=2,3,.,n时(x +1)k的展开系数并存入数组A,在此过程中,对任一确定的k,利用关系式,按照i递减的顺序逐步计算并将结果存储在数组A中。其中,和都为1,因此可直接设置A0、Ak的值为1。例如,计算(x+1)3的过程如下:先计算 (x+1)2 ( 即k=2) 的各项系数,然后计算(x+1)3(即
2、k=3)的各项系数。K=2时,需要计算,和,并存入A0 ,A1和A2,其中A0和A1的值已有,因此将(即 A1)和即 (A0)相加得到的值并存入A1。k=3 时,需要计算,和和,先计算出 (由)得到并存入A2,再计算 (由得到)并存入A1。 【问题1】【流程图】注:循环开始框内应给出循环控制变量的初值和终值,默认递增值为1。格式为:循环控制变量=初值,终值,递增值。(1)2,n,1(2)Ak(3)k-1,1,-1(4)Ai+Ai-1(5)Ai(1)(3)空为填写循环初值终值和递增值,题目中给出的格式为循环控制变量=初值,终值,递增值。按照题意,实质为求杨辉三角。如下图:计算方式为从第2行计算迭
3、代到计算第3行,再根据第3行值求取第4行,直到计算到第n行。所以第一空填2,n,1。而对于每行的求取,第1项结果一直为1,最大项一直是1,可以直接赋值,所以第二空填Ak。然后从倒数第二项开始计算,依次往前计算。所以第三空的填k-1,1,-1。因为:,故有Ai=Ai+Ai-1。(注意Ai+Ai-1保留的k-1行的结果)。试题二阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】对n个元素进行简单选择排序的基本方法是:第一趟从第1个元素开始,在n个元素中选出最小者,将其交换至第一个位置,第二趟从第2个元素开始,在剩下的n-1个元素中选出最小者,将其交换至第二个位置,依此类推,
4、第i趟从n-i+1个元素中选出最小元素,将其交换至第i个位置,通过n-1趟选择最终得到非递减排序的有序序列。 【问题1】【代码】#include void selectSort(int data ,int n)/对 data0datan-1中的n个整数按非递减有序的方式进行排列 int i,j,k; int temp; for(i=0;in-1;i+) for(k=i,j=i+1;(1);(2)) /k表示dataidatan-1中最小元素的下标 if(datajdatak) (3) if(k!=i) /将本趟找出的最小元素与datai交换temp=datai;(4);datak=temp;i
5、nt main() int arr =79,85,93,65,44,70,100,57;int i,m; m=sizeof(arr)/sizeof(int); /计算数组元素的个数,用m表示(5); /调用selectSort对数组arr进行非递减排序 for((6);i m;i+) /按非递减顺序输出所有的数组元素 printf(“%dt”,arri);printf(“n”); return 0;(1)jn或者j=n-1(2)j+(3)k=j(4)datai=datak(5)selectSort(arr,m)此处m也可以填8或者sizeof(arr)/sizeof(int), arr可以改成
6、&arr0(6)i=0本题考查 C 程序设计基本技能及应用。简单选择排序方法是设所排序序列的记录个数为n。i取1,2,n-1,从所有n-i+1个记录(Ri,Ri+1,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟后就完成了记录序列的排序。第1空应填j循环结束条件,j应该运行至序列末尾。填jn或者j=n-1;第2空填j循环控制语句,j每次递增1,往后移动一个元素与ai进行比较。第3空为自动保存最大元素的下标,k=j。第4空为交换两个元素,temp为临时变量,保存datai的值,使用datai=datak使datai为后面n-i+1个记录(Ri,Ri+1,Rn)中找出排序码最小的记录
7、,再将temp赋给datak。第5空为调用selectSort对数组arr进行非递减排序,selectSort有两个参数,数组和排序元素个数,为selectSort(arr,m)。第6空进行元素遍历输出所有的数组元素,从下标为0开始,所以填i=0。试题三阅读以下代码和问题,回答问题1至问题3,将解答填入答题纸的对应栏内。【代码 1】typedef enum A,B,C,D EnumType;EnumType f(int yr)if(0 = yr%400) return A; else if (!(yr%4) if(0!=yr%100) return B;else return C;return
8、 D;【代码2 】#includeint main()int score;scanf(%d,&score); switch (score) case 5: printf(Excellent!n); case 4: printf(Good!n); break; case 3: printf(Average!n);case 2: case 1: case 0: printf(Poor!n); default: printf(Oops,Errorn);return 0;【代码3】#includeint main()int i,j,k;for(i=0; i2; i+) for(j=0; j3;j+)f
9、or( k=0; k2;k+) if(i!=j&j!=k)printf(%d %d %dn, i,j,k); ruturn 0; 【问题1】(4分)对于代码1,写出下面的函数调用后x1 、x2、x3和x4的值。x1 = f(1997);x2 = f(2000);x3 = f(2100);x4 = f(2020); x1=3;x2=0;x3=2;x4=1第一个条件 0=yr%400, 2000满足,返回为A;其余都不满足,继续进行判断;第二个条件 !yr%4, 1997不满足,返回为D;其余满足,继续进行判断;第三个条件 0!=yr%100,2020满足,返回为B;2100不满足,返回为C。枚举
10、类型中列出的每一个枚举符都对应着一个整数值,枚举类型实际上是一个整型符号常量的集合。当定义枚举类型时,枚举符都已经被系统隐含地赋予了一个整型值,默认情况下,第一个元素为0,第二个元素为1,依此类推。所以相应的A=0,B=1,C=2,D=3,故返回为:x1=3;x2=0;x3=2;x4=1。【问题2】(5分)(1)写出代码2进行时输入为3的输出结果;(2)写出代码2进行时输入为5的输出结果。 (1)Average!poor!Oops,Error(2)Excellent!Good!控制传递给与开关的值匹配的 case 语句。switch 语句可以包括任意数目的 case 实例,但是任何两个 cas
11、e 语句都不能具有相同的值。语句体从选定的语句开始执行,直到 break 将控制传递到 case 体以外。case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即只是开始执行处的入口标号. 因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行,而且执行完一个case后面的语句后,若没遇到break语句,就自动进入 下一个case继续执行,而不在判断是否与之匹配,直到遇到break语句才停止执行,退出break语句.因此,若想执行一个case分之后立即跳出 switch语句,就必须在此分支的最后添加一个break语句。【问题3】(6分)写出代码3运行后的输出结果
12、。0 1 00 2 00 2 11 0 11 2 01 2 1此题考察多重for循环再加上一个判定条件,i的取值为(0,1),j的取值为(0,1,2),k的取值为(0,1),只要按顺序找到i!=j且j!=k的组合即可。试题四阅读以下说明、C函数和问题,回答问题1和问题2将解答填入答题纸的对应栏内。【说明】当数组中的元素已经排列有序时,可以采用折半查找(二分查找)法查找一个元素。下面的函数biSearch(int r,int low,int high,int key)用非递归方式在数组r中进行二分查找,函数biSearch_rec(int r,int low,int high,int key)采
13、用递归方式在数组r中进行二分查找,函数的返回值都为所找到元素的下标;若找不到,则返回-1。【C函数1】int biSearch(int r,int low,int high,int key)/rlow.high 中的元素按非递减顺序排列/用二分查找法在数组r中查找与key相同的元素/若找到则返回该元素在数组r的下标,否则返回-1int mid;while((1)) mid = (low+high)/2 ;if (key =rmid)return mid;else if (keyrmid)(2);else (3);/*while*/return -1;/*biSearch*/【C 函数 2】in
14、t biSearch_rec(int r,int low,int high,int key)/rlow.high中的元素按非递减顺序排列/用二分查找法在数组r中查找与key相同的元素/若找到则返回该元素在数组r的下标,否则返回-1int mid;if((4)) mid = (low+high)/2 ;if (key =rmid)return mid;else if (keyrmid)return biSearch_rec((5),key);elsereturn biSearch_rec((6),key); /*if*/return -1;/*biSearch_rec*/ 【问题1】 (12分)请填充C函数1和C函数2中的空缺,将解答填入答题纸的对应栏内。 (1)low=high(2)high=mid-1(3)low=mid+1(4)l