1、数组的概念数组的概念概念引入概念引入 30 30 名?名?float x,y,z;float a,b,c,d,e,f;数组的概念数组的概念6.1.1 6.1.1 一维数组的定义及使用一维数组的定义及使用可以是可以是常量常量 和和 符号常量符号常量,不能用变量不能用变量,下标从下标从0开始开始n引用引用 数组名数组名下标下标n必须必须先定义先定义,后使用。,后使用。n只能逐个引用数组只能逐个引用数组元素元素,每个元素的引用方法与一,每个元素的引用方法与一般变量相同。例如:般变量相同。例如:a0=a5+a7-a2*3数组名的构成方法与一般变量名相同数组名的构成方法与一般变量名相同无无a10 一维数
2、组一维数组初始化初始化所赋初值元所赋初值元素从数组的素从数组的第第0个元素开个元素开始始,无赋初值无赋初值元素均为元素均为00,1,2,3,0,0,0,0,0,0数组数组名字名字是数组是数组首元素的内存地址首元素的内存地址。数组名是一个数组名是一个常量常量,不能被赋值。,不能被赋值。a0 a1a2 a3 a4a5 a6 a7 a8 a9a 一维数组一维数组 存储顺序存储顺序#include void main() int i, j; float x20, y, z; int a97.8; xi+j*2 = i+j; z = xy*2; printf(“%f”, x0); printf(“%f”
3、, x20); scanf(“%f”,&x); scanf(“%f”,&x3); printf(“%f”, x); float y20; y = x; y10 = x10;下标表达式的值必须是一个整数下标表达式的值必须是一个整数下标表达式的值应大于等于下标表达式的值应大于等于0小于数组的大小小于数组的大小定义数组的大小必须是一个定义数组的大小必须是一个正整数常量正整数常量数组不能作为一个整体直接输数组不能作为一个整体直接输入输出,用元素入输出,用元素数组不能作为一个整体相赋值,数组不能作为一个整体相赋值,用元素用元素main() int a4 = 1,2,3,4, b4; b = a; 解决方
4、法解决方法 法法1:1:逐个元素赋值逐个元素赋值 b0=a0; b1=a1; b2=a2; b3=a3; 法法2:2:通过循环赋值通过循环赋值 int i; for (i=0;i4;i+) bi = ai; 数组名表示数组的首地址数组名表示数组的首地址, ,其值不可改变其值不可改变! !int a10,i;scanf( %d ,&ai);for (i=0;i10;i+) scanf( %d ,&ai);printf( %d ,ai);for (i=0;i10;i+) printf( %d ,ai);只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)n例例1 输
5、入五个实数,并求出这五个实数的平均值输入五个实数,并求出这五个实数的平均值# include void main(void)int i;float x5,sum=0;printf(输入五个数输入五个数: “);for (i=0;i5;i+)scanf(“%f”,&xi);sum+=xi; printf(五个数字是:五个数字是:“);for (i=0;i5;i+)printf(“%f ”,xi);printf(n平均数是平均数是: %f n“,sum/5);利用循环语句获得数组的值利用循环语句获得数组的值利用循环语句输出数组的值利用循环语句输出数组的值max(i=0)max(i=2)max(i=
6、3)n例例 用选择排序的方法对输入的用选择排序的方法对输入的1010个整数进行排序个整数进行排序( (从小到大从小到大) )n思路:思路:1.1.用用f0f0与与fj(1=j=9)fj(1=jfj,f0fj,则则f0f0与与fjfj交换,然后用新的交换,然后用新的f0f0与与fjfj后面的元素比较。比较完后面的元素比较。比较完9 9个元素后,个元素后,0 0号位置号位置的元素的元素f0f0就是就是1010个元素中最小的。个元素中最小的。2.2.用用f1f1作为新的比较基准,与作为新的比较基准,与fj(2=j=9)fj(2=jfj,就交换两个数值,就交换两个数值6.1.2 6.1.2 二维数组的
7、定义及使用二维数组的定义及使用a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23行数行数列数列数二维数组理解二维数组理解例例 int a34;20161720181920202120222320089201011201213201415200012002320045200067a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23每个元素每个元素ai由包含由包含4个个元素的一维数组组成元素的一维数组组成a0a1a2行名行
8、名014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2二维数组二维数组初始化初始化1 0 0 00 6 0 0 0 0 11 0 注意外面的注意外面的 不能省略不能省略 1 0 0 2 0 0 3 4 5 通过双重循环赋值通过双重循环赋值 int a42=1,2,3,4,5,6,7,8; int b42; int i,j; for (i=0; i4; i+) for (j=0; j2; j+) bij = aij; 使用双重循环使用双重循环 int a42; int i,j; for (i=0; i4; i+) for (j=0; j
9、2; j+) scanf(%d, &aij); n例例5 5 输入一个输入一个3 3行行4 4列的二维数组,设计一程序,求列的二维数组,设计一程序,求出数组元素中的最大值和最小值,以及最大值和最出数组元素中的最大值和最小值,以及最大值和最小值所在的行号和列号。小值所在的行号和列号。用户输入二维数组的初值用户输入二维数组的初值初始认为初始认为a00是最小和是最小和最大值,初始化最小最大最大值,初始化最小最大值的行列号值的行列号2016172018192020212022232008920101120121320141520023a00a01a02a03a10a11a12a13a20a21a22a
10、232016172018192020212022232008920101120121320141520023a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23遍历二维数组,求出极值遍历二维数组,求出极值n例例4 4 设计一程序,将一个设计一程序,将一个4 4行行4 4列的二维数组中行和列的二维数组中行和列元素互换(数学上称为矩阵的转置),并存放到列元素互换(数学上称为矩阵的转置),并存放到另一个数组中。例如:另一个数组中。例如:11 12 13 1415 16 17 1819 20 21 2223 24 25 26a = 11 15 19 2312 16
11、 20 2413 17 21 2514 18 22 26b = 二维数组赋初值二维数组赋初值将数组元素将数组元素aij 赋给数赋给数组元素组元素bji,实现矩阵,实现矩阵的行列元素互换(转置)的行列元素互换(转置)输出显示二维数组输出显示二维数组a的值的值输出显示二维数组输出显示二维数组b的值的值输出显示的模块应该用输出显示的模块应该用函数实现!函数实现!C语言程序设计语言程序设计/*算法:求两个整数算法:求两个整数a和和b的最大公约数的最大公约数返回值:返回返回值:返回a和和b的最大公约数的最大公约数*/int gcd(int a,int b)int r,t;if(ab) /*确保第一个参数
12、大于第二个参数确保第一个参数大于第二个参数*/ t=a; a=b; b=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; return b; 求最大公约数的算法求最大公约数的算法 2022-1-2230例:例: 求学生的平均成绩求学生的平均成绩 #include float average(int stu10, int n); main() int score10, i; float av; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%d, &scorei); av=average(score , 10
13、); printf(Average is:%.2f, av); float average(int stu , int n) int i; float av,total=0; for( i=0; in; i+ ) total += stui; av = total/n; return av; 实参用数组名实参用数组名形参用数组定义形参用数组定义.2109score569372.88stu实参和形参数组类型应一致实参和形参数组类型应一致2022-1-2231a00a01a02a10a11a12a00a01a02a10a11a12实际传送的是数组第一个元素的地址实际传送的是数组第一个元素的地址【例例】(矩阵转置)求矩阵(矩阵转置)求矩阵a a的转置矩阵,所谓矩阵转的转置矩阵,所谓矩阵转置就是将矩阵的行变成列,列变成行,要求输置就是将矩阵的行变成列,列变成行,要求输出转置前后的矩阵。出转置前后的矩阵。