第8章数组v1.ppt

上传人:本田雅阁 文档编号:3133796 上传时间:2019-07-15 格式:PPT 页数:33 大小:249.02KB
返回 下载 相关 举报
第8章数组v1.ppt_第1页
第1页 / 共33页
第8章数组v1.ppt_第2页
第2页 / 共33页
第8章数组v1.ppt_第3页
第3页 / 共33页
第8章数组v1.ppt_第4页
第4页 / 共33页
第8章数组v1.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《第8章数组v1.ppt》由会员分享,可在线阅读,更多相关《第8章数组v1.ppt(33页珍藏版)》请在三一文库上搜索。

1、1,1,第八章 数 组,2,8.1 概述,数组的概念 数组是由若干 类型相同 的相关数据按 一定顺序存储 在一起形成的 一组数据 集合。 数组的用途 保存大量同类型的相关数据 例如:学生成绩 数组的特点 快速地随机访问 一旦定义,不能改变大小 数组可分为一维、二维、多维数组,3,8.2 一维数组的定义,定义语法:数据类型 数组名数组长度 例如: int score100; /*数组*/,数组的 数据类型,数组名,数组长度,score,4,一维数组的初始化,数组的初始化是指在定义数组时给数组赋初值。 1. 在定义数组时赋全部初值; int a10=0,1,2,3,4,5,6,7,8,9; 2.

2、部分赋值,未明确写出的均初始化为0; int a10=0,1,2,3,4; 3. 赋值时不指定数组长度,赋初值元素的个数为数组长度。 int a=0,1,2,3,4; /*数组只有5个元素*/,5,一维数组元素的引用 数组名下标 下标值的范围是0到数组长度减1; float f10; f0 f1 f2 f3 f8 f9 f0=20; f1=39; f2=40; f3=60; f9=100; 一个数组元素就如同一个简单变量。 a0=a5+a7-a2*3; 元素下标可以是常量和表达式ai=0; 元素下标也可以是变量,一维数组的引用,千万不要越界!,6,注意 1)对数组定义时所声明的类型实际上是指数

3、组元素的取值类型;对于同一个数组,其所有元素的数据类型必须是相同的。 2)数组名的命名应符合标识符的定义规则。 3)数组名不能与其它变量名相同。 4)数组定义时,方括号中的常量表达式说明了数组元素的个数,如a5表示数组a有5个元素。但是其下标是从0开始编号的 。,7,注意 5)在定义时,不能在方括号中用变量来表示元素的个数,但是可以是常量或常量表达式。 6)允许在同一个类型说明中,同时说明多个数组和多个变量。例如: int a, b, c, d, k110, k220; 7)可以越界访问数组的元素,但这样做会导致不可预料的结果,甚至于造成系统的崩溃(执行写操作)。,8,一维数组的定义、赋值和引

4、用。 【exp8-1】 #include void main() int i,a10; for(i=0;i=0;i-) printf(“%d “,ai); /依次倒序输出各个元素 程序运行结果: 9 8 7 6 5 4 3 2 1 0,9,例8-2,找出一维数组中的最大元素。,10,8.3 二维数组的定义,类型说明符 数组名常量表达式常量表达式 例如: int score450;,数组的 数据类型,数组名:数组首址,行,引用数组元素:score00、score01、 score049 score10、score11、 score149 score20、score21、 score249 sco

5、re30、score31、 score349 系统在内存中分配连续4*50 个int数据类型的空间给数组。存放顺序:按行存放,先顺序存放第一行的元素,再存放第二行的元素,列,11,数组定义后,其元素值是随机数。 在定义数组的同时,为其元素赋值,称为赋初值。 int a22=1,2,3,4; int a22=1,2,3,4; int Arr23=1,1,2; int matrix4=1,2,3,4,1,二维数组的初始化,对多维数组, 可以且只可以省略最高维长度说明。 切记切记!,12,int matrix = 1,2,3,4,5,6,7,8,9,10,11,12; int matrix4=1,2

6、,3,4,1; int matrix4 = 1,2,3,4,5,6,7,8,9; int matrix4 = 1,2,3,4,5,6,7,8,9,10;,编译通不过,34,34,34,二维数组的初始化,13,二维数组的引用,程序中引用的是数组中一个元素,必须用下标来指定。 float a44 a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 a30 a31 a32 a33 对二维数组的每个元素可以当作普通变量来使用: 赋值、各种运算。,14,二维数组的引用,在程序中为数组赋值的方法 1. 用scanf语句由用户依次输入: for (i=1;i=3;

7、i+) for (j=1;j=4;j+) scanf(“%d”, 2. 由循环变量用循环赋值: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,for (i=0;i4;i+) (for j=0;j4;j+) aij = 4*i+j+1;,15,二维数组程序举例 将一个二维数组行和列元素互换,存到另一个数组中 1 4 a= 1 2 3 b= 2 5 4 5 6 3 6 for (i=0;i2;i+) for (j=0;j3;j+) bji=aij,for (i=0;i3;i+) for (j=0;j2;j+) bij=aji,16,课堂练习,1.以下对一维数组a的正

8、确说明是: A) char a(10) ; B) int a10 ; C) int k=5,ak; D) char a =a,b,c; 2.以下对二维数组a的正确说明是: A) char a105 ; B) int a23 ; C) int k=5,akk-2; D) char a43=“abc”,“bcd”,“cde”; E) int a34 = 1,5,9;,17,将数组中的元素颠倒顺序排放 #include void main() int a10=0,1,2,3,4,5,6,7,8,9; int i, t; for(i=0; i=4; i+) t=ai; ai=a9-i; a9-i=t;

9、 ,8.4 应用举例,18,求Fibnacci数列1,1,2,3,5,8,13,21,.【exp8_3】 初值 f0=1,f1=1 fi=fi-2 + fi-1 完整程序:,void main() int i, f20=1,1; for (i=2,i=19;i+) fi=fi-2+fi-1; for (i=2,i=19;i+) printf(“%12d“,fi); ,19,选择法排序,#include void main() int i,j,min,t,data10=3,6,2,5,8,1,0,4,7,9; for(i=0;i=8;i+) min=i; for(j=i+1;j=9;j+) if

10、(datajdatamin) min=j; if(min!=i) t=datai; datai= datamin; datamin=t; ,20,在无序数组中查找给定值首次出现的位置 如:10 1 20 39 9 4 12 43 33 4 19(找4的位置) 从第0个元素到最后一个元素依次与被找元素比较,相等则停止查找。,21,void main() int a10,i,num; for (i=0;i10;i+) scanf(“%d”,22,考虑另外一种种情况,在有序数组中插入一个数。首先需要确定该元素的位置。,第一步:从第0个元素开始比较,直到6小于或等于某个数时停止,该数的位置即为所求。

11、i = 0; while (i =num) break; else i+; k=i;,23,8.4 应用举例,第二步:数组右移一位从最后一个元素右移 for (i=6;i=k;i-) ai+1=ai;,第三步:存放ak=num;,24,如果需要将给定的某个数插入到有序的数组中,可以使用如下的五个步骤: 建立数组 排序 找出被插入值所在的位置 从该位置起到最后的所有元素右移一位 将待插入数值放入上一步空出的位置 参考【exp8_6】,8.4 应用举例,25,8.4 应用举例,#include “stdio.h“ main() int a21; int i,j,k,num; printf(“输入2

12、0个整数n“); for (i=0;iaj+1) t=aj;aj=aj+1;aj+1=t; /*排序*/ for (i=0;i20;i+) printf(“%3d“,ai); /*输出排序结果*/ printf(“输入要被插入的数n“); scanf(“%d“,26,i=0; while (i=num) break; else i+; /*查找*/ k=i; for (i=19;i=k;i-) /*右移一位*/ ai+1=ai; ak=num; /*插入*/ for (i=0;i21;i+) printf(“%3d”,ai); /*输出结果*/ ,27,本章总结,一维数组和二维数组的定义、初始

13、化和引用 常用的算法:在数组中查找、插入元素、排序等,28,课后作业,1、 编程实现从键盘输入20个整数,统计其中正数的个数,并计算输出所有正数之和。 2、8.9, 8.10,29,输入100个050的整数,统计每个数出现的次数【exp8_2】 分析: 1) 需要50个变量用于统计 int count51。 2) 读一个字符,在相应的变量上加1,0,n0,n1,n50,.,.,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,50,50,50,50,50,50,50,50,50,50,50,50,

14、50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,30,3) 如果用if 语句,需要判断多少次? if (n=0) count0+; if (n=1) count1+; 4)用switch(n) case 0:count0+; case 1:count1+;. 5)采用数组:读入的数字就是累加变量的下标索引 countk+; 6)需要循环多少次? 100次?,31,程序: #include “stdio.h“ main() int count51; int i,n; for (i=0; i50; i+) counti=0;

15、for (i=0; i100; i+) scanf(“%d“, ,32,8.4 应用举例,例:求出3*4矩阵中的最大值及其所在的行列号。 1.设一个变量存放最大值max; 2 设两个变量存放最大值在数组中的行列. 3.遍历数组中的每一个 元素,33,8.4 应用举例,程序【exp8_7】: #include “stdio.h” void main() int i,j,row,column,max,a34; max=a00; for (i=0;imax) max=aij; row=i+1;column=j+1; printf(“最大元素是%d,位于第%d行,第%d列n”, max,row,column); ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1