c++5上海交大(针对谭浩强的书)

上传人:lil****ar 文档编号:281635271 上传时间:2022-04-24 格式:PPT 页数:86 大小:765.50KB
返回 下载 相关 举报
c++5上海交大(针对谭浩强的书)_第1页
第1页 / 共86页
c++5上海交大(针对谭浩强的书)_第2页
第2页 / 共86页
c++5上海交大(针对谭浩强的书)_第3页
第3页 / 共86页
c++5上海交大(针对谭浩强的书)_第4页
第4页 / 共86页
c++5上海交大(针对谭浩强的书)_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《c++5上海交大(针对谭浩强的书)》由会员分享,可在线阅读,更多相关《c++5上海交大(针对谭浩强的书)(86页珍藏版)》请在金锄头文库上搜索。

1、第五章第五章 数组数组计算机基础教学研究室计算机基础教学研究室C+语言程序设计1 前一页 休息主要内容主要内容l5.1 数组的概念数组的概念l5.2 一维数组的定义和引用一维数组的定义和引用l5.3 二维数组的定义和引用二维数组的定义和引用l5.4 用数组名作函数参数用数组名作函数参数l5.5 字符数组字符数组l*5.6 C+处理字符串的方法处理字符串的方法字符串类字符串类与字符串变量与字符串变量2概括地说:概括地说: 数组是有序数据的集合。要寻找一个数组中数组是有序数据的集合。要寻找一个数组中的某一个元素必须给出两个要素,即数组名和下标。的某一个元素必须给出两个要素,即数组名和下标。l 数组

2、名和下标唯一地标识一个数组中的一个元素。数组名和下标唯一地标识一个数组中的一个元素。l 数组是有类型属性的。同一数组中的每一个元素都必数组是有类型属性的。同一数组中的每一个元素都必须属于同一数据类型。须属于同一数据类型。l 一个数组在内存中占一片连续的存储单元。如果有一一个数组在内存中占一片连续的存储单元。如果有一个整型数组个整型数组a,则该数组在内存中的存储情况如图所示。则该数组在内存中的存储情况如图所示。5.1 数组的概念数组的概念数组名字是数组首元素的内存地址。数组名是一个常量,不能被赋值。a0 a1a2 a3 a4a5 a6 a7a8 a9a3 前一页 休息5.1 一维数组5.1.1

3、5.1.1 引引例例: 【例例5-(3)】求求N个个学学生生的的平平均均成成绩绩,并并统统计计高高于于平平均均分分的的人人数数 。用以前所学知识实现:用以前所学知识实现:int k=0;float s,ave,sum=0;for(int i=0;is; sum=sum+s; ave=sum/100; for(i=0;is; if(save) k+; 用数组来实现:用数组来实现:int k=0;float s100,ave,sum=0;for(i=0;isi; sum=sum+si; ave=sum/100; for(i=0;iave)k+; 数组:一组数据类型相同的元素按一定顺序存放,构成的数

4、据集合。数组:一组数据类型相同的元素按一定顺序存放,构成的数据集合。4 前一页 休息5.1.25.1.2一维数组的定义、存储和初始化一维数组的定义、存储和初始化 1. 定义形式定义形式 数据类型数据类型 数组名数组名整型常量表达式整型常量表达式; 如:如: int s5; s0 s1 s2 s3 s4 下标从下标从0开始开始 数组名是常量,表示数组在内存中的首地址。数组名是常量,表示数组在内存中的首地址。 数组长度应该为整型常量表达式,数组长度应该为整型常量表达式,不能是变量不能是变量。如:。如: s正确:正确: const int s=10; int as; float f5; 错误:错误:

5、 int s=10; int as; float b3.4 5 前一页 休息2. 数组的初始化数组的初始化 1) 给所有元素赋初值。给所有元素赋初值。 如:如:int a5=0,2,4,6,8; 或或 int a =0,2,4,6,8; 2) 给部分元素赋初值。如:给部分元素赋初值。如:int a10=1,3,5,7,9; 花括号内列出的值赋给了前面的若干个元素,花括号内列出的值赋给了前面的若干个元素,其余元素系统自动赋其余元素系统自动赋0 。 花括号花括号错误错误: int a10; a=1,3,5,7,9; /数组名是个地址常量,不能被赋值。数组名是个地址常量,不能被赋值。 int a10

6、; a10=1,3,5,7,9; /a10不是数组中的元素,不能用花括号为一个元素赋多个值。不是数组中的元素,不能用花括号为一个元素赋多个值。 int c3=1,2, 3,4; /常量个数超过数组定义的长度。常量个数超过数组定义的长度。6 前一页 休息5.1.3 数组元素的引用和基本操作1数组元素的引用 形式:数组名下标 相当于一个普通变量如有:如有: intint a10=1,2,3,4,5,6,7,8,9,10,b10,i(2) a10=1,2,3,4,5,6,7,8,9,10,b10,i(2);则:则: a3=a0+aia3=a0+ai; coutcouta2+ia2+i; coutco

7、utaa3aa3; couta10; /数组下标越界数组下标越界 couta; /对数组一般不能作为一个整体进行操作对数组一般不能作为一个整体进行操作 b=a;7 前一页 休息2基本操作基本操作 假设有定义:假设有定义:int aN; N是已定义过的符号常量。是已定义过的符号常量。(1) 数组元素的输入数组元素的输入for(j=0; jaj;(2)通过随机函数通过随机函数rand()产生产生0 0100100的的N N个数据个数据 for ( i = 0; iN;i+) /rand()函数产生函数产生032767之间的整数之间的整数 ai = int(rand()/32768.* 101);

8、ai = int(rand()/32768.* 101); (3) 数组元素的求和数组元素的求和 sum=0; for(j=0; jN; j+)sum+=aj; (4) 求数组中的最大元素求数组中的最大元素 max=a0; /假设第一个元素值最大假设第一个元素值最大 for(j=1; jmax)max=aj;8 前一页 休息(5) 求最大元素下标求最大元素下标 imax=0; /imaximax代表最大元素下代表最大元素下标标 for (j=1;jaimax)imax=j;(6) 将最大元素放于某一特定位置将最大元素放于某一特定位置(如放在最前头如放在最前头) imax=0; for(j=1;

9、jaimax)imax=j; if(imax!=0) t=a0;a0=aimax;aimax=t;9例例5.2 用数组来处理求用数组来处理求Fibonacci数列问题。数列问题。可以用可以用20个元素代表数列中的个元素代表数列中的20个数,从第个数,从第3个数开始,个数开始,可以直接用表达式可以直接用表达式fi=fi-2+fi-1求出各数。求出各数。程序如下:程序如下:#include #include using namespace std;int main( ) int i; int f20=1,1; /f0=1,f1=1 for(i=2;i20;i+)fi=fi-2+fi-1; /在在i

10、的值为的值为2时,时,f2=f0+f1,依此类推,依此类推5.1.4 一维数组程序举例一维数组程序举例10for(i=0;i20;i+) /此循环的作用是输出此循环的作用是输出20个数个数 if(i%5=0) coutendl; /控制换行,每行输出控制换行,每行输出5个数据个数据 coutsetw(8)fi; /每个数据输出时占每个数据输出时占8列宽度列宽度 coutendl; /最后执行一次换行最后执行一次换行 return 0;运行结果如下:运行结果如下:(空一行)(空一行) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610987 1597 2584

11、4181 676511 前一页 休息5.1.4 数组排序 排序是将一组数按递增或递减的次序排列,如按学生的成绩、排序是将一组数按递增或递减的次序排列,如按学生的成绩、球赛积分等排序。常用的算法有球赛积分等排序。常用的算法有: : 选择法选择法 () 冒泡法冒泡法 () 插入法插入法 快速排序法快速排序法 . 12 前一页 休息多种排序算法多种排序算法l 几种简单的排序算法几种简单的排序算法 直接插入排序直接插入排序 冒泡排序冒泡排序 直接选择排序直接选择排序l几种快速的排序方法几种快速的排序方法 快速排序快速排序 树形选择排序树形选择排序 堆排序堆排序 归并排序归并排序 基数排序基数排序13

12、前一页 休息 多种排序算法的比较多种排序算法的比较14 前一页 休息1. 选择法排序选择法排序基本思想基本思想: (1) 从从n个数的序列中选出最小的数个数的序列中选出最小的数(递增递增),与第,与第1个数交换位置;个数交换位置;(2) 除第除第1个数外,其余个数外,其余n-1个数再按个数再按(1)的方法选出次小的数,与第的方法选出次小的数,与第2个数交换位置个数交换位置;(3) 重复重复(1)n-1遍,最后构成递增序列。遍,最后构成递增序列。【例例5.25.2】对存放在数组中的对存放在数组中的6个数,用选择法按递增排序。个数,用选择法按递增排序。 下标下标 0 15 1 25 2 35 3

13、45 4 5for( i= 0;i5;i+) min= i; for(j=i+1;j6;j+) if(ajamin)min= j; if(i!=min) temp=ai; ai= amin; amin=temp; 15例例5.3 编写程序,用起泡法对编写程序,用起泡法对10个数排序个数排序(按由小到大顺序按由小到大顺序)。起泡法的思路是:将相邻两个数比较,将小的调到前头。起泡法的思路是:将相邻两个数比较,将小的调到前头。见图见图5.2。然后进行第然后进行第2趟比较,对余下的前面趟比较,对余下的前面5个数按上法进行比较,个数按上法进行比较,见图见图5.3。 图图5.2 图图5.316可以推知,如

14、果有可以推知,如果有n个数,则要进行个数,则要进行n-1趟比较趟比较(和交换和交换)。在第在第1趟中要进行趟中要进行n-1次两两比较,在第次两两比较,在第j趟中要进行趟中要进行n-j次两次两两比较。两比较。根据以上思路写出程序,今设根据以上思路写出程序,今设n=10,本例定义数组长度为本例定义数组长度为11,a0不用,只用不用,只用a1a10,以符合人们的习以符合人们的习惯。从前面的叙述可知,应该进行惯。从前面的叙述可知,应该进行9趟比较和交换。趟比较和交换。#include using namespace std;int main( ) int a11; int i,j,t; coutinp

15、ut 10 numbers :endl; for (i=1;iai; coutendl; for (j=1;j=9;j+) /共进行共进行9趟比较趟比较 for(i=1;iai+1) /如果前面的数大于后面的数如果前面的数大于后面的数 t=ai;ai=ai+1;ai+1=t; /交换两个数的位置,使小数上交换两个数的位置,使小数上浮浮 coutthe sorted numbers :endl; for(i=1;i11;i+) /输出输出10个数个数 coutai ; coutendl; return 0;运行情况如下:运行情况如下:input 10 numbers:3 5 9 11 33 6

16、-9 -76 100 123 the sorted numbers:-76 -9 3 5 6 9 11 33 100 12319 前一页 休息5.2 二维数组5.2.1 二维数组的定义和初始化 1. 数组的定义 形式: 数据类型 数组名常量表达式1常量表达式2; 如: float a23;a00 a01 a02 a10 a11 a12 以以“先行后列先行后列”的规则连续存放的规则连续存放: : 序号:序号: 0 1 2 3 4 5序号序号= =当前行号当前行号* *每行列数每行列数+ +当前列号当前列号21 前一页 休息l存储顺序存储顺序按行存放,上例中数组a的存储顺序为:l二维数组的声明二维数组的声明类型说明符 数组名常量表达式1常量表达式2例如:float a34;a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23a0a00 a01 a02 a03a1a10 a11 a12 a13a2a20 a21 a22 a23a可以理解为:l引用引用例如:b12=a23/2下标不要越界下标不要越界下标不要越界下标不要越界5.2.2 二维数组的引用二维

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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