




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一维数组的应用一维数组的相关应用1数组的定义:定义格式: 数据类型 数组名数组的长度其中:数据类型 就是前面讲到的 int、float、long、double、char等基本类型,当然也可以是我们后面还要介绍的其他类型(此处暂不考虑)。数组名 与普通变量的起名规则是一样的。但不能与同一函数中的其他任何变量起一样的名字。数组的长度 定义是数组的长度只能是常量或常量表达式,否则就会出现编译错误。例如 :我们要定义一个整型数组,它里面能够存放10个元素,则应该定义成如下形式:int a10;其他类型的数组与此类似,如:float f15, f210;long long110, long250;char ch130, ch210;也可以采用常量表达式来定义:如#define N 100main() float numN; /定义了具有N个浮点型数据元素的数组,其中N为常量以下列举一些关于数组的应用,记住一点,数组的操作跟循环是息息相关的。一维数组对应单重循环,后面要讲的二维数组对应的是二重循环。2给一维数组元素赋值:程序如下#include main()myfunc( );myfunc( ) int a10, i;printf(“input ten int number:n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i10; i+)scanf(“%d”, &ai);3一维数组元素的输出:程序如下#include main()myfunc( );myfunc( )int a10, i;printf(“input ten int number:n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i10; i+)scanf(“%d”, &ai);/*下面的代码,将已经赋值的数组各元素输出到屏幕上*/for (i=0; i10; i+)printf(“%d “, ai);4对一维数组元素进行相应处理后再输出。例如:将一个数组中的元素逆序存储后,再输出到屏幕上。程序如下:#include main()myfunc( );myfunc( )int a10, i;printf(“input ten int number:n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i10; i+)scanf(“%d”, &ai);/*下面循环用来输出处理以前的数组的各个元素*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);/*下面的循环用来将数组的元素逆序存储*/*逆序存储的方法:将第0个元素与第9个元素交换;再将第1个元素与第8个元素交换;依此类推,直到第4个元素与第5个元素交换后结束。*/for (i=0; i5; i+)t = ai; ai = a9-i;a9-i =t;/*下面的代码,将已经处理过的数组各元素输出到屏幕上*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);小结:通过上面这个程序,我们知道,对于数组的处理,通常按顺序分为4步:第一步:给数组的各个元素赋值;(上面程序中的蓝色部分代码)第二步:输出处理以前的数组;(上面程序中的紫黑色部分代码)第三步:对数组的各个元素按题目要求进行相应处理;(上面程序中的浅绿色部分代码)第四步:对处理结果进行输出,与处理之前的输出相比较;(上面程序中红色部分代码)5数组元素的排序(1) 冒泡排序(将数组元素按照从小到大的顺序排序)程序如下:#include main()myfunc( );myfunc( )int a10, i;printf(“input ten int number:n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i10; i+)scanf(“%d”, &ai);/*下面循环用来输出处理以前的数组的各个元素*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);/*下面的循环用来将数组的元素按从小到大的顺序进行排序*/*冒泡排序法原理:对N个数(这里N为10)进行排序。采用两两比较交换的方法,不断将大数交换到数组的后端。第一轮将10个数中最大的数交换到a9中(需要通过9次比较),第二轮将剩余的9个数中最大的数交换到a8中(需要通过8次比较),第9轮将剩余的两个数中的最大数交换到a1中,也就意味着剩下的那个数就是最小的数,并且放在了a0中。至此,已经将10个数排好序了。总结一下规律:外循环表示轮次:最大的轮次应为 N-1 (N是数组中数的个数)内循环表示每轮比较交换的次数: 最大交换次数应为 N-当前的轮次*/for (i=1; i=9; i+) /*这个9即是N-1得来的(本题中N=10)*/for (bj=0; bj abj+1) t = ai; ai = a9-i;a9-i =t;/*下面的代码,将排好序的数组各元素输出到屏幕上*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);(2) 选择法排序(将数组元素按照从小到大的顺序排序)#include main()myfunc( );myfunc( )int i, j, k, temp, a10;printf(“input ten int number:n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i10; i+)scanf(“%d”, &ai);/*下面循环用来输出处理以前的数组的各个元素*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);/*下面的循环用来将数组的元素按从小到大的顺序进行排序*/*选择排序法原理:从10个元素中选择出最小的一个与第0个元素对调,再从剩下的9个元素中选择最小的数与第1个元素对调,再从剩下的8个元素中选择最小的数与第2个元素对调,直到从最后的2个元素中选择最小数与第8个元素对调,则第9个元素自然就是最大的数了。(注意:数组是从0开始计算元素个数的。)*/for (i=0; i9; i+)k=i;for(j=k+1; jaj) k=j; /这个for循环在剩下的k个数中找出一个最小数所在的位置/下面三条语句将剩下元素中的最小数与第i个元素进行对调temp=ai; ai=ak; ak=temp;/*下面循环用来输出处理以后的数组的各个元素*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);6数组的插入操作例如:已知有一个已经按从小到大的顺序排好序的整型数组(假设为10个元素),现在从键盘上输入一个新的整数,将其插入到数组中,并且要保持该数组仍是有序的。程序如下:#include main()myfunc( );myfunc( )int a11, i, j, x; /*数组本来有10个元素,因要多插入一个元素,故定义为11*/printf(“input ten int number:n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i10; i+)scanf(“%d”, &ai);/*下面循环用来输出处理以前的数组的各个元素*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);printf(“input a new int number for insert:”); scanf(“%d”, &x);/*下面的循环将一个新的整数插入到这个排好序的数组中*/*插入操作的原理:假定新输入的数为x,用x依次去和数组中的每个元素进行比较,直到找到第一个比x大的元素为止,此时说明已经找到了x应该插入的位置了。然后从数组的末尾开始到找到的位置处止的这一段数据元素依次向后移一个位置,以腾出空位来插入x的值。*/for (i=0; i x) break; /*从数组末尾开始,移动数组的元素*/for (j=9; ji; j-)aj+1 = aj;ai = x; /*将x插入到数组中*/*下面的代码,将插入x后的数组各元素输出到屏幕上*/for (i=0; i11; i+)printf(“%d “, ai);printf(“n”);7数组元素的删除操作例如:已知有一个已经按从小到大的顺序排好序的整型数组(假设为10个元素),现在从键盘上输入一个新的整数,将数组中的该数删除,如果数组中不存在此数,则提示相应的错误信息。程序如下:#include main()myfunc( );myfunc( )int a10, i, j, x; printf(“input ten int number:n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i10; i+)scanf(“%d”, &ai);/*下面循环用来输出处理以前的数组的各个元素*/for (i=0; i10; i+)printf(“%d “, ai);printf(“n”);printf(“input a new int number for delete:”); scanf(“%d”, &x);/*下面的循环将一个新的整数从这个排好序的数组中删除*/*删除操作的原理:假定新输入的数为x,用x依次去和数组中的每个元素进行比较,如果数组中某个元素和x的值是一样的,则表示找到了要删除的位置。然后将数组的该位置上的元素到数组末尾的元素依次往前移一个位置。如果比较到数组的末尾,仍未找到一个与x一样的数,则说明数组中不存在此数,故给出一个错误提示信息。*/for (i=0; i10; i+) /*如果某个元素等于x了,则说明找到要删除数据的位置了,则应该退出循环*/if (ai = x) break; /*从当前位置开始到数组末尾的每个元素都向前移动一个位置*/for (j=i; j10; j+) aj = aj+1;/*在查找的过程中,如果i=10,则说明找到数组末尾仍未能找到与x一样的数,故提示错误信息*/if (i=10) printf(“没找到您要删除的数.n”);else /*否则说明找到了x,则将删除x后的数组各元素输出到屏幕上*/for (i=0; i9; i+) /*因为已经删除掉了一个元素,所以应该少输出一个元素*/printf(“%d “, ai);printf(“n”);8根据以上叙述,自己组织编码,实现下列功能(要求在一个程序中实现,可以用多个函数,如每种功能用一个函数)。(1) 定义一个数组arr(假定可以存放20个数)(2) 给数组arr赋值;(可以用随机函数来赋值,参考教材P138页例5.15)(3) 输出该数组的各个元素;(4) 用冒泡法或选择法对该数组进行排序(按从大到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小目标企业咨询方案
- 住宅建筑概念室内方案设计
- 彩色建筑竞赛方案设计模板
- 衬板工技能比武考核试卷及答案
- 夏日婚礼活动策划方案模板
- 东莞从事入户咨询方案
- 地面岩棉施工方案及工艺
- 石家庄管道施工方案范本
- 智能建筑利用方案设计
- 商丘建筑消防方案设计公司
- 幕墙玻璃更换施工安全技术方案
- 焊工岗位安全培训课件
- 2025年国内知名企业数据分析师岗位招聘面试题及答案
- 2025年地方病防治科地方病防控策略考核试卷答案及解析
- 型钢混凝土剪力墙剪力刚度精细评估与设计优化
- 《百分数与分数的互化》课件 2025-2026学年小学数学六年级上册 苏教版
- 2025中国人民抗日战争纪念馆招聘4人考试参考试题及答案解析
- 2025年高考语文全国一卷试题真题及答案详解(精校打印)
- 大学物理高斯定理课件-英文版
- 船舶与海上设备设施起重2008年4月1日生效
- 公司收购协议书范本
评论
0/150
提交评论