提交西电出版社课件 第4章 数组

上传人:E**** 文档编号:89387217 上传时间:2019-05-24 格式:PPT 页数:108 大小:2.72MB
返回 下载 相关 举报
提交西电出版社课件 第4章 数组_第1页
第1页 / 共108页
提交西电出版社课件 第4章 数组_第2页
第2页 / 共108页
提交西电出版社课件 第4章 数组_第3页
第3页 / 共108页
提交西电出版社课件 第4章 数组_第4页
第4页 / 共108页
提交西电出版社课件 第4章 数组_第5页
第5页 / 共108页
点击查看更多>>
资源描述

《提交西电出版社课件 第4章 数组》由会员分享,可在线阅读,更多相关《提交西电出版社课件 第4章 数组(108页珍藏版)》请在金锄头文库上搜索。

1、第四章 数 组,C/C+语言程序设计,龚尚福,贾澎涛主编 C/C+语言程序设计 西安电子科技大学出版社,第4章 数组,4.1 一维数组 4.2 二维数组 4.3 字符数组与字符串 4.4 指针与数组 4.5 指向指针的指针 4.6 小结,第4章 数组,一个人N门课的成绩怎样存储和处理? 一个班N门课的成绩怎样存储和处理?,这些数据的特点:具有相同的数据类型。 为了方便地使用这些数据,C语言提供了一种构造数据类型:数组。 数组是个多值变量,由一组同名但不同下标的元素构成。 一个数组被顺序存放在一块连续的内存中,用数组名和下标就可以唯一地确定某个数组元素。 只有一个下标的数组被称为一维数组,有两个

2、下标的数组被称为二维数组,以此类推。C语言允许使用任意维数的数组。,4.1 一维数组,“数据类型”:是数组元素的数据类型。 “数组名”:遵循C语言标识符规则。 “整型常量表达式”:表示数组中有多少个元素,即数组的长度。它可以是整型常量、整型常量表达式或符号常量,但不能包含变量。 例如: float x10; 数组名表示数组第一个元素x0的地址,也就是整个数组的首地址,是一个地址常量。,4.1.1 一维数组的定义,数据类型 数组名整型常量表达式;,数组定义中应注意以下几个常见错误: (1)“int x;” 数组名后面的方括号中内容不能为空,必须为整型常量表达式。 (2)“int x(5);” 数

3、组名后应该为方括号。 (3)“int n=4; int xn;”方括号中不能是变量,必须是常量。 以下数组定义是正确的: #define N 10 float score1N, score2N; int num10+N; char c26;,4.1.1 一维数组的定义(续),数组在内存的存放,数组元素的下标从0开始按顺序编号。 一维数组的数组元素在内存里按顺序存放。 数组名代表数组的首地址,即score的值与score0 的地址值相同。,score数组,例如:float score5;,7,4.1.2 一维数组的引用,格式:,例如:输入学生成绩 for(i=0;i5;i+) scanf(“%f

4、“,下标表达式可以为任何非负整型表达式,包括整型常量、整型变量、含有运算符的整型表达式,以及返回值为整数的函数调用。如果值为小数时,C编译将自动取整。 下标表达式的值应在元素编号的取值范围内。,数组名下标表达式,8,4.1.2 一维数组的引用(续),说明: (1)由于数组元素与同一类型的简单变量具有相同的地位和作用,因此,对变量的任何操作都适用于数组元素。 (2)在引用数组元素时,下标可以是整型常数或表达式,表达式内允许变量存在。若定义“int x5;”,设i=3,下列引用都是正确的:,xi /*引用数组x的第3个元素*/ xi+ /*引用数组x的第3个元素*/ x2*i-6 /*引用数组x的

5、第0个元素*/,4.1.2 一维数组的引用(续),说明: (3)下标从0开始(下界为0),数组的最大下标(上界)是数组长度减1。 例如: int a10; scanf (“%d“, /* 下标越界 */,C编译系统不做越界检查,如果引用的数组元素 超出数组范围会破坏其他变量的值。,4.1.2 一维数组的引用(续),说明: (4)在C语言中,一般需逐个地使用下标变量引用数组元素。例如,输出有10个元素的整型数组,须使用循环语句逐个输出各下标变量: int a10; for(i=0;i10;i+) printf (“%d “,ai); 而不能用一个语句输出整个数组,下面的写法是错误的: print

6、f (“%d “,a);,11,4.1.2 一维数组的引用(续),(5) 是下标运算符,引用数组元素时,根据数组的首地址和下标数,计算出该元素的实际地址,取出该地址的内容进行操作。,如引用 score2: (1)计算 2000+2*4=2008 (2)取出2008的内容,12,4.1.3 一维数组元素的初始化,初始化:在定义数组时给数组元素赋初值。,(1) 在定义数组时,对全部数组元素赋初值。 例如:int x5=1,2,3,4,5; 此时可以省略数组长度,例如: int x =1,2,3,4,5; (2) 在定义数组时,对部分数组元素赋初值。 例如:int x5=1,2,3; 只给前面三个元

7、素赋初值(x0=1, x1=2,x2=3),为其余元素赋 0 。 (3) 当初值的个数多于数组元素的个数时,编译出错。例如:int x5=1,2,3,4,5,6;,数据类型 数组名整型常量表达式=常量表 达式,常量表达式,,4.1.4 一维数组应用举例,【例4.2】数组赋值与数组拷贝。 #include “stdio.h“ void main() int a10,b10,i; for(i=0;i10;i+) ai=i+1; for(i=0;i10;i+) bi=ai; for(i=0;i10;i+) printf (“a%d=%d,b%d=%dn“,i,ai,i,bi); ,【例4.3】输入5

8、个整数,找出最大数和最小数所在位置,并把二者对调,然后输出。,思路: 求最大/小值采用打擂台的方法。 定义一维数组a存放被比较的数。 定义变量max:最大值, min:最小值, k:最大值下标 , j:最小值下标 。 各数依次与擂主进行比较, 若aimax 则: max=ai; k=i; 否则判断: 若aimin 则: min=ai; j=i; 当所有的数都比较完之后,将aj=max; ak=min; 输出a数组。,main( ) int a5,max,min,i,j,k; for(i=0; imax) max=ai; k=i ; aj=max; ak=min; for (i=0; i5; i

9、+) printf(“%5d“,ai); printf(“n“); ,程序运行情况如下: 5 7 2 3 1 5 1 2 3 7,16,【例4.4】冒泡法排序(从小到大)。,以6个数:3、7、5、6、8、0为例。 第一趟排序情况如下: 3 7 5 6 8 0 第一次 3和7比较,不交换 3 7 5 6 8 0 第二次 7和5比较,交换 3 5 7 6 8 0 第三次 7和6比较,交换 3 5 6 7 8 0 第四次 7和8比较,不交换 3 5 6 7 8 0 第五次 8和0比较,交换 3 5 6 7 0 8 在第一趟排序中,6个数比较了5次,把6个数中的最大数8排在最后。,17,冒泡法排序 (

10、续),第二趟排序情况如下: 3 5 6 7 0 8 第一次 3和5比较,不交换 3 5 6 7 0 8 第二次 5和6比较,不交换 3 5 6 7 0 8 第三次 6和7比较,不交换 3 5 6 7 0 8 第四次 7和0比较,交换 3 5 6 0 7 8 在第二趟排序中,最大数8不用参加比较,其余的5个数比较了4次,把其中的最大数7排在最后,排出7 8。 以此类推: 第三趟比较3次,排出 6 7 8 第四趟比较2次,排出 5 6 7 8 第五趟比较1次,排出 3 5 6 7 8 最后还剩下1个数0,不需再比较,得到排序结果: 0 3 5 6 7 8,18,冒泡法排序 (续),从上述过程可以看

11、到:n个数要比较n-1趟,而在第j趟比较中,要进行n-j次两两比较。,19,程序运行情况如下: 3 7 5 6 8 0 0 3 5 6 7 8,#define N 6 main( ) int aN; int i,j,t; for (i=0; iai+1) /*前后两数比较、交换*/ t=ai;ai=ai+1;ai+1=t; printf(“The sorted numbers: n“); for(i=0;iN;i+) printf(“%dt“,ai); ,20,以6个数:3、7、5、6、8、0为例。 思路: 第一趟:将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结

12、束后,第一个数则是最小的数。 第二趟:将第二个数依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数; 。,【例4.5】比较法排序(从小到大)。,21,【例4.5】比较法排序(续),22,程序运行情况如下: 96 78 65 86 40 The sorted numbers: 40 65 78 86 96,#define N 5 main( ) int aN; int i,j,t; for (i=0; iai) t=aj;aj=ai;ai=t; printf(“The sorted numbers: n“); for(i=0;iN;i+) printf

13、(“%dt”,ai); ,23,4.2 二维数组,“整型常量表达式1”:规定了二维数组中一维数组的个数。 “整型常量表达式2”:规定了一维数组中元素的个数。 例如: float x23;,4.2.1 二维数组的定义,int a3,4,b(3,4),c ,d(3)(4);,数据类型 数组名整型常量表达式1整型常量表达式2;,24,地址 值 数组元素,与一维数组相同,其下标只能是正整数,并且从0开始编号的。,二维数组元素在内存中的排列顺序:按行存放,25,x0是数组名,是元素x00的地址,x1是数组名, 是元素x10的地址,x0- x00,x01,x02,x1- x10,x11,x12,可以把x数

14、组看作是包含二个元素的一维数组,每个元素又是一个含有三个元素的一维数组。,必须强调的是,二维数组x中的x0、x1、x2是数组名,不是一个单纯的数组元素,不能当作普通变量使用。,二维数组可看作是一种特殊的一维数组,26,a34=3; /* 下标越界 */ a1,2=1; /* 应写成 a12=1; */,4.2.2 二维数组的引用,下标表达式是结果为任意非负整型表达式,每个下标都从0开始。 例:int a34; a00=3; a01=a00+10;,数组元素的表示形式 :,数组名 行下标表达式列下标表达式,27,4.2.2 二维数组的引用,注意: 数组元素和数组定义在形式中有些相似,但这两者具有

15、完全不同的含义。 数组定义语句的方括号中给出的是某一维的长度,即某一维元素的个数; 数组元素中的下标是该元素在数组中的位置标识。 前者只能是常量,后者可以是常量、变量或表达式。,28,4.2.3 二维数组元素的初始化,例:int a23=1,2,3,4,5,6;,1按行赋初值,将每一行元素的初值用一对花括号括起来。,例:int a23=1,2,3,4,5,6; 初始化后结果: 1 2 3 4 5 6,2根据该数组元素个数,把初始化数据全部括在一个花括号内,由二维数组按行存储的规则,依次赋给数组对应的元素。,29,4.2.3 二维数组元素的初始化,3给部分元素赋初值,例:int a23=1,4; 初始化后结果: 1 0 0 4 0 0,4数组初始化时,行长度可省,列长度不能省 例如:int a3=1,2,3

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号