第8讲一维数组和二维数组ppt课件.ppt
第8讲 一维数组和二维数组,一、一维数组 1、一维数组的定义 2、一维数组元素的引用 3、一维数组的初始化二、二维数组 1、二维数组的定义和引用 2、二维数组的初始化,数学中的数列:a1,a2,a3,ai,an,C程序中数组:a0,a1,a2,ai-1,an-1,1、数组: 数目固定、类型相同的若干变量的有序集合。2、数组元素: 数组中的每一个数据。3、性质:1) 数组中的每一个元素都属于同一个数据类型。 2) 在内存中数组占有一段连续的存储空间。,基本概念: (P91),一、一维数组 (P91),1、一维数组的定义,定义的格式:类型说明符 数组名长度,;,说明:1)类型说明符:表明该数组所属类型,即数组元素的类型。2)数组名:数组的名称,其命名方法同变量名。,例如:int a5;含义:定义一个数组变量a,它包含5个变量元素。a0,a1,a2, a3,a4,引用方式: 数组名下标,2、一维数组元素的引用 (P93),说明: 1) 下标的最小值为0,最大值为整常量表达式-1。 2) 数组必须先定义后使用。 3) 数组元素只能逐个被引用,不能一次引用整个数组(字符数组除外)。 4) 对数组中所有元素逐个引用时,通常可使用循环结构。,写出下面程序的结果。 (一维数组的使用),#include void main( )int a10,s,i;s=0;for (i=0; i=9; i+)ai=i;for (i=0; i=9; i+)s=s+ai;printf(s=%dn,s);,执行结果:s=45,写出下面程序的结果。 (一维数组的使用),#include void main( )int a10,i;a0=a1=1;for (i=2; i=7; i+)ai=ai-1+ai-2;for (i=0; i=7; i+)printf(%4d,ai);,执行结果: 1 1 2 3 5 8 13 21,例统计全班32名同学某门功课的平均成绩,找出并输出最高分。,main( ) int i, sum, max, a32 ; float average; for ( i=0; i max ) max=ai; average=(float)sum/32; printf(Average=%.2f,MAX=%dn,average,max); ,1) 数组的初始化:指定义数组时对数组元素赋以初值。,3、一维数组的初始化 (P92),2) 格式: 类型符 数组名表达式=初值表;,3) 数组初始化有三种情况:给全部元素赋初值。给部分元素赋初值。给全部元素赋初值时可不指定数组的长度。,全部元素赋初值: 例如int a8= 0,1,2,3,4,5,6,7 ;,部分元素赋初值:例如 int a8= 0,1,2,3,4 ;,全部元素赋初值时可不指定数组的长度: 例 int a = 0,1,2,3,4,5,6,7 ;,例写出下面程序的执行结果。,#include void main( )int a6=1,2,3;int i,j;for (i=3;i6; i+)ai=ai-3+ai-2+ai-1;for (i=0;i6; i+)printf(%10d,ai);,执行结果: 1 1 3 6 11 20,#include stdio.h# define N 5main( )int a =1,2,3,4,5, temp, i;for(i=0;iN;i+) printf(%4d, ai); for(i=0;iN/2;i+) temp=ai; ai=aN-i-1; aN-i-1=temp; for(i=0;iN;i+) printf(%4d, ai);,例 将一个数组中的值按逆序重新存放。,二、二维数组(P96),1、二维数组的定义,格式: 类型说明符 数组名行数列数;,说明:在C语言中二维数组的元素按行优先顺序存放。,例如:int a23;含义:定义一个数组变量a,它包含2行,每行有3个数组元素。a00,a01,a02 a10,a11,a12,注意: 0下标1行数-1; 0下标2列数-1。,2、二维数组的引用 (P99)格式: 数组名下标1下标2,例如:int m23;则合法引用格式为: m00 m01 m02 m10 m11 m12,例写出下面程序的执行结果。,#include stdio.hvoid main() int a55=0,i,j;for (i=0;i5;i+) for (j=0;j5;j+) if (i=j|i+j=4) aij=1; for (i=0;i5;i+) for (j=0;j5;j+) printf(%2d,aij); printf(n); ,说明:二维数组的初始化有三种情况。给全部元素赋初值。给部分元素赋初值。给二维数组的全部元素赋初值,可以不指定第一维的长度,但第二维的长度不能省略。,2、二维数组的初始化 (P97),格式:类型符 数组名表达式1表达式2=初值表;,二维数组初始化举例1:,给全部元素赋初值。 例如 int 4=0,1,2,3,4,5,6,7,8,9,10,11; 或写成: int a34=0,1,2,3,4,5,6,7,8,9,10,11;,二维数组初始化举例2:,给部分元素赋初值(没有赋初值的元素的值为0): 例1 int a34=0,1,4,5,6,8,9,10,11;,例2int b34=0,1,2,3,4,5,6 ;,二维数组初始化举例3:,给二维数组的全部元素赋初值,可以不指定第一维的长度,但第二维的长度不能省略。 例 int a 4=0,1,2,3,4,5,6,7,8,9,10,11; 或写成: int a 4=0,1,2,3,4,5,6,7,8,9,10,11;,例题:矩阵的转置。,分析:将矩阵Am*n行列互换后,得一新矩阵为Bn*m。 它们的元素对应关系为:ai, j = bj, i,#include stdio.hmain() int a44=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;int i,j,b44; for ( i=0;i4; i+ ) for ( j=0; j4 ; j+ ) bji=aij; for ( i=0;i4; i+ ) for ( j=0; j4 ; j+ ) printf(%7d,bij); printf(n); ,例题 打印杨辉三角形。(要求打印N行),说明:三角形是(a+b)的n次幂展开后各项的系数。例如:,分析:杨辉三角各行的系数有如下规律(1)各行第一个数都是1;(2)各行最后一个数为1;(3)从第3行起,除上面指出的第一个数和最后一个数外,其余各数是上一行同列和前一列两个数之和。,11,2,11,3,3,11,4,6,4,1,a32=a21+a22,a44=a33+a34,表示为通式即:,aij=ai-1j+ai-1j-1,参考程序:,#define N 10#include main() int i,j,aNN; for(i=0;iN;i+) aii=1;ai0=1; for(i=2;iN;i+) for(j=1;j=i-1;j+) aij=ai-1j+ai-1j-1;for(i=0;iN;i+) for (j=0;j=i;j+) printf(%6d,aij);printf(n); ,