C语言课件:第六章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言课件:第六章.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 第六
- 资源描述:
-
1、共 49 页 第 1 1 页共 49 页 第 2 2 页本章要点本章要点1.1.建立数组的概念;建立数组的概念;2.2.掌握一维数组和二维数组的定义、掌握一维数组和二维数组的定义、3.3.4.4.5.5.掌握用数组进行编程的技术。掌握用数组进行编程的技术。共 49 页 第 3 3 页 如何处理一个班学生的学习成绩?如何处理一个班学生的学习成绩? 一行文字怎样存储?一行文字怎样存储? 一个矩阵怎样存储一个矩阵怎样存储 ?.一组具有一组具有相同数据类型相同数据类型的数据的的数据的 有序集合有序集合 这些数据的特点这些数据的特点:1.1.具有相同的数据类型具有相同的数据类型 2.2.使用过程中需要保
2、留原始数据使用过程中需要保留原始数据 C C语言为这些数据提供了一种语言为这些数据提供了一种构造数据类型:构造数据类型:数组。数组。共 49 页 第 4 4 页其中:其中:markmark、strstr、a a 是数组名。是数组名。 方括号内是数组的方括号内是数组的长度长度。 下标的个数称为数组的下标的个数称为数组的维数维数,markmark、strstr是一是一维数组、维数组、a a是二维数组。是二维数组。 数组的成员称为数组数组的成员称为数组元素元素, ,mark1,mark3mark1,mark3。 数组元素的类型称为该数组的数组元素的类型称为该数组的基类型基类型。数组。数组markma
3、rk的基类型是的基类型是intint,数组,数组strstr的基类型是的基类型是charchar。例如:存储学生成绩用整型数组例如:存储学生成绩用整型数组 mark100mark100, 存储一行文字用字符数组存储一行文字用字符数组 str200str200, 存储一个存储一个4 4* *6 6的矩阵用二维整型数组的矩阵用二维整型数组 a46a46。共 49 页 第 5 5 页 数组数组是一组有序的、类型相同的数据的集合,是一组有序的、类型相同的数据的集合,这些数据被称为这些数据被称为数组的元素数组的元素。共 49 页 第 6 6 页6.2 6.2 一维数组一维数组6.2.1 6.2.1 一维
4、数组的定义和引用一维数组的定义和引用1. 定义一维数组的一般方式:定义一维数组的一般方式: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式 ; ;说明:说明:l类型说明符:数组的类型类型说明符:数组的类型l常量表达式常量表达式:数组元素的个数,即数组元素的个数,即数组长度数组长度。必。必须是大于零的须是大于零的常量常量。不能进行动态定义。不能进行动态定义。l数组名同变量名命名规则相同。数组名同变量名命名规则相同。例如:例如: float mark100;float mark100; char str200; char str200; intint a10; a10;共 49 页 第
5、7 7 页2. 一维数组的引用一维数组的引用数组元素的使用与数组元素的使用与单个单个变量相同变量相同,可以自由地存取。,可以自由地存取。数组元素的表示形式:数组元素的表示形式: 数组名数组名 下标下标 如如a3其中,其中,下标可以是整型常量、整型变量或整型表达下标可以是整型常量、整型变量或整型表达式式。 如:如: a3= a0 + ai+1; 下标指出在数组中第几个元素例:例:main() int i,sum=0,a26; for(i=0;i26;i+) scanf(“%d”,&ai);sum=sum+ai; printf(%d,sum);共 49 页 第 8 8 页数组中的每个元素数组中的每
6、个元素在功能上在功能上等价于一个一般的变量。等价于一个一般的变量。例如:例如:输出输出100100个学生成绩,并求出总成绩。个学生成绩,并求出总成绩。l 引用数组元素的注意事项引用数组元素的注意事项: :float m100,sum=0;float m100,sum=0;for ( i=0; i100; i+ )for ( i=0; i100; i+ ) scanf(”%fn scanf(”%fn”, &”, &m mii );); sum +=sum += m mii ; ; 数组方式数组方式float x, sum=0;float x, sum=0;for (i=0; i100; i+)f
7、or (i=0; i100; i+) scanf(”%fn scanf(”%fn”, &x);”, &x); sum += x; sum += x; 简单变量简单变量85m0m1m2m99sumsum828563789063 851481482263167950优点:优点:数据重用数据重用 数据有序数据有序x xsumsum827950共 49 页 第 9 9 页mark0mark1mark2mark3. . . .mark9986.592.077.552.0. . . .94.02000H2004H2008H200CH。218CH引用数组元素时,根据首引用数组元素时,根据首地址和下标,自动计
8、算出地址和下标,自动计算出该元素的实际地址,取出该元素的实际地址,取出该地址的内容进行操作。该地址的内容进行操作。如引用如引用 mark2:(1)计算计算 2000+2* *4=2008(2)从从取出取出2008的内容的内容l下标与地址的关系下标与地址的关系 为下标运算符为下标运算符, , 数组数组名、数组元素是两种不同性名、数组元素是两种不同性质的数据。质的数据。 数组名是数组的首地址,数组名是数组的首地址,是一个地址常量。是一个地址常量。 数组元素则是数值。数组元素则是数值。共 49 页 第 1010 页方法:将初值依次写在花括号方法:将初值依次写在花括号 内。内。如:如: int a5=
9、 2 , 4 , 6 , 8 , 10 ;存储形式:存储形式:存储单元存储单元共 49 页 第 1111 页 (1)给数组中部分元素赋初值,其他元素按零值处理。给数组中部分元素赋初值,其他元素按零值处理。 如:如: int a9=1,2; 则则 a0= 1, a1= 2, a2a8值全为值全为0。(2) 对数组元素全部赋值可以不指定长度。 intint a=0,1,2,3,5 ; a=0,1,2,3,5 ;等价于:等价于:intint a5=0,1,2,3,5 ; a5=0,1,2,3,5 ; (3)初值的个数不能超过数组最大元素的个数)初值的个数不能超过数组最大元素的个数。 int a3=
10、1, 2,3, 4 ; 说明:说明:共 49 页 第 1212 页利用输入语句利用输入语句main() char as26; int i ; for(i=0; i26; i+) scanf(%c,&asi); .利用赋值语句利用赋值语句main() char as26,ch; for(ch=A;ch=Z;ch+) asch-A=ch; .共 49 页 第 1313 页 例例1 1 从键盘上输入从键盘上输入1010个实型数存入数组,然个实型数存入数组,然 后按输入顺序的逆序输出这后按输入顺序的逆序输出这1010个数。个数。main() float a10; int i; for(i=0 ; i=
11、0 ; i-) printf(“%10.2f”,ai);共 49 页 第 1414 页例例2 用用冒泡法冒泡法对数据进行排序(由小到大)。对数据进行排序(由小到大)。方法:将两个相邻数比较,小的调到前头。方法:将两个相邻数比较,小的调到前头。 9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 9由以上可推知:由以上可推知:6 个数要比较个数要比较5趟趟 第第一一趟中要进行两两比较趟中要进行两两比较5次次 第第二二趟中比较趟中比较 4次次 若有若有n个数,则要进行个数,则要进行n-1趟比较趟比较 第第 i趟
12、比较中要进行趟比较中要进行n-i次两两比较。次两两比较。共 49 页 第 1515 页#define N 6 main( ) int aN, i, j, n,t ; for( i=0; iN; i+) scanf(“%d”, &ai); for( i=0; iN-1; i+ ) for( j=1; jaj) t=aj-1; aj-1= aj;aj= t ; printf(“The sorted numbers: n”); for( i=0; iN; i+) printf(“%d ”, ai); n n个数比较个数比较n-1n-1趟趟第第i i趟比较趟比较n-in-i次次程序运行演示程序运行演示
13、共 49 页 第 1616 页例例 3 用数组来处理求用数组来处理求FibonacciFibonacci数列问题。数列问题。数学表示:数学表示:f(0)=f(1)=1, f(n)=f(n-2)+f(n-1)程序为:main( ) int i; int f20= 1, 1 ; for( i=2; i20 ;i+) fi= fi-2+fi-1; for( i=0; i20; i+) if( i%5= 0) printf(“n”); printf(“%12d” , fi ); 运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 25
14、84 4181 6765共 49 页 第 1717 页冒泡排序的缺陷:在比较交换的过程中大的数不能冒泡排序的缺陷:在比较交换的过程中大的数不能一次到位,效率低。一次到位,效率低。 选择排序法的基本思想:选择排序法的基本思想: 以冒泡排序法为基础,在两两比较后并不马上进行以冒泡排序法为基础,在两两比较后并不马上进行交换,而是在找到最小的数之后,记住最小数的位置交换,而是在找到最小的数之后,记住最小数的位置(在数组中的下标),待一轮比较完毕后,再将最小(在数组中的下标),待一轮比较完毕后,再将最小的数一次交换到位。的数一次交换到位。共 49 页 第 1818 页 问题问题 将将 2323、1 1、
15、0 0、4343、-3 -3 和和 7 7 从小到大排列。从小到大排列。 选择排序法选择排序法 若有若有N N个数,则需要进行个数,则需要进行N-1N-1轮排序处理。轮排序处理。 第第1 1轮轮排序从排序从1 1N N个数中找出最小的数,然后将它与个数中找出最小的数,然后将它与第第1 1个数交换。第个数交换。第1 1个数则是最小的数。个数则是最小的数。第第2 2轮轮排序从排序从2 2N N个数中找出最小的数,然后将它与个数中找出最小的数,然后将它与第第2 2个数交换。第个数交换。第2 2个数则是次小的数。个数则是次小的数。 经过经过 N-1 N-1 轮处理,完成全部轮处理,完成全部N N个数排
16、序。个数排序。 编程时使用二重循环。外面的大循环控制进行编程时使用二重循环。外面的大循环控制进行N-1N-1轮轮排序,小循环找出第排序,小循环找出第 i i 轮的最小值。轮的最小值。共 49 页 第 1919 页#define N 6main( ) int aN ,i, j,k,t; printf(Input numbers:n); for( i=0; iN; i+) scanf(%d, &ai); for( i=0;iN-1;i+ ) k=i; for(j=i+1;jaj) k=j; if(k!=i) t=ai; ai=ak;ak=t; printf(%The sorted numbers:
17、 n); for( i=0; iN; i+) printf(%d , ai); 程序运行演示程序运行演示共 49 页 第 2020 页 定义二维数组的一般方式:定义二维数组的一般方式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22; 例如例如 int a33 存储形式:存储形式: 二维数组在内存中是二维数组在内存中是按行的顺序存放按行的顺序存放的,即先的,即先存放第一行的元素,再存放第二行的元素。存放第一行的元素,再存放第二行的元素。 例如例如 float a34; float a34; 6.3 6.3 二维数组的定义和引用二维数组的定义和引用6.3.1
18、二维数组的定义二维数组的定义222120121110020100aaaaaaaaaa第一个下标可能取值的个数第二个下标可能取值的个数共 49 页 第 2121 页说明:说明:二维数组除了维数比一维数组多一维外,二维数组除了维数比一维数组多一维外, 其它性质与一维数组是全部类似的。其它性质与一维数组是全部类似的。 下面写法是否正确?下面写法是否正确? int a03; 用于定义数组长度的常量表达式的值必须用于定义数组长度的常量表达式的值必须是大于是大于0的正整数。的正整数。 int i=3 , j=4 ; int aij ; 定义数组元素的个数必须使用常量表达式,定义数组元素的个数必须使用常量表
19、达式,而不能使用变量。而不能使用变量。 共 49 页 第 2222 页6.3.2 二维数组的引用二维数组的引用 二维数组的引用二维数组的引用与引用一维数组元素一样,也用与引用一维数组元素一样,也用下标法引用二维数组元素。下标法引用二维数组元素。 二维数组元素表示形式:二维数组元素表示形式:数组名数组名下标下标1下标下标2 下标下标1和下标和下标2是整型常量、整型变量或整型表达是整型常量、整型变量或整型表达式。其编号是从式。其编号是从0开始的开始的。 例如:若有例如:若有 int a2*53*4, i=15; 则使用则使用 a3*30, a1i-5都是合法的。都是合法的。说明说明:数组名:数组名
20、a代表的是代表的是数组数组a在内存中的首地址在内存中的首地址, 因此,可以用数组名因此,可以用数组名a来代表数组元来代表数组元 素素a00的的地址。数组名是常量,不可对它赋值。地址。数组名是常量,不可对它赋值。共 49 页 第 2323 页6.3.3 二维数组的初始化二维数组的初始化数组定义时初始化采用方法如下:数组定义时初始化采用方法如下:(1)分行给二维数组赋初值。分行给二维数组赋初值。如:int a23= 2,3,1,1,2,3;将所有数据写在一个将所有数据写在一个 内,按顺序赋值内,按顺序赋值 即按数组元素在内存中排列的顺序赋初值。即按数组元素在内存中排列的顺序赋初值。 int a23
21、=2,3,1,1,2,3;共 49 页 第 2424 页(3)可以对部分元素赋值。可以对部分元素赋值。如: int a33=1,0,1,0,0,1;相当矩阵:100010001100000001如果对全部元素赋初值,第一维元素可省,但第二维元素不如果对全部元素赋初值,第一维元素可省,但第二维元素不可省。可省。 如:a34=0,1,3,1,2,1,0,2,1,1,2,0; 可写成 a 4=0,1,3,1,2,1,0,2,1,1,2,0; int a33=1, ,0,0,1;相当矩阵:int a23=5,6,7,8;int a23=5,6,7,8;例得到的数组为: 5 6 0 7 8 0得到的数组
展开阅读全文