C语言程序设计 第7章 数组

上传人:E**** 文档编号:89381632 上传时间:2019-05-24 格式:PPT 页数:61 大小:235.50KB
返回 下载 相关 举报
C语言程序设计 第7章  数组_第1页
第1页 / 共61页
C语言程序设计 第7章  数组_第2页
第2页 / 共61页
C语言程序设计 第7章  数组_第3页
第3页 / 共61页
C语言程序设计 第7章  数组_第4页
第4页 / 共61页
C语言程序设计 第7章  数组_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《C语言程序设计 第7章 数组》由会员分享,可在线阅读,更多相关《C语言程序设计 第7章 数组(61页珍藏版)》请在金锄头文库上搜索。

1、第七章 数 组 71 数据结构与数组的概念 影响程序设计的因素除算法外还有数据结构。 数据结构概念 编写一个程序除了重视算法的设计外,还需重视数据类型的选择,即选择合适的数据类型来存放要处理的数据。在程序设计中,数据类型就称为数据结构,选择合适的数据类型实际上就是进行数据结构的设计。,在程序设计中有格言: 数据结构+算法=程序 说明数据结构与算法同等重要,算法依赖于数据结构,对于同一个问题的求解,可以采用不同的数据结构和不同的算法,对不同的数据结构有不同的算法,其复杂程度也会不同,选择合适的数据结构,可以降低算法的复杂程度。因此,在程序设计中应重视数据结构的设计。,例:求任意100个数中的最大

2、值。 main() int i,a,max; max=-32768 for(i=1;imax) max=a; printf(“n max=%d”,max); ,用一个简单变量作为数据结构,合理,算法简单,对于三个数的排序: main() int a,b,c,t; scanf(“%d,%d,%d”, 对于很多个数的排序用变量会很复杂而用数组会使算法很简单。,仍可用变量作为数据结构,数组的概念 int a10 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 一组具有同样类型的数据的集合 统一用一个名字代表-数组名(代表一组数),数组元素,下标,数组名,数组中的各成员称数组元素,由数组名

3、加下标唯一地确定。 将一组数用一个名字代表,便于管理。 只有一个下标的数组称为一维数组; 可有二维数组、三维数组、七维数组。,72 一维数组的定义和引用 定义 一般形式: 类型符 数组名常量表达式; int a10; float b10; 类型符 数组名 长度 作用:分配一组连续的内存单元,说明: 数组必须先定义后使用。 数组名的命名规则与变量相同。 常量表达式表示元素的个数(长度),下标 从0开始。 常量表达式不能包含变量,即不允许作动态定义。,引用 逐个引用其元素,不能进行整体引用。 引用的一般形式: 数组名下标 如:a0=50; a1=100; a2=a0+a1; 与 a2=a0+a1有

4、根本性的区别:下标可变。,例:从键盘输入10个数。 用变量:(不方便) scanf(“%d%d%d%d%d%d%d%d%d%d”, 用循环控制输入个数和下标的变化。 注意下标的变化范围。,初始化 在定义数组的同时给数组赋初值。 inta10=0,1,2,3,4,5,6,7,8,9; int a10=0,1,2,3,4; int a=0,1,2,3,4;,应用举例 (1)对100个学生的分数统计最高分、最低分和平均分。 两种方法: 用变量作为存放初始数据的数据结构 用数组作为存放初始数据的数据结构,main() int i,a,max,min; float aver=0; max=0; min=

5、100; for(i=0;imax) max=a; if(amin) min=a; aver+=a; aver/=100; printf(“n %d,%d,%f”,max,min,aver); ,用变量,main() int i,a100,max,min; float aver=0; for(i=0;imax) max=ai; if(aimin) min=ai; aver+=ai; aver/=100; printf(“n %d,%d,%f”,max,min,aver); ,用数组,找最大最小的位置?,max=0; min=0;,if(aiamax) max=i; if(aiamin) min

6、=i;,(2)统计高于平均分的人数。,main() int i,a,n; float aver=0; for(i=0;i100;i+) scanf(“%d”,n=0; for(i=0;iaver)n+; printf(“n %d”,n); ,用变量,数据结构不合理,main() int i,a100,n; float aver=0; for(i=0;iaver)n+; printf(“n %d”,n); ,用数组,1(3)对100个学生的分数统计出每分一档人数。 0 ? 1 ? 2 ? 3 ? 4 ? 99 ? 100 ?,main() int i,a; for(i=1;i=100;i+) s

7、canf(“%d”, 输出 ,int i,a,n101; for(i=0;i101;i+) ni=0;,na+;,完整程序: main() int i,a,n101; for(i=0;i=0;i-) printf(“n %3d:%3d”,i,ni); ,体会数组作为存放结果的数据结构时的优越性。,按10分一档统计? main() int i,a,n101; for(i=0;i101;i+)ni=0; for(i=1;i=100;i+) scanf(“%d”, ,int i,a,n11; for(i=0;i11;i+)ni=0;,na/10+;,(4)对10个学生的分数按从小到大的顺序排序后输出

8、。 两种典型的排序算法:选择法和起泡法。 选择法基本思想: 首先选择最小的数放在0位置,再在剩下的数中选择最小的数放在下一位置,依次类推,共进行9次选择。 5 8 7 4 3 9 0 1 2 6,每次选择都要与其后的所有数进行比较换位。 5 8 7 4 3 9 0 1 2 6,i,j,main() int a10,i,j,t; for(i=0;iaj) t=ai; ai=aj; aj=t; for(j=0;j10;j+) printf(“%3d”,aj); ,5 8 7 4 3 9 0 1 2 6,5 8 7 4 3 9 0 1 2 6,i,j,先找最小值所在的位置,最后再换位: main()

9、 inta10,i,j,t,k; for(i=0;i10;i+)scanf(“%d”, ,起泡法基本思想: 首先将所有数中的最大值“冒泡”到最后位置,再将剩下的数中的最大值“冒泡”到上一位置,依次类推,共进行9次“冒泡”。 每次“冒泡”都是一种翻滚过程,即相邻两个数进行比较换位。 5 8 7 4 3 9 0 1 2 6,main() int a10,i,j,t; for(i=0;iai+1) t= ai; ai= ai+1; ai+1=t; for(j=0;j10;j+) printf(“%3d”,aj); 要特别注意两个循环的范围。,( (5) 循环移位 对一数列中的每个数向后移3个位置,最

10、后3个数移到最前面。 5 8 7 4 3 9 0 1 2 6 1 2 6 5 8 7 4 3 9 0,用循环移位实现: 5 8 7 4 3 9 0 1 2 6 main() int i,j,k,a10; for(i=0;i10;i+)scanf(“%d”, ,for(i=1;i10;i+)ai=ai-1;,for(i=9;i0;i-)ai=ai-1;,k=a9;,a0=k;,for(j=1;j=3;j+) k=a9;,(6)狐狸找兔子问题绕 围绕着山顶有10个洞,一只兔子和一只狐狸分别住在洞里,狐狸总想吃掉兔子;一天,兔子对狐狸说:你想吃掉我有一个条件,先把洞顺序编号,你从最后一个洞出发,第一

11、次先到第一个洞找我,第二次隔一个洞找,第三次隔两个洞找,依次类推,寻找次数不限,我躲在一个洞里不动,只要找到我你就可以饱餐一顿。狐狸一想只有10个洞,寻找次数又不限,那有找不到的呢?马上答应了条件,结果狐狸跑断了腿也没找到,请问兔子躲在哪个洞里?,1,2,3,4,6,7,8,9,10,5,算法思想: 开辟数组,每个元素代表一个洞,并赋初值0,表示各个洞都还未找,然后按规律找,每找一个洞,对应的数组元素就赋值1,表示已找过,最后根据数组元素值1与0来识别各洞是否已找过。,main() int i, k=10; int a10=0,0,0,0,0,0,0,0,0,0; for(i=1;i=1000

12、0;i+) k=(k+i)%10; if(k=0) k=10; ak-1=1; for(i=0;i10;i+) if(ai=0) printf(“%3d”,i+1); ,73 二维数组的定义和引用 定义 一般形式: 类型符 数组名常量表达式 常量表达式; int a34; float b510; 行 列,二维数组的逻辑结构就如同一张表格: a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 存放形式:按行存放。,a0,a1,a2,二维数组可以看作是一个特殊的一维数组,它的元素又是一个一维数组。C语言这样的处理方法在很多情况下显得很方便。 与一维数组相

13、比,二维数组的定义多一个长度,其元素多一个下标。 在应用中,如果要处理的数据如同一数列,则可定义一维数组来存放;而如果要处理的数据如同一张表格,则应定义二维数组来存放。,引用 引用形式:数组名下标下标 如:a03=a12+a23; 其元素有两个下标。 例:从键盘输入12个数到二维数组中。 int a34,i,j; for(i=0;i3;i+) for(j=0;j4;j+) scanf(“%d”, 需要用两重循环来控制两个下标的变化。,如果键盘输入的数据是:1 2 3 4 5 6 7 8 9 10 11 12, 则在数组中如何存放?两个循环换位呢?两个下标换位呢? int a34,i,j; fo

14、r(i=0;i3;i+) for(j=0;j4;j+) scanf(“%d”,for(j=0;j4;j+) for(i=0;i3;i+) scanf(“%d”,for(i=0;i3;i+) for(j=0;j4;j+) scanf(“%d”,例:输入一个表格的数据到二维数组中,并找最 大值所在的位置 main() int a34,i,j,i1,j1; for(i=0;iai1j1)i1=i; j1=j; printf(“n %d,%d”,i1,j1); ,初始化 对二维数组赋初值的几种方法: int a34= 1,2,3,4,5,6,7,8,9,10,11,12; int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a34=1,5,9; int a34=1,0,6,0,0,11; int a4=1,2,3,4,5,6,7,8,9,10,11,12; int a4=0,0,3,9,10;, 举例 (1)矩阵的基本操作 二维数组的逻辑结

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号