第四章简单构造数据类型 4.1一维数组的引出与使用 ◆42二维数组的引出与使用 ◇4.3字符数组 令44数组与函数 今4.5数组与指针 4.6字符串与指针 ◆4.7典型例题
❖ 4.1 一维数组的引出与使用 ❖ 4.2 二维数组的引出与使用 ❖ 4.3 字符数组 ❖ 4.4 数组与函数 ❖ 4.5 数组与指针 ❖ 4.6 字符串与指针 ❖ 4.7 典型例题 第四章 简单构造数据类型
41一维数组的引出及使用 411一维数组的引出 引出 例:某班有40名学生,求该班成绩的平均分 #include void main( 这里只使用了一个变量s,虽然 i int j, S, sum=0; 通过循环我们输入了40个学生 float ave 的成绩,但循环结束后s中只是 for(j=1;j=40;j++) 第40个学生的成绩,前面39个 { scanf(“%d”,&s) 学生的成绩都没有保存下来 sum=sum+s 如果要求保存这40名 ave=sum/40 ○ 学生的成绩,最后再 输出,应该怎么办? printf(ave=%f", ave);
4.1 一维数组的引出及使用 4.1.1 一维数组的引出 一、引出 例:某班有40名学生,求该班成绩的平均分 #include void main( ) { int j , s, sum=0 ; float ave ; for(j=1; j<=40 ; j++) { scanf(“%d”, &s); sum=sum+s; } ave=sum/40; printf(“ave=%f”, ave); } 这里只使用了一个变量s,虽然 通过循环我们输入了40个学生 的成绩,但循环结束后s中只是 第40个学生的成绩,前面39个 学生的成绩都没有保存下来 如果要求保存这40名 学生的成绩,最后再 输出,应该怎么办?
411-维数组的引出及使用 例4-1:求某班成绩的平均分,并输出所有学生的成绩 #include 因为现在要保存每个学生的成 void main() 绩,那就不能只使用一个变量s了, intj,sum=0,s{401;而需要40个变量,这样一来输入、 float ave 输出、计算都会变得繁琐。 for(j=0;j=39;j++) 在这种情况下,我们希望能有 scanf(“%d”,&s[j);种数据类型可以保存一组数据, sum=sum+si; 并且可以方便的对这组数据进行 输入、输出、计算等操作,因此 ave=sum/40 引出了数组类型。 printf(“ave=%r”,ave);"说明一个含有40个元素的数组, for(j=0;j<40;j++) 每个数组元素存放一个成绩,成 printf(“%d,”,slij);绩的输入、输出、计算都可以通 过循环来实现
▪因为现在要保存每个学生的成 绩,那就不能只使用一个变量s了, 而需要40个变量,这样一来输入、 输出、计算都会变得繁琐。 ▪在这种情况下,我们希望能有一 种数据类型可以保存一组数据, 并且可以方便的对这组数据进行 输入、输出、计算等操作,因此 引出了数组类型。 ▪说明一个含有40个元素的数组, 每个数组元素存放一个成绩,成 绩的输入、输出、计算都可以通 过循环来实现 例4-1: 求某班成绩的平均分,并输出所有学生的成绩 #include void main( ) { int j , sum=0 , s[40] ; float ave ; for(j=0; j<=39 ; j++) { scanf(“%d”, &s[j]); sum=sum+s[j]; } ave=sum/40; printf(“ave=%f”, ave); for(j=0; j<40 ; j++) printf(“%d,”, s[j]); } 4.1.1 一维数组的引出及使用
411-维数组的引出及使用 二、数组的概念 1.数组:由具有相同类型的固定数量的元素组成的集合 2.数组元素:每一个数组元素都是一个变量,为了与 般的变量相区别我们称数组元素为下标变量 3下标变量在数组中的位置序号称下标 下标变量的数据类型称为下标类型或元素类型
二、数组的概念 1. 数组:由具有相同类型的固定数量的元素组成的集合 2. 数组元素: 每一个数组元素都是一个变量, 为了与 一般的变量相区别,我们称数组元素为下标变量 3.下标变量在数组中的位置序号称下标 下标变量的数据类型称为下标类型(或元素类型) 4.1.1 一维数组的引出及使用
411一维数组的引出及使用 维数组的定义 1.格式:类型标识符数组名[常量表达式; 例:inta[101; 2.说明 101095a0 (1)数组的类型实际上是指数组元素的101280l 取值类型。对于同一个数组,所有1014661a2 元素的数据类型都是相同的 (2)数组名是用户定义的标识符, 102884 a9 数组名表示了一个存储区的首地址 (即第一个数组元素的地址) 例:一个变量x的地址可以用&x来表示 个数组a的地址就用数组名a来表示,a等价于&a0
三、一维数组的定义 1. 格式 : 类型标识符 数组名 [ 常量表达式 ] ; 例: int a[10] ; 2. 说明 (1) 数组的类型实际上是指数组元素的 取值类型。对于同一个数组,所有 元素的数据类型都是相同的。 84 : 66 80 1010 95 1012 1014 : 1028 a[0] a[1] a[2] : a[9] (2) 数组名是用户定义的标识符, 数组名表示了一个存储区的首地址 (即第一个数组元素的地址) 例: 一个变量x的地址可以用&x来表示 一个数组a的地址就用数组名a来表示, a等价于&a[0] 4.1.1 一维数组的引出及使用
411一维数组的引出及使用 2.说明 (3)数组长度:指数组中元素的个数 (4)数组元素的下标由零开始 例:inta[10中a有10个元素,所以数组长度为10, 数组元素分别是:a0,a[11…81,a19 (5)常量表达式中不能包含变量,其值也不能是实数 int n: int n=6: t define size 8 scanf(%od", &n); int a n; int an: int a 2+3]; int b[8.5 对 错 oat bsIzE
2. 说明 (3) 数组长度 : 指数组中元素的个数 (4) 数组元素的下标由零开始 例: int a[10] 中 a 有10个元素, 所以数组长度为10, 数组元素分别是: a[0] , a[1] … a[8], a[9] (5) 常量表达式中不能包含变量, 其值也不能是实数 int n; scanf("%d",&n); int a[n]; int n=6; int a[n]; int b[8.5]; #define SIZE 8 … int a[2+3]; float b[SIZE]; 对 错 4.1.1 一维数组的引出及使用
41一维数组的引出及使用 四、数组元素的引用 101095a0 1.引用形式:数组名[下标 101280al 2.说明 101466a2 (1)下标可以是整型常量或整型表达式101675a3 如:a[,a[2*3 101884a41 ()数组定义为m15l,数组长度为5maon2as 而下标在0--4之内,即a01-a41 注意: 如果出现a5=72;编译时不会假设这个存储空间是变量x 指出错误,系统会将a4后下一个的,实际上5是不存在的 存储单元赋值为72,但这样可能 如果执行了a5=72,会将 会破坏数组以外其他变量的值 原有的正确数据覆盖掉
四、数组元素的引用 1. 引用形式 : 数组名[ 下标 ] 注意: 如果出现 a[5] = 72 ; 编译时不会 指出错误, 系统会将a[4]后下一个 存储单元 赋值为72, 但这样可能 会破坏数组以外其他变量的值 84 75 66 80 1010 95 1012 1014 1016 1018 a[0] a[1] a[2] a[3] a[4] 1020 72 a[5] 假设这个存储空间是变量x 的, 实际上a[5]是不存在的, 如果执行了a[5]=72, 会将x 原有的正确数据覆盖掉 2. 说明 (1) 下标可以是整型常量或整型表达式 如: a[1] , a[2*3] (2) 数组定义为 int a[5] , 数组长度为5 而下标在0 -- 4之内, 即a[0] -- a[4] 4.1.1 一维数组的引出及使用
411一维数组的引出及使用 五、一维数组的初始化 1.概念:在定义一维数组时对各元素指定初始值称为 数组的初始化inta5={1,3,5,7,9}; 2.说明 (1)对数组的全体元素指定初值,初值用{}括起来,数据之间用 逗号分开。这种情况下,可以不指明数组的长度,系统会根据 }内数据的个数确定数组的长度 int all={1,3,5,7,9};L13579 (2)对数组中部分元素指定初值(这时不能省略数组长度) inta|5={1,3,5}; 13500 (3)使数组中的全部元素初始值都为0 inta5l={0,0,0,0,0};简单的写法:inta5={0};
五、 一维数组的初始化 1. 概念 : 在定义一维数组时对各元素指定初始值称为 数组的初始化 int a[5] = { 1 , 3 , 5 , 7 , 9 } ; 2. 说明 (1) 对数组的全体元素指定初值, 初值用 { } 括起来, 数据之间用 逗号分开。这种情况下, 可以不指明数组的长度, 系统会根据 { }内数据的个数确定数组的长度 int a[ ] = { 1 , 3 , 5 , 7 , 9 } ; (2) 对数组中部分元素指定初值 ( 这时不能省略数组长度) int a[5] = { 1 , 3 , 5 }; (3) 使数组中的全部元素初始值都为0 int a[5] = { 0, 0, 0, 0, 0 } ; 简单的写法: int a[5]={ 0 } ; 4.1.1 一维数组的引出及使用 1 3 5 7 9 1 3 5 0 0
411一维数组的引出及使用 例4-2:使数组元素a0~a的值为0~9,将其逆序再输出 #includesstdio h 4|a|0 #definen 1o void main() 7a[ll f int i, t, ani 3|a2 for(i=0; K<N; i++) 3 a=i fori=0; i<N/2; i++) 9|a|4 i t=aig 2|a5l a=aN-1-il; 6|al6 a N-1-il=ts 0|a7 逆序 for(i=0;i<=9;i++) 8a|8l printf(%3d",aiD; 5|a[9
逆序 #include #define N 10 void main( ) { int i, t, a[N]; for ( i=0; i<N; i++) a[i] = i ; for(i=0; i<N/2; i++) { t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t; } for( i=0; i<=9; i++) printf("%3d ", a[i]); } 例4-2: 使数组元素a[0]~a[9]的值为0~9, 将其逆序再输出 4.1.1 一维数组的引出及使用 5 8 0 1 9 2 6 3 7 4 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[0]→a[9] 4 5 7 8 3 0 a[1] a[2]→→a[8] a[7]
411一维数组的引出及使用 例4-3:用数组求 fibonacci数列的前20个数 #include void maino f011|m21+m1 {inti,f20={1,1}; f[1 for(i=2;i<20;i++) f2|2 f3=f1+f2 fi=fi-2+fi-1; f|3]3 for(i=0;i<20;i++) f4]5 i14=f2]+3 {if(i%4==0) f[518 printf(n”); printf6d”,f);n9|6765
例4-3: 用数组求fibonacci数列的前20个数 #include void main( ) { int i , f[20]={1,1}; for ( i=2 ; i<20 ; i++) f[i]=f[i-2]+f[i-1]; for ( i=0; i<20 ; i++) { if ( i%4==0 ) printf(“\n”); printf(“%6d”, f[i] ); } } 1 1 0 0 0 0 : 0 f[0] f[1] f[2] f[3] f[4] f[5] : f[19] 2 3 5 8 6765 i=2 f[2]=f[0]+f[1] i=3 f[3]=f[1]+f[2] i=4 f[4]=f[2]+f[3] 4.1.1 一维数组的引出及使用