第七章 数组.ppt
《第七章 数组.ppt》由会员分享,可在线阅读,更多相关《第七章 数组.ppt(41页珍藏版)》请在三一文库上搜索。
1、第七章 数组,一维数组的定义及引用 二维数组的定义及引用 字符数组,构造数据类型之一 数组:有序数据的集合,用数组名标识 元素:属同一数据类型,用数组名和下标确定 一维数组的定义 定义方式: 数据类型 数组名常量表达式;,合法标识符,表示元素个数 下标从0开始, :数组运算符 单目运算符 优先级(1) 左结合 不能用( ),7.1 一维数组,数组名表示内存首地址, 是地址常量,编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型) 下标一定从0开始,例 int a6 内存表示如下:,例 int a10; printf(“%d”,a); () 必须 for(j=0;j10;j+
2、) printf(“%dt”,aj); (),一维数组的引用 数组元素表示形式: 数组名下标 其中:下标可以是常量或整型表达式 数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组,例 int i=15; int datai; (),:1.在运行C语言程序过程中,系统并不 自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的,下标取值范围是0(元素个数-1)。 21个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。,一维数组的初始化,初始化方式:,int a5=1,2,3,4,5; 等价于:a0=1;
3、a1=2; a2=3; a3=4; a4=5;,:数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度,如 int a5=6,2,3; 等价于: a0=6; a1=2;a2=3; a3=0; a4=0; 如 int a3=6,2,3,5,1; (),static int a5; 等价于:a0=0; a1=0; a2=0; a3=0; a4=0;,int a=1,2,3,4,5,6; 编译系统根据初值个数确定数组维数,程序举例,例7.1 读10个整数存入数组,找出其中最大值和最小值,算法: 1. 输入
4、:for循环输入10个整数 2. 处理: (a) 先令max=min=x0 (b) 依次用xi和max,min比较(循环) 若maxxi,令min=xi 3. 输出:max和min,#include #define N 10 main() int xN,i,max,min; printf(“Enter 10 integers:n“); for(i=0;ixi) min=xi; printf(“Maximum value is %dn“,max); printf(“Minimum value is %dn“,min); ,输入部分,处理部分,输出部分,例7.2用数组求Fibonacci数列前20
5、个数,#include main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(“n“); printf(“%12d“,fi); ,例7.3 用冒泡法对10个数排序,排序过程: (1)比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1
6、趟冒泡排序后,排序结束,#include main() int a11,i,j,t; printf(“Input 10 numbers:n“); for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(“The sorted numbers:n“); for(i=1;i11;i+) printf(“%d “,ai); ,例7.4 用简单选择法对10个数排序,排序过程: (1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数交换第一趟选择排序,结果最小的数被安置在第一个元素位置上 (2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将
7、它与第二个数交换第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束,#include main() int a11,i,j,k,x; printf(“Input 10 numbers:n“); for(i=1;i11;i+) scanf(“%d“, ,7.2 二维数组,定义方式: 数据类型 数组名常量表达式1常量表达式2; 例 int a34; float b25; int a3,4; () 1数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二 行,以此类推。 2. 设有一个m*n的数组x,则第i行第j列的元素xij在数组中的位置为:i*n+j(注意
8、:行号、列号均从0开始计数,行下标,列下标,3可以把2维数组看作是一种特殊的1维数组:它的元素又是一个1维数组。 例如,对a32,可以把a看作是一个1维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含2个元素的1维数组,如图6-4所示。即把a0、a1、a2看作是3个1维数组的名字,a0,a1,a2,引用二维数组元素: 数组名行下标表达式列下标表达式,1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。 2“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x34,则可用的行下标范围为02,列下标范围为03。 3对基本数据类型的变量所能进行的
9、操作,也都适合于相同数据类型的二维数组元素。,二维数组元素的初始化 分行初始化: 例 int a23=1,2,3,4,5,6; 按元素排列顺序初始化例 int a23=1,2,3,4,5,6; 如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。 int a3=1,2,3,4,5,6;,二维数组应用举例,二维数组应用举例,例7.5 有M个学生,学习N门课程,已知所有学生的各科成绩, 编程:分别求每个学生的平均成绩和每门课程的平均成绩,#define M 5 #define N 4 #include “stdio.h“ main() int i,j; static float s
10、coreM+1N+1=78,85,83,65, 88,91,89,93, 72,65,54,75,86,88,75,60, 69,60,50,72;,for(i=0;iM;i+) for(j=0;jN;j+) scoreiN += scoreij; scoreMj += scoreij; scoreiN /= N; for(j=0;jN;j+) scoreMj /= M; clrscr(); printf(“学生编号 课程1 课程2 课程3 课程4 个人平均n“);,for(i=0;iM;i+) printf(“学生%dt“,i+1); for(j=0;jN+1;j+) printf(“%6.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 数组 第七
链接地址:https://www.31doc.com/p-3026294.html