第六讲 数组指针与字符串_第1页
第六讲 数组指针与字符串_第2页
第六讲 数组指针与字符串_第3页
第六讲 数组指针与字符串_第4页
第六讲 数组指针与字符串_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+语言程序设计语言程序设计第六章第六章 数组、指针与字符串数组、指针与字符串C+语言程序设计2本章主要内容本章主要内容n数组数组n指针指针n动态存储分配动态存储分配n字符串字符串C+语言程序设计3数组的概念数组的概念n数组是具有一定顺序关系的若干相同类型数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数变量的集合体,组成数组的变量称为该数组的元素。组的元素。n数组属于构造类型。数组属于构造类型。C+语言程序设计4一维数组的声明与引用一维数组的声明与引用n一维数组的声明一维数组的声明类型说明符类型说明符 数组名数组名常量表达式常量表达式;例如:例如:int a10;表示表

2、示 a 为整型数组,有为整型数组,有10个元素:个元素:a0 . a9.n说明:说明:n数组名要符合数组名要符合 C+标识符的命名规则;标识符的命名规则;n必须先声明,后使用;必须先声明,后使用;n只能逐个引用数组元素,而不能一次引用整个只能逐个引用数组元素,而不能一次引用整个数组数组例如:例如:a0 = a5 + a7 - a2*3数 组例例6. 1 一维数组的声明与引用一维数组的声明与引用#include using namespace std;void main( ) int A10, B10, i; for(i = 0; i 10; i+) Ai = i*2 - 1; B9-i = A

3、i; for(i = 0; i 10; i+) cout A i = Ai;cout , B i = Bi;cout endl; C+语言程序设计6一维数组的存储一维数组的存储n数组元素在内存中顺次存放,它们的地址是连数组元素在内存中顺次存放,它们的地址是连续的(这种存储方式称为续的(这种存储方式称为顺序存储顺序存储)。)。n例如:具有例如:具有 10 个元素的数组个元素的数组 a,在内存中的,在内存中的存放次序如下:存放次序如下:数 组a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 1)数组名字是数组首元素的内存地址;)数组名字是数组首元素的内存地址; 2)数组名是一个常量,不能

4、被赋值。)数组名是一个常量,不能被赋值。C+语言程序设计7一维数组的初始化一维数组的初始化n可以在编译阶段使数组得到初值:可以在编译阶段使数组得到初值:n在声明数组时对数组元素赋以初值。在声明数组时对数组元素赋以初值。例如:例如:int a10=0, 1, 2, 3, 4, 5, 6, 7, 8, 9;n可以只给一部分元素赋初值。可以只给一部分元素赋初值。例如:例如:int a10 = 0, 1, 2, 3, 4;n在对全部数组元素赋初值时,可以不指定数组长在对全部数组元素赋初值时,可以不指定数组长度。度。例如:例如:int a = 1, 2, 3, 4, 5数 组C+语言程序设计8例:用数组

5、来处理求例:用数组来处理求 Fibonacci 数列问题数列问题#includeusing namespace std;void main( ) int i; int f20 = 1, 1; / 初始化第初始化第 0、1 个元素个元素 for(i = 2; i 20; i+)/ 求第求第 2 19 个数个数 fi = fi-2 + fi-1;数 组C+语言程序设计9例:用数组来处理求例:用数组来处理求 Fibonacci 数列问题数列问题 for(i = 0; i 20; i+) / 输出,每行输出,每行5个数个数 if(i%5=0) cout endl; cout.width(12); /

6、设置输出宽度为设置输出宽度为12 cout fi; 数 组C+语言程序设计10运行结果:运行结果:数 组 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765C+语言程序设计11一维数组应用举例一维数组应用举例n循环从键盘读入若干组选择题答案,计算并输循环从键盘读入若干组选择题答案,计算并输出每组答案的正确率,直到输入出每组答案的正确率,直到输入ctrl+z为止。为止。n每组连续输入每组连续输入5个答案,每个答案可以是个答案,每个答案可以是 a、 b、 c 或或 d。数 组#include using namesp

7、ace std;void main(void) char key = a, c, b, a, d, c; int ques = 0, numques = 5, numcorrect = 0; coutEnter the numques question tests:endl; while (cin.get(c) if (c != n) if (c = keyques) numcorrect+; cout ; else cout *; else cout Score float(numcorrect)/numques*100 %; ques = 0; / reset variables numc

8、orrect = 0; cout endl; continue; ques+; /while运行结果:运行结果:acbba * Score 60%acbad Score 100%abbda * * Score 40%bdcba* Score 0%C+语言程序设计15二维数组的声明二维数组的声明n声明格式:声明格式:数据类型数据类型 标识符标识符常量表达式常量表达式1常量表达式常量表达式2;n例例:int a53;n说明:说明:n表示表示 a 为整型二维数组,其中第一维有为整型二维数组,其中第一维有 5 个下个下标标 (04),第二维有,第二维有 3 个下标个下标 (02);n数组的元素个数为数

9、组的元素个数为15,可以用于存放,可以用于存放 5 行行 3 列的整型数据表格;列的整型数据表格;n数学上被理解为一个矩阵。数学上被理解为一个矩阵。数 组C+语言程序设计16二维数组的存储与使用二维数组的存储与使用n存储顺序存储顺序n按行存放,上例中数组按行存放,上例中数组 a 的存储顺序为:的存储顺序为:数 组a0a00 a01 a02 a03a1a10 a11 a12 a13a2a20 a21 a22 a23a :a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23n可看做由可看做由 3 个一维数组构成的数组:个一维数组构成的数组:n引用:引用:例

10、如:例如:a12 = a23/2C+语言程序设计17二维数组的初始化二维数组的初始化n将所有数据写在一个将所有数据写在一个 内,按顺序赋值内,按顺序赋值例如:例如:int a23 = 1, 2, 3, 4, 5, 6;n分行给二维数组赋初值分行给二维数组赋初值例如:例如:int a23 = 1, 2, 3, 4, 5, 6;n可以对部分元素赋初值可以对部分元素赋初值例如:例如:int a23 = 1, 0, 6, 2;数 组C+语言程序设计18数组作为函数参数数组作为函数参数n数组元素作实参,与单个变量一样。数组元素作实参,与单个变量一样。n数组名作参数,形、实参数都应是数组名,类数组名作参数

11、,形、实参数都应是数组名,类型要一样,传送的是数组首地址。型要一样,传送的是数组首地址。n对形参数组的改变会直接影响到实参数组。对形参数组的改变会直接影响到实参数组。数 组例例 使用数组名作为函数参数使用数组名作为函数参数#include using namespace std;int sum(int a , int n);void main( ) int a5 = 1, 2, 3, 4, 5, i;for(i = 0; i 5; i+) cout ai ;cout nsum = sum(a, 5) endl;int sum(int a , int n) int s = 0, i;for(i

12、= 0; i n; i+)s += ai;return s;运行结果:运行结果:1 2 3 4 5sum = 15C+语言程序设计21例例6-2 使用数组名作为函数参数使用数组名作为函数参数n主函数中初始化一个矩阵并将每个元素都输主函数中初始化一个矩阵并将每个元素都输出;出;n然后,调用子函数,分别计算每一行的元素然后,调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中;之和,将和直接存放在每行的第一个元素中;n返回主函数之后输出各行元素的和。返回主函数之后输出各行元素的和。数 组#include using namespace std;void RowSum(int A

13、4, int nrow);void main(void) int Table34 = 1, 2, 3, 4, 2, 3, 4, 5, 3, 4, 5, 6;for(int i = 0; i 3; i+) for(int j = 0; j 4; j+)cout Tableij ;cout endl;RowSum(Table, 3);/ 数组名字做实参数组名字做实参 for(int i = 0; i 3; i+) cout Tablei0;void RowSum(int A4, int nrow) / 形参定义形参定义int sum;for(int i = 0; i nrow; i+) sum =

14、 0;for(int j = 0; j 4; j+) sum += Aij;cout Sum of row i is sum endl; Ai0 = sum; 运行结果:运行结果:1 2 3 42 3 4 53 4 5 6Sum of row 0 is 10Sum of row 1 is 14Sum of row 2 is 1810 14 18C+语言程序设计25对象数组对象数组n声明:声明:类名类名 对象数组名对象数组名元素个数元素个数;n访问方法:通过下标访问访问方法:通过下标访问对象数组名对象数组名下标下标.成员名成员名数 组C+语言程序设计26对象数组初始化对象数组初始化n数组中每一个

15、元素对象被创建时,系统都会调数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。用类构造函数初始化该对象。n通过初始化列表赋值。通过初始化列表赋值。n例:例:Point A2 = Point(1, 2), Point(3, 4) ;n如果没有为数组元素指定显式初始值,数组元如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)。素便使用默认值初始化(调用默认构造函数)。数 组C+语言程序设计27数组元素所属类的构造函数数组元素所属类的构造函数n不声明构造函数,则采用默认构造函数。不声明构造函数,则采用默认构造函数。n各元素对象的初值要求为相同的值时,可以

16、声各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。明具有默认形参值的构造函数。n各元素对象的初值要求为不同的值时,需要声各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。明带形参的构造函数。n当数组中每一个对象被删除时,系统都要调用当数组中每一个对象被删除时,系统都要调用一次析构函数。一次析构函数。数 组C+语言程序设计28例例6-3 对象数组应用举例对象数组应用举例/Point.h#ifndef _POINT_H#define _POINT_H#include using namespace std; class Point private:int X, Y;p

17、ublic:Point( ); Point(int xx, int yy); Point( );void Move(int x, int y);int GetX( ) return X;int GetY( ) return Y;#include Point.cpp#endif/Point.cpp#ifndef _POINT_CPP#define _POINT_CPP#includeusing namespace std;#include Point.hPoint:Point( ) : X(0), Y(0) cout Default Constructor called. endl;Point:Point(int xx, int yy) : X(xx), Y(yy) cout Constructor called. endl;Point :Point( ) cout Destructor called. endl; void Point : Move(int x, int y) : X(x), Y(y) #endif/ TestPoint.cpp#include#include Point

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论