C++大学教程-数组与C++标准库类模板.ppt
《C++大学教程-数组与C++标准库类模板.ppt》由会员分享,可在线阅读,更多相关《C++大学教程-数组与C++标准库类模板.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+大学教程 2007.9第七章第七章 数组与数组与C+标准库类模板标准库类模板数组数组数组声明数组声明,初始化初始化,引用引用字符数组字符数组数组传递给函数数组传递给函数数组存储数组存储,排序排序,查找查找多维数组多维数组C+标准库标准库-vector类模板类模板总结总结1C+大学教程 2007.9数组的用途数组的用途v程序设计要处理的数据往往是许多数据而非简单的程序设计要处理的数据往往是许多数据而非简单的几个数据几个数据,对单个数据分别声明变量显露其局限性对单个数据分别声明变量显露其局限性 例如,如果要处理例如,如果要处理3个学生考试成绩,我们可以声个学生考试成绩,我们可以声明明:int
2、grade0,grade 1,grade2;但如果有很多成绩但如果有很多成绩(例例100个个),该怎么办?,该怎么办?v对一组由相同类型数据组成的数据集合使用对一组由相同类型数据组成的数据集合使用数组数组2C+大学教程 2007.9数组的特征数组的特征v有序性:数组中的所有元素都有自身的有序性:数组中的所有元素都有自身的序号序号0,1,2v相同类型:全部是整数、浮点数、字符相同类型:全部是整数、浮点数、字符型,也可以数组的数组(一维数组、二型,也可以数组的数组(一维数组、二维数组、多维数组)维数组、多维数组),后面所说数组是后面所说数组是特指一维数组。特指一维数组。3C+大学教程 2007.9
3、第七章第七章 数组与数组与C+标准库类模板标准库类模板数组数组数组声明数组声明,初始化初始化,引用引用字符数组字符数组数组传递给函数数组传递给函数数组存储数组存储,排序排序,查找查找多维数组多维数组C+标准库标准库-vector类模板类模板总结总结4C+大学教程 2007.9一维数组的声明一维数组的声明 int a 5 ;数据类型数据类型数组名数组名数组元素的个数数组元素的个数:必须是正值常量表达式,编译时就知值见到数组声明后,编译器保留恰当容量内存,可以存储5个整型变量,每个变量有自己的表示方式:a0,a1,a2,a3,a45C+大学教程 2007.9内存空间占用情况内存空间占用情况 int
4、 a5;1、设一个、设一个int需要占用需要占用4个字节的空间个字节的空间 2、存放、存放a0的地址为的地址为1000,此时,此时1000被成为数组被成为数组a的的基地址基地址a0a1a2a3a4值值78111623地址地址100010041008101210166C+大学教程 2007.9初始化初始化v声明数组时可以对数组初始化声明数组时可以对数组初始化 float x5=-1.1,0.2,33.0,4.4,5.05;v初始化表的长度短于要被初始化的数组元素数目,那初始化表的长度短于要被初始化的数组元素数目,那么么剩余剩余元素被初始化为元素被初始化为0。取巧。取巧 int a10=0.v外部
5、或静态数组没有被初始化,系统自动把所有元素外部或静态数组没有被初始化,系统自动把所有元素初始化为初始化为0。v没有被初始化的没有被初始化的自动自动或或常量常量数组含有的值是数组含有的值是无用无用的。的。v数组的存储类型数组的存储类型不不能是能是寄存器寄存器类型。类型。初始化表初始化表7C+大学教程 2007.9初始化初始化vint a =2,3,4,5vint a4=2,3,4,5当数组大小被省略当数组大小被省略,编译器计算初始化表中编译器计算初始化表中元素个数来确定数组元素的个数元素个数来确定数组元素的个数8C+大学教程 2007.9使用一维数组使用一维数组例:对数组赋值例:对数组赋值(也达
6、到初始化目的也达到初始化目的)#include const int N=5int main(void)int aN;int i,sum=0;for(i=0;i N;+i)ai=7+i*i;return 0;数组有效的下标为:0,1,2,3,40,1,(N-1)常量声明数组大小常量声明数组大小9C+大学教程 2007.9/Fig.7.3:fig07_03.cpp/Initializing an array.#include using std:cout;using std:endl;#include using std:setw;int main()int n 10;/n is an array
7、 of 10 integers /initialize elements of array n to 0 for(int i=0;i 10;i+)n i =0;/set element at location i to 010C+大学教程 2007.9cout Element setw(13)Value endl;/output each array elements value for(int j=0;j 10;j+)cout setw(7)j setw(13)n j endl;return 0;11C+大学教程 2007.9下标下标vint asize,下标表示该元素距数组起始地址的下标表
8、示该元素距数组起始地址的位移是多少位移是多少.故第一个元素的下标为故第一个元素的下标为0.v数组下标范围数组下标范围 0,size-1v下标越界下标越界 a-1,asizev 注意:编译器并不检查在给定的数组中下标注意:编译器并不检查在给定的数组中下标是否有效,越界问题必须由编程人员自己解决。是否有效,越界问题必须由编程人员自己解决。下标或索引12C+大学教程 2007.9应用范例片段应用范例片段v声明一个数组声明一个数组,用一个循环初始化数组用一个循环初始化数组 int n10;for(int i=0;i10;i+)ni=0;13C+大学教程 2007.9应用范例片段应用范例片段v求数组元素
9、之和求数组元素之和 int n10=32,27,64,18,95,14,90,70,60,37;total=0;for (int i=0;i10;i+)total+=ni;14C+大学教程 2007.9应用范例应用范例v使用不同计数器跟踪一个筛子各个面出使用不同计数器跟踪一个筛子各个面出现的次数现的次数 分析分析:筛子有筛子有6个面个面,需要需要6个计数器个计数器,这里这里可以用一个含有可以用一个含有6个分量的数组个分量的数组,为了和为了和筛子上的数字对应筛子上的数字对应,浪费一个分量浪费一个分量:0下下标分量标分量,声明数组含声明数组含7个分量个分量.int frequency7 如当前掷出
10、如当前掷出5,则则frequency5+;15C+大学教程 2007.9/Fig.7.10:fig07_10.cpp/Roll a six-sided die 6,000,000 times.#include using std:cout;using std:endl;#include using std:setw;#include using std:rand;using std:srand;#include using std:time;16C+大学教程 2007.9int main()const int arraySize=7;/ignore element zero int frequ
11、ency arraySize =0;srand(time(0);/seed random number generator /roll die 6,000,000 times;use die value as frequency index for(int roll=1;roll=6000000;roll+)frequency 1+rand()%6+;cout Face setw(13)Frequency endl;/output each array elements value for(int face=1;face arraySize;face+)cout setw(4)face set
12、w(13)frequency face string2;输入时以空格为终止输入时以空格为终止,并在数组后自动加空字并在数组后自动加空字符符0;注意输入时长度不要超过数组声明注意输入时长度不要超过数组声明时的大小时的大小,这里为这里为19.否则系统并不会检查否则系统并不会检查.输出输出:cout string2;25C+大学教程 2007.9例子例子:用字符串文字初始化一个字符数组用字符串文字初始化一个字符数组,读入一个读入一个字符串到一个字符数组字符串到一个字符数组,将字符数组作为一个将字符数组作为一个字符串打印字符串打印/Treating character arrays as string
13、s.#include using std:cout;using std:cin;using std:endl;26C+大学教程 2007.9例子例子:int main()char string1 20;/reserves 20 characters char string2=string literal;/reserves 15 characters /read string from user into array string1 cout string1;/reads hello space terminates input /output strings cout string1 is:
14、string1 nstring2 is:string2;cout nstring1 with spaces between characters is:n;27C+大学教程 2007.9例子例子:/output characters until null character is reached for(int i=0;string1 i !=0;i+)cout string1 i string1;/reads there cout nstring1 is:string1 endl;return 0;28C+大学教程 2007.9Static 局部数组局部数组 v 像其他局部变量一样像其他局部
15、变量一样,数组也可以声称为数组也可以声称为static,函数中定义的函数中定义的static 数组在程序运数组在程序运行其间一直存在行其间一直存在,但只在该函数体内可见但只在该函数体内可见.v当第一次遇见当第一次遇见static数组的声明时数组的声明时,程序就程序就初始化它们初始化它们,非第一次则不再执行初始化非第一次则不再执行初始化.v当第一次遇见当第一次遇见static数组的声明时数组的声明时,程序如程序如果没有显式地初始化果没有显式地初始化,编译器自动将其初编译器自动将其初始化为始化为0.29C+大学教程 2007.9第七章第七章 数组与数组与C+标准库类模板标准库类模板数组数组数组声明
16、数组声明,初始化初始化,引用引用字符数组字符数组数组传递给函数数组传递给函数数组存储数组存储,排序排序,查找查找多维数组多维数组C+标准库标准库-vector类模板类模板总结总结30C+大学教程 2007.9数组传递给函数数组传递给函数v要给一个函数传递一个数组实参要给一个函数传递一个数组实参,需指定数组需指定数组名名,且不带方括号且不带方括号,并将数组的大小也传递给并将数组的大小也传递给函数函数.如如 int data24 sum(data,24)v数组名实际上是数组在内存中的起始地址数组名实际上是数组在内存中的起始地址,函函数由第一个参数获得了数组在内存中的地址数由第一个参数获得了数组在内
17、存中的地址.函数的第一个参数传递是函数的第一个参数传递是按引用传递按引用传递v函数在函数体中修改数组元素时函数在函数体中修改数组元素时,实际是在数实际是在数组的原始内存位置上修改其值组的原始内存位置上修改其值31C+大学教程 2007.9数组作为函数参数数组作为函数参数vint sum(int a,int n)int i,s=0;for(i=0;in;+i)s+=ai;return s;数组数组a作为参数作为参数 标示数组的大小标示数组的大小 32C+大学教程 2007.9数组作为函数参数数组作为函数参数conct int N=5;int main(void)int i,total;int v
18、aluesN;for(i=0;iN;+i)valuesi=i;total=sum(values,N);return 0;数组数组values传递给函数传递给函数 01234ivaluesmaintotal33C+大学教程 2007.9数组传递的是地址数组传递的是地址conct int N=5;int main(void)int i,total;int valuesN;for(i=0;iN;+i)valuesi=i;total=sum(values,N);return 0;01234ivaluesint sum(int a,int n)int i,s=0;for(i=0;in;+i)s+=ai;
19、return s;nsa5itotaltotal=?1034C+大学教程 2007.9数组传递的是地址数组传递的是地址conct int N=5;int main(void)int i,total;int valuesN;for(i=0;iN;+i)valuesi=i;total=sum(&values1,N-2);return 0;01234ivaluesint sum(int a,int n)int i,s=0;for(i=0;in;+i)s+=ai;return s;nsa3itotaltotal=?635C+大学教程 2007.9数组元素传递的是值数组元素传递的是值conct int
20、N=5;int main(void)int i,total;int valuesN;for(i=0;iN;+i)valuesi=i;total=sum(values2,N-2);return 0;01234ivaluesint sum(int a,int n)int i,s=1;for(i=0;in;+i)s*=a;return s;nsa3itotaltotal=?8236C+大学教程 2007.9在函数中修改数组原有的值在函数中修改数组原有的值conct int N=5;int main(void)int i;int valuesN;for(i=0;iN;+i)valuesi=i;setA
21、rray(values,N);return 0;99999ivaluesvoid setArray(int a,int n)int i;for(i=0;in;+i)ai=9;na5itotal37C+大学教程 2007.9如何在函数中保护数组原有的值如何在函数中保护数组原有的值?conct int N=5;int main(void)int i,total;int valuesN;for(i=0;iN;+i)valuesi=i;total=sum(values,N);return 0;01234ivaluesint sum(const int a,int n)int i,s=0;for(i=0
22、;in;+i)s*=a;a0=9;X return s;nsa5itotaltotal=?1038C+大学教程 2007.9实例实例:用数组改造后的用数组改造后的GradeBook类类vGradeBook类表示一个教授使用的成绩类表示一个教授使用的成绩薄薄,用来存储和分析学生的成绩用来存储和分析学生的成绩v现在改造原有的现在改造原有的GradeBook类类,改变方改变方法为法为:在类的数据成员中使用一个数组在类的数据成员中使用一个数组存储所有学生的成绩存储所有学生的成绩vGradeBook类声明如下类声明如下:39C+大学教程 2007.9#include /program uses C+St
23、andard Library string classusing std:string;/GradeBook class definitionclass GradeBookpublic:/constant-number of students who took the test const static int students=10;/note public data 40C+大学教程 2007.9 /constructor initializes course name and array of grades GradeBook(string,const int );/function t
24、o set the course name void setCourseName(string);/function to retrieve the course name string getCourseName();/display a welcome message void displayMessage();/perform various operations on the grade data void processGrades();41C+大学教程 2007.9 int getMinimum();/find the minimum grade for the test int
25、getMaximum();/find the maximum grade for the test double getAverage();/determine the average grade for the test void outputBarChart();/output bar chart of grade distribution void outputGrades();/output the contents of the grades arrayprivate:string courseName;/course name for this grade book int gra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 大学 教程 数组 标准 模板
限制150内