1、版Maxi=getMax(a,n);printf(Maxi=%dn,Maxi);return 0;int read(int arr)int i=0,n;FILE *fp;if(fp=fopen(data.txt,r)=NULL)printf(cant find the file!);while(!feof(fp)fscanf(fp,%d,&arri+);n=i;fclose(fp);return n;int getMax(int arr,int n)int i,Maxi=0;#版*%for(i=0;in;i+)if(arrMaxiarri) 新#*新版arrMaxi=arri;Maxi=i;M
2、ax=%dn,arrMaxi);return Maxi;运行结果窗口任务二 掌握一维数组的删除操作1.编写功能函数: 删除第 i 个数组元素,返回数组实际长度。需要考虑异常情况,给出出错提示int delArray (int arr,int n ,int i)2编写数组构造函数 ,数组中存储 1-n 的整数序列void makeArray (int arr ,int n )3.编写输出函数,输出数组中前 n 个数。void pntArray(int arr int n)4.编写主函数:输入 n 个数,删除奇数位置上的数后输出。调用上述子函数完成功能。源程序清单 ex03_02.cpp# def
3、ine MAX 100int delArray(int arr,int n,int i);void makeArray(int arr ,int n);void pntArray(int arr ,int n);int main ()int n,j,i,m;n:scanf(n);if(n0;j=j-2)delArray(a,n,j);n=n-1;pntArray(a,n);int delArray(int arr,int n,int i)int k;for(k=i;k=0)del(a,n,m);saveData(a,n);if(t!=n) 删除成功 删除失败 ,找不到要求的 x 值nint d
4、el(int arr,int n,int i)int find (int arr,int n,int x)for(k=0;if(arrk=x)return k;if(k=n)return -1; 新新%版&FILE*fp; 新%版版#*int k=0;arrk);k+;int saveData(int arr,int n)result.txtw 新版版#% 新版新&版fprintf(fp,%d 新版版&运行结果:(1) 窗口(2) data.txt 的内容23 56 89 2178 78 324 78 45 78 34 78 80 4 675 79 3 678 9566 324 546 781
5、35 8797 34 56257 556 345(3) result.txt 的内容23 56 89 2178 324 45 34 80 4 675 793 678 9566 324 546 78135 8797 34 562 57 新版版%*&556 345任务四 掌握一维数组的插入操作 新版*&%(1)编写功能函数插入第 i 个数组元素int insert (int*pa ,int n ,int i,int x)(2)编写主函数:输入 n 个有序数,输入 x,将 x 插入数组合适的地方使数组仍然有序。源程序清单 ex03_04.cpp 新*&版%int insert(int*pa ,int
6、 n,int i,int x);void pntArray(int arr,int n);int n,x,k,i=-1; 请输入 n:if(n=0) 数组不存在!ak); 请输入 x: 新%#版版* 新新#版版*k+) 新版版新if(a0x) 新%版*i=k;break; 新&%*版if(aki;k-) 新版新版&*(p+k)=*(p+k-1);*(p+i)=x;n=n+1;void pntArray(int arr,int n)int i;%5d,arri);(1) 插入值位置在序列中间有序序列: 2 4 5 6 9 12 新%版& 2 4 5 6 7 9 12(2) 插入值位置在序列第一位
7、 2 3 4 5 6 7 1 2 3 4 5 6 7(3) 插入值位置在序列最后 1 2 3 4 5 6 7 8(4) 插入值是序列中的重复值 新*版&%# 1 2 3 4 5 6 1 2 3 4 4 5 6(5) n=0数组不存在!实验二 一维数组算法1. 理解并掌握求最大 (小)值,排序,查找,倒置算法。2. 了解使用文件中的数值进行测试的方法。任务一 :最大数最小数算法编写一个函数, 功能为在一个数组中根据要求查找并返回最大值或最小值的下标, 例如给一个标志变量为 1 时最大值,为 2 时求最小值, 标志变量 为参数由程序员调用时指定。int getMaxorMin(int arrInt
8、,int n)int i,Maxj=0,flag,Minj=0; 请指定标志变量 flag:flag);if(flag=1)if(arrIntiarrIntMaxj)Maxj=i;return Maxj;if(arrIntiarrIntMinj)Minj=i;return Minj; 新%版&任务二:排序算法编写三个函数,功能为按从小到大的顺序对数据中的数据进行排序。分别采用起泡,选择,插入算法。 新%新#版&起泡算法void bubbleSort(int arrInt,int n)int i,t,j;for(j=1;jarrInti)Insert(arrInt,arrInti,j,i); 新
9、#&*版版int Insert(int arrInt,int x,int k,int n)int j,t; 新版%版新*t=x;for(j=n-1;=k;j-)arrIntj+1=arrIntj;arrIntk=t;任务三:查找编写两个函数,功能为查找数组中是否存在 X,如存在返回下标,如不存在返回标志值。分别采用顺序查找和二分查找法完成。顺序查找int find(int arrInt,int brr,int n,int x)int k,i=0;if(arrIntk=x)brri=k;i+;return i;二分法:int biFind(int arrInt,int n,int x)int l
10、,h,m,q,num=0;l=0;h=n-1;q=n;while(h=l)m=(h+l)/2;if(arrIntmh=m;if(arrIntmq)m=-1; 找不到与 x 等值的数 nreturn m; 新版新#&任务四:倒置编写一个函数,功能为将一个数据中的数据逆序存放。void reverse(int arrInt,int n)int i,t;=n/2-1; t=arrInti;arrInti=arrIntn-i-1;arrIntn-i-1=t;任务五:验证以上编写的函数。编写 main 函数,安排合适的输入输出和函数调用语句,验证上述编写的函数功能。要求(1)有清晰的输入输出提示语句。(
11、2)数组必须在 main 函数中定义。(3)数组中数据,调用一个用户自定义函数,从文本文件中读取。源程序:ex03_05.cpp 新*新版&只需列举完整 main 函数和其它所有函数的函数声明。请加注释说明函数功能int getMaxorMin(int arrInt,int n);void bubbleSort(int arrInt,int n); 新版版*#&void InsertSort(int arrInt,int n); 新*#%版int Insert(int arrInt,int x,int k,int n); 新版版新#int find(int arrInt,int brr,int
12、 n,int x);int biFind(int arrInt,int n,int x);void reverse(int arrInt,int n); 新%&版版int b100; 新%新版版#int n,x,y,z,m,i; 求最大或最小值: (求最大值请将标志值定为 1,否则就是求最小值啦) n 最大值或最小值的下标是 %dn,getMaxorMin(a,n); 接下来是排序。 请输入选择排序的方式 n1 表示起泡排序; 2 表示插入排序 nx:if(x=1)bubbleSort(a,n); 新版新#版InsertSort(a,n); 新&新#版* 接下来进行查找。请选择查找方式 n1
13、表示顺序查找; 2 表示二分法查找 n 要注意的是其中二分法查找首先要进行排序,所以和上步操作顺序不可互换 ny); 在输入需要查找的数字 z:z);if(y=1) 新%#新版m=find(a,b,n,z); 所找数字的下标依次是 :m;,bi);m=biFind(a,n,z); 所找数字的下标是 :,m); 最后一步倒置操作 nreverse(a,n); 新%版*新思考题1. 请画出下列数据序列,使用起泡法,选择法和插入算法的排序过程。 46,12,172,98,46,92. 我们经常会讨论排序算法的稳定性,若待排序的序列中 ,存在多个具有相同关键字的记 新%*版&录,经过排序 , 这些记录
14、的相对次序保持不变 ,则称该算法是稳定的 ;若经排序后 ,记录的相对次序发生了改变 ,则称该算法是不稳定的。请问起泡,选择和插入算法的稳性如何3. 请设计符合下面要求的测试用例,画出使用二分查找算法的查找过程。(1) 没有找到(2) 第一次就找到(3) 需要查找的数在数组的第一个(4) 需要查找的数在数组的最后一个4. 如果在 main 要求从大到小排序,使用现有的函数,如何实现,写出功能实现语句。实验三 : 自选实验1. 加深对结构化程序结构的理解:使用函数2. 加深对数组的掌握3. 学习二维数组实验内容 新&版版%#任务一: CrapsCraps 是一种在娱乐场所很流行的游戏,它的规则如下
15、:游戏者投掷两个筛子,每个筛子有六面,就可能得到 1,2,3,4,5,6 点。当筛子停下来后,计算两个筛子的和。如果第一次两个筛子的和是 7 或 11,游戏者获胜。如果第一次两个筛子的和是 2,3 或 12,游戏者输了。如果第一次两个筛子的和是 4,5,6,8,9 或 10,两个筛子的和变成游戏者的积点,游戏者可以继续投掷, 直到两个筛子的和等于积点的值, 游戏者输了。 但如果其中有一次两个筛子的和等于 7,游戏者获胜。游戏开始时,游戏者设置参与游戏的筹码,在游戏中,游戏者可以下注,获胜得到下注数,输了扣去下注数,当游戏者的筹码用完,整个游戏结束。编写程序,模拟 Craps 游戏。(1) 编写
16、一个函数:投掷两个筛子,返回两个筛子的和提示:求随机数的方法# include “stdlib.h ”n=rand()%(Y-X+1)+X; /* n 为 XY 之间的随机数 */(2) 编写一个函数:检查下注值是否有效,应小于游戏者的筹码数(3) 编写一个处理函数:根据游戏者是否获胜,修正游戏者的筹码。(4) 显示画面应如下信息,一个可能执行过程如下源程序清单: ex03_06.cpp二维数组编写程序输入一个数 n,再输入一个 n*n 二维数组,求该数组中除副对角线,第一行和最后一列之外的数组元素之和。要求:编写一个函数 getSum 用于实现求和操作。 ex03_07.cpp 编写程序实现输出 n 行杨辉三角。 用两种方法实现, 编写两个函数, 一个函数用一维数组实现,一个函数用二维数组实现。主函数中输入 n 值后,分别调用两函数输出杨辉三角。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1