资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
上机考试复习题1212 34 38 20 82 1730 18 25 13 56 2145 39 15 24 19 3211 76 40 41 64 431. 定义一个二维数组a并用下列数据初始化。编写一个直接插入排序函数void insert(int x, int n)对每一行元素排序。并对每行元素最大值进行排序。要求:在main函数中输出原数组、排序后的数组、及排序后的最大值。(提示:把每行最大值存到一个一维数组max中)/利用同一个函数对二维数组的每行及最大值数组进行排序#includevoid insert(int x, int n);/形参为一维数组,因只处理一维数组,故只需传递列数(每行元素的个数)void main() int a46=12,34,38,20,82,17,30,18,25,13,56,21,45,39,15,24,19,32,11,76,40,41,64,43; int i, j, max4; for(i=0; i4; i+) for(j=0; j6; j+) coutaij ; coutendl; coutendl; for(i=0; i4; i+)/调用排序函数, 每次调用传递一行, 实参ai是行元素, 第i行的名字(地址), insert(ai, 6);/这种方法简单、明确,但因循环调用效率不高。 maxi=ai5;/为数组max赋值 for(i=0; i4; i+) for(j=0; j6; j+) coutaij ; coutendl; coutendl;insert(max, 4); for(i=0; i4; i+) coutmaxi ; coutendl;void insert(int x, int n)/一维数组的直接插入排序函数 int i, j, k; for(i=1; in; i+) k=xi; j=i;/把待排序元素存入中间变量,设置插入指针j while(k0) xj=xj-1;/后移 j-; xj=k;/插入 2. 定义一个二维数组a并用下列数据初始化。输入一个数,在数组中进行顺序查找,找到时输出该数的下标,否则输出“没有找到”(用查找函数int seqsearch(int a6, int x, int &m, int &n)完成)。编写一个直接选择排序函数void select(int x, int m, int n)对每一行元素排序,输出排序后的数组。12 34 38 20 82 1730 18 25 13 56 2145 39 15 24 19 3211 76 40 41 64 43/两种传递二维数组的方式#includeint seqsearch(int a6, int x, int &m, int &n);/顺序查找函数,二维数组作形参,6不可省略!void select(int x, int m, int n);/直接选择排序。一维数组作形参,因需处理二维数组,故要传递行列数 m nvoid main() int a46= 12,34,38,20,82,17, 30,18,25,13,56,21, 45,39,15,24,19,32, 11,76,40,41,64,43, ; int i, j, x, m, n; for(i=0; i4; i+) for(j=0; j6; j+) coutaij ; coutendl; coutendl; coutx; if(seqsearch(a,x,m,n) cout(i,j)=m, nendlendl;/注意:形参是二维数组,须用数组名a作实参 else cout没有找到nn; select(a0, 4, 6);/调用排序函数,降阶处理:采用一维形式处理二维数组。(因此须用一维数组名a0作实参) /由于一次性传递整个数组,故效率高,是处理二维数组更为普遍的方式。要求对数组有较深入的了解。 for(i=0; i4; i+) for(j=0; j6; j+) coutaij ; coutendl; coutendl;void select(int x, int m, int n) int h, i, j, k, t; for(h=0; hm; h+)/ h 为需处理的行数(把数组x看作一行一行一字排开一维数组) for(i=0; in-1; i+)/直接选择排序算法,对一行(n个数)排序 k=i;/设置交换指针k for(j=i+1; jn; j+) if(xjxk) k=j;/记录最小值元素的下标 t=xi; xi= xk; xk=t; /与待排序元素xi交换x+=n;/降阶处理的要点:由于数组名 x 是指针(变量),使它指向下一行。 int seqsearch(int a6, int x, int &m, int &n)/顺序查找函数(挨个比较),找到返回1,否则返回0,下标由引用返回 int i, j, ok=0; for(i=0; i4&!ok; i+)/双重循环条件:找到一个即停止循环,否则一直找到底for(j=0; j6; j+) if(aij=x)ok=1; m=i; n=j;break;/找到!置ok为1,并记录下标。注意:函数中的m n 是主函数中m n 的引用(在不同函数中可以同名) return ok;/如没找到,ok保持为012 34 38 20 82 1730 18 25 13 56 2145 39 15 24 19 3211 76 40 41 64 433. 定义一个二维数组a并用下列数据初始化。编写冒泡排序函数 void bubble(int x, int n,float& av)对每一行元素排序,并计算每行元素的平均值。要求:在main函数中输出原数组、按行输出排序后的数组及平均值。(提示:把平均值存到一个一维数组aver中)#includevoid bubble(int x, int n, float& av);void main() int a46=12,34,38,20,82,17,30,18,25,13,56,21,45,39,15,24,19,32,11,76,40,41,64,43; int i, j; float aver4=0; for(i=0; i4; i+) for(j=0; j6; j+) coutaij ; coutendl; coutendl; for(i=0; i4; i+) bubble(ai, 6, averi);/注意3个实参:ai,6 是数组名和长度,传递二维数组的一行,/averi是数组元素(相当于简单变量),地址传给引用形参av for(i=0; i4; i+) for(j=0; j6; j+) coutaij ; coutaveriendl; coutendl;void bubble(int x, int n, float & av)/一维数组冒泡排序函数 int i=0, j, k=1, t; while(k)/冒泡算法 k=0;/设置逆序标志 k(同时也是循环条件,1 为有逆序,0 为无逆序) for(j=0; jxj+1)/出现逆序 k=1; t=xj; xj= xj+1; xj+1=t;/重置 k ,交换逆序数对 i+; for(i=0; in; i+) av+=xi;/同时计算每行的平均值并由av回传 av=av/n;4. 定义一个二维数组int a4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16。定义函数int lsum(int x, int n, int &sum)返回每行元素之和并求所有元素之和,要求该函数中使用静态局部变量s存储二维数组总和。按行输出数组及每行之和,最后输出总和。定义数组void exch(int x4, int n)其功能是转置该数组并作如上操作。#include#includeint lsum(int x, int, int& );/求和函数,返回每行之和。void exch(int x4, int);/转置函数void main() int a4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16; int i, j, sum; sum=0; for(i=0; i4; i+)for(j=0; j4; j+) coutsetw(3)aij;coutsetw(7)lsum(ai, 4, sum);coutendl; couttotal: sumendlendl; exch(a,4); sum=0;/这句必须吗? for(i=0; i4; i+)for(j=0; j4; j+) coutsetw(3)aij;cout
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号