c语言程序设计(王勇)第9章数组-建工化学.ppt
第九章第九章 数组数组数据类型基本类型(简单类型)构造类型(组合类型)指针类型空类型(void)数值类型字符类型(char)枚举类型(enum)整型实型单精度(float)双精度(double)短整型(short)整型(int)长整型(long)数组类型结构类型(stru)共用类型(union)文件类型(FILE)C引 入上一页下一页暂 停重 放系统返 回休息一、数组的概念 数组是指一组同类型数据组成的序列。数组中的每个数据称为一个元素,用一个统一的名字来标识,用下标指示数组中的各个元素。二、数组的维数一维:只含有一个下标的数组称为一维数组 a9二维:含有两个下标的数组称为二维数组 b34多维:含有多个下标的数组称为多维数组 c2354上一页下一页暂 停重 放系统返 回休息 第一节第一节 一维数组一维数组一、定义格式:类型标识符 数组名常量表达式;(1)用 ,不能用()(2)下标只能用常量(3)下标必须是大于零的整数(4)下标最大元素个数是65535 指明数组中各元素的数据类型指明数组包含的元素个数举例:int ab10;说明:练习上一页下一页暂 停重 放系统返 回休息二、数组元素的初始化在定义数组时对各元素指定初始值,称为数组的初始化例:int ab5=1,3,5,7,9;内存中存储格式为:12579例:char c10=c,l,a,n,g,u,a,g,e 内存中存储格式为:clanguage ab0 ab1 ab2 ab3 ab4c0 c1 c2 c3 c4 c5 c6 c7 c8 c9abc上一页下一页暂 停重 放系统返 回休息说明:1.下标是从 0 开始的2.初始化数据用 括起,各数据间用“,”分隔3.数据个数可以少于数组的元素个数,但不能大于元素个数。int a5=1,3,5;int a5=1,2,3,4,5,6,7;4.当给所有元素赋值时,可以省略数组元素个数,系统根据数据个数确定数组元素的个数。float b3=1.0,2.0,3.5;float b=1.0,2.0,3.5;float b=1.0,2.0,3.5;float b8=1.0,2.0,3.5;上一页下一页暂 停重 放系统返 回休息三、数组元素的引用引用格式:数组名下标(1)定义与引用的区别int a9;a9=10;(2)数组元素的赋值只有在初始化时才能整体赋值,以后只能通过逐个赋值的方法进行。例:int b3=1,0,5;例:a2=3;说明:a0=a4+a2;int b3;b=1,0,5;上一页下一页暂 停重 放系统返 回休息上一页下一页暂 停重 放系统返 回休息二、数组首地址引用方法第二节 一维数组和指针例:*(a+2)=3;scanf(“%d”,a+i);printf(“%d”,*(a+i);例:int a5=1,3,5,7,9;内存中存储格式为:13579 a0 a1 a2 a3 a4地址a+1a+2a+3a+4a一、一维数组和数组元素的地址引用格式:数组名+i上一页下一页暂 停重 放系统返 回休息例:*(p+2)=3;for(I=0;I=4;I+)scanf(“%d”,p+);p=a;for(I=0;I=4;I+)printf(“%d”,*p+);例:int a5=1,3,5,7,9,*p=a;内存中存储格式为:12579 a0 a1 a2 a3 a4p+1p+2p+3p+4p三、利用指针引用一维数组元素引用格式:指针名+i上一页下一页暂 停重 放系统返 回休息例:p2=5;for(i=0;i=4;i+)scanf(“%d”,&pi);for(i=0;i=4;i+)printf(“%d”,pi);当指针指向一维数组以后,就可以像使用数组一样使用指针内存中存储格式为:12579 a0 a1 a2 a3 a4P1P2P3P4P0四、用带下标的指针引用一维数组元素引用格式:指针名I例:p=&a2;*p=2;for(i=0;ib return a;else return b;第三节 指针和数组做为函数参数二、数组名和指针做实参(传址调用)三、数组和指针做形参格式1:函数类型 函数名(参数类型 指针)例:int max(int*p);格式2:函数类型 函数名(参数类型 数组 )例:int max(int a);或 int max(int aM);例:main()int a=1,2,3,4,5;printf(“%d”,mix(a1,a3);第四节 数组元素的引用举例输出下列矩阵上一页下一页暂 停重 放系统返 回休息#include“stdio.h”main()int i;int a20;for(i=0;i20;i+)ai=i+1;for(i=0;i20;i+)if(i%5=0)printf(“n”);printf(“%8d”,ai);1 2 3 4 56 7 8 9 10711 12 13 14 15816 17 18 19 20printf(“%8d”,*(a+i);*(a+i)=i+1;输入十个数,计算其平均值输入十个数,计算其平均值float aver(float a ,int n)int i;float sum=0,average;for(i=0;i=n-1;i+)sum=sum+ai;average=sum/n;return average;上一页下一页暂 停重 放系统返 回休息输入十个数,利用 计算其均方差main()int i;float sum=0,a10,av;for(i=0;i10;i+)scanf(“%f”,&ai);av=aver(a,10);for(i=0;i10;i+)sum=sum+(ai-av)*(ai-av);printf(“%f”,sum);第五节第五节 二维数组二维数组一、引言假设某班级学生的成绩如下:李四 赵五 60 90 83 79 93 75姓名 语文 数学 物理 化学 英语 政治张三85 69 90 95 89 65 87 85 79 82 98 80 李六 60 90 83 79 93 75张涛 60 90 83 79 93 75.王天 78 87 65 87 80 69上一页下一页暂 停重 放系统返 回休息二、定义格式:类型 数组名常量表达式1常量表达式2举例:int b34;说明:1.二维数组的排列顺序是按行排列的2.二维数组所有元素个数不能大于65535 int b200400;b00b01b02b03b10b11b12b13b20b21b22b23b00b01b02b03b10b11b12b13b20b21b22b23上一页下一页暂 停重 放系统返 回休息三、初始化同一维数组一样,二维数组也可以在定义的时候赋值int b34=1,2,3,4,5,6,7,8,9,10,11,12;说明:1.初始化可以采用分行的方法完成 2.也可以直接按各个元素在数据中的排列顺序直接列出int b34=1,2,3,4,5,6,7,8,9,10,11,12;这种方式直观,清晰,是最常见的一种方式这种方式分不清行列间的关系,而且数据较多时很容易出错上一页下一页暂 停重 放系统返 回休息3.给所有元素赋值时或采用分行方式赋值时,下标1可省略例:int 3=1,2,3,6,5,4;a00 a01 a02 a10 a11 a12 int a23=1,2,1;int b3=1,2,3,4,5,6,7,8,9,10,11,12;int a23=1,2,3,6,5,4;123654int a3=1,2,1 12 0100a00 a01 a02 a10 a11 a12 4.任何时候下标2不能省略,因为系统无法判断元素个数121000a00 a01 a02 a10 a11 a12 上一页下一页暂 停重 放系统返 回休息四、二维数组的引用 与一维数组的引用类似,二维数组的引用也是通过数组名和两个下标进行的例:编写输入各位同学成绩的程序段(假设有40位同学)main()int i,j;float cj416;for(i=1;i=40;i+)for(j=1;j=5;j+)printf(“请输入第%d位同学第d门成绩”),i,j);scanf(“%f”,cjij);上一页下一页暂 停重 放系统返 回休息指向指针的指针i4p2&ip1&p2 定义方法:类型标识符 *指针变量名 *结合方向:自右自左 *p 相当于*(*p)例:int*p1;int*p2;int i=3;p2=&i;p1=&p2;定义一个指向指针变量的变量 p1 定义一个指针变量p2 定义一个整型变量i 将变量i的地址传给p2,即使p2指向变量i 将指针变量p2的地址传给p1,即使p1指向p2 一个指针可以指向一个整型数据、实型数据、字符型数据以及结构体、共用体等数据类型,也可以指向另一个指针。上一页下一页暂 停重 放系统返 回休息输出杨辉三角形(程序见P133)1111 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1分析特点是:第一列是1 对角线为1 从第三行开始,每数是它上面前一列和它对应列的和 可用 aij=ai-1j-1+ai-1j表示