C,VC++程序设计3.ppt
《C,VC++程序设计3.ppt》由会员分享,可在线阅读,更多相关《C,VC++程序设计3.ppt(62页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第四部分第四部分第四部分第四部分 数组、指针数组、指针数组、指针数组、指针(第四、七章)(第四、七章)(第四、七章)(第四、七章)C+语言程序设计C+语言程序设计数组数组数组数组是具有一定顺序关系顺序关系的若干相同类相同类型型变量的集合体,数组属于自定义类型,用于存储和处理大量相同类型相同类型的数据。组成数组的变量称为该数组的元素元素。数组常分为一维数组一维数组、二维数组二维数组2C+语言程序设计一维数组的声明与引用一维数组的声明与引用 语法:类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例如:int a10;表示 a 为整型数组,有10个元素:a0.a9引用:不能越界不能越界!必
2、须先声明,后使用。只能逐个引用数组元素,而不能一次引用整个数组例:a0=a5+a7-a2*33C+语言程序设计例例6.1.cpp#include using namespace std;int main()int A10,B10;int i;for(i=0;i10;i+)Ai=i*2-1;B10-i-1=Ai;for(i=0;i10;i+)coutAi =Ai;cout Bi=Biendl;4C+语言程序设计数组元素在内存中顺次存放顺次存放,它们的地址地址是连续是连续的。例如:int a10数组名字数组名字是数组首元素首元素的内存地址内存地址。数组名是一个常量常量,不能被赋值。一维数组的存储顺
3、序一维数组的存储顺序a0a1 a2a3a4 a5a6a7a8a9a5C+语言程序设计一维数组的初始化一维数组的初始化可以在编译阶段使数组得到初值:在声明数组时对数组元素赋以初值。static int a10=0,1,2,3,4,5,6,7,8,9;可以只给一部分元素赋初值。static int a10=0,1,2,3,4;在对全部数组元素赋初值时,可以不指定数组长度。static int a=1,2,3,4,56C+语言程序设计【问题】循环从键盘读入若干组选择题答案,计算并输出每组答案的正确率,直到输入ctrl+z为止。正确答案为acbad。每组连续输入5个答案,每个答案可以是a.d。【运行结
4、果】acbbaacbba *ScoreScore 60%60%acbadacbad Score 100%Score 100%实例实例6-2.cpp7#include include using namespace std;using namespace std;int main()int main()charchar key=a,c,b,a,d;key=a,c,b,a,d;char c;char c;intint ques=0,numques=5,numcorrect=0;ques=0,numques=5,numcorrect=0;coutEnter the numques question
5、tests:endl;coutEnter the numques question tests:endl;while(cin.get(c)while(cin.get(c)if(c!=n)if(c!=n)if(c=keyques)if(c=keyques)numcorrect+;numcorrect+;cout ;cout ;elseelse cout*;cout*;elseelse cout Score cout Score float(numcorrect)/numques*100%;float(numcorrect)/numques*100%;ques=0;ques=0;numcorrec
6、t=0;numcorrect=0;cout endl;cout endl;continue;continue;ques+;ques+;88C+语言程序设计二维数组的声明及引用二维数组的声明及引用 数据类型 数组名常量表达式 常量表达式 例:int a34;存储顺序 按行行存放,上例中数组a的存储顺序为:引用 b12=a23/2a0a00 a01 a02 a03a0a00 a01 a02 a03a1a1 a10 a11 a12 a13a10 a11 a12 a13a2a20 a21 a22 a23a2a20 a21 a22 a23aa00 a01 a02 a03 a10 a11 a12 a13
7、a20 a21 a22 a23a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a239C+语言程序设计 将所有数据写在一个将所有数据写在一个 内,按顺序赋值内,按顺序赋值 static static intint a34=1,2,3,4,5,6,7,8,9,10,11,12;a34=1,2,3,4,5,6,7,8,9,10,11,12;(声明时才能这样(声明时才能这样赋值,)赋值,)错误例子:错误例子:a34=1,2,3,4,5,6,7,8,9,10,11,12;a34=1,2,3,4,5,6,7,8,9,10,11,12;(只能一个一个(只能一个一个赋
8、值)赋值)分行给二维数组赋初值分行给二维数组赋初值 static static intint a34 a34 =1,2,3,4,5,6,7,8,9,10,11,12;=1,2,3,4,5,6,7,8,9,10,11,12;可以对部分元素赋初值可以对部分元素赋初值 static static intint a34=1,0,6,0,0,11;a34=1,0,6,0,0,11;二维数组的初始化二维数组的初始化10C+语言程序设计数组作为函数参数数组作为函数参数数组元素数组元素作实参,与单个变量一样。数组名数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首首地址地址。对形参数组的改变会直
9、接影响直接影响到实参数组。11C+语言程序设计例例6-2.cpp【问题】编程实现在主函数中初始化一个矩阵并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,再输出各行元素的和。【运行结果】1 2 3 41 2 3 4 2 3 4 52 3 4 5 3 4 5 63 4 5 6 Sum of row 0 is 10Sum of row 0 is 10 Sum of row 1 is 14Sum of row 1 is 14 Sum of row 2 is 18Sum of row 2 is 1812#include include using name
10、space std;using namespace std;void RowSum(void RowSum(int A4,int A4,int nrow)int nrow)/数组作形参数组作形参 int sum;int sum;for(int i=0;i nrow;i+)for(int i=0;i nrow;i+)sum=0;sum=0;for(int j=0;j 4;j+)for(int j=0;j 4;j+)sum+=Aij;sum+=Aij;cout Sum of row i cout Sum of row i is sum endl;is sum endl;Ai0=sum;Ai0=su
11、m;1313int main()int main()int Table34=1,2,3,4,2,3,4,5,3,4,5,6;int Table34=1,2,3,4,2,3,4,5,3,4,5,6;for(int i=0;i 3;i+)for(int i=0;i 3;i+)for(int j=0;j 4;j+)for(int j=0;j 4;j+)cout Tableij ;cout Tableij ;cout endl;cout endl;RowSum(RowSum(TableTable,3);,3);/数组名作实参数组名作实参数组名作实参数组名作实参 for(int i=0;i 3;i+)f
12、or(int i=0;i 3;i+)cout Tableicout Tablei0 0 1414C+语言程序设计课堂练习课堂练习编辑实现求输入的10个学生成绩中最高分的学生学号及成绩?分析:所用到知识点有结构体、数组、函数(数组作参数)15C+语言程序设计对象数组对象数组数组的元素可是基本类型,可是自定义类型对象数组的元素是对象对象,有数据、函数成员声明:类名类名 数组名数组名元素个数元素个数;访问方法:通过下标访问 数组名数组名下标下标.成员名成员名16C+语言程序设计对象数组初始化对象数组初始化数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。通过初始化列表赋值初始化列表赋
13、值。Point A2=Point(1,2),Point(3,4);Point A2=Point(1,2),Point(3,4);如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)。17C+语言程序设计对象数组元素的构造函数对象数组元素的构造函数不声明构造函数,则采用默认构造函数各元素对象的初值要求为相同初值要求为相同的值时,可以声明具有默认形参值默认形参值的构造函数。各元素对象的初值要求为不同的值初值要求为不同的值时,需要声明带形参的带形参的构造函数。当数组中每一个对象被删除时,系统都要调用一次析构函数。18C+语言程序设计例例6-3.cpp#if!#if!def
14、ined(_POINT_Hdefined(_POINT_H)/)/Point.hPoint.h#define _POINT_H#define _POINT_Hclass Pointclass Point public:public:Point();Point();Point(intPoint(int xx,intxx,int yyyy););Point();Point();void void Move(intMove(int x,intx,int y);y);intint GetXGetX()return X;()return X;intint GetYGetY()return Y;()ret
15、urn Y;private:private:intint X,Y;X,Y;#endifendif19#include#include/6-2.cpp/6-2.cppusing namespace std;using namespace std;#include Point.h#include Point.hPoint:Point()Point:Point()X=Y=0;X=Y=0;coutcoutDefault Constructor called.Default Constructor called.endlendl;Point:Point(intPoint:Point(int xx,int
16、xx,int yyyy)X=xx;X=xx;Y=Y=yyyy;coutcout Constructor called.Constructor called.endlendl;Point:Point()Point:Point()coutcoutDestructor called.Destructor called.endlendl;void Point:void Point:Move(intMove(int x,intx,int y)y)X=x;Y=y;X=x;Y=y;2020#include#include#include Point.h#include Point.husing namesp
17、ace std;using namespace std;intint main()main()coutcoutEntering main.Entering main.endlendl;Point A2;Point A2;/对象数组对象数组 for(intfor(int i=0;i2;i+)i=0;i2;i+)Ai.Move(i+10,i+20Ai.Move(i+10,i+20);/);/对象数组元素对象数组元素 coutcoutExiting main.Exiting main.endlendl;return 0;return 0;/思考运行结果?思考运行结果?思考运行结果?思考运行结果?21
18、 运行结果:Entering main.Default Constructor called.Default Constructor called.Exiting main.Destructor called.Destructor called.21C+语言程序设计内存地址内存地址计算机内存中每个字节是一个基本存储单元,都有一个地址地址。C+从内存中存取数据的方式:1.通过变量名;2.通过地址。在变量获得内存空间的同时,变量名也就成为了相应内存空间的名称,在变量的整个生存期内都可以用该名字访问该内存空间。但若没有变量名或用变量名不方便时(如动态分配的内存单元),则只能通过地址访问22C+语言程
19、序设计指针指针指针指针也是一种数据类型数据类型,具有指针类型的变量称为指针变量。指针变量指针变量用于存放内存单元地址地址。通过变量名访问一个变量是直接的,而通过指针访问指针访问一个变量是间接间接的。声明形式:数据类型数据类型 *标识符;标识符;例:int*p/声明一个指向整型变量指针p数据类型可以是任意类型,表明了指针所指向的对象对象是何种类型。23C+语言程序设计“*”和和“&”“*”:定义时,表示声明一个指针变量;使用时,表示指针所指向的变量的值。“&”:取地址运算符,用来得到一个对象的地址,是一个一元操作符。注意区别:int*p;int r;coutp;m=&r;cout*p;m=?;*
20、m=?;24C+语言程序设计指针的赋值指针的赋值声明了一个指针变量,但此时指针中所具有的地址值还不具任何意义,需对指针进行赋值对指针赋值得方法:1.声明指针同时进行初始化,语法形式为:数据类型数据类型 *指针名指针名 初始地址;初始地址;例:int x;int*m=x;2.声明后单独使用赋值语句,语法形式为:指针名指针名 地址;地址;例:int*p;int x;p=&x;25C+语言程序设计内存用户数据区变量 i变量 j变量 i_pointer362000200020043010例:例:intint i=3,j=6;i=3,j=6;intint *i_pointeri_pointer=&i;=
21、&i;指针变量的存储指针变量的存储200020003 3i_pointeri_pointer*i_pointer*i_pointeri i26C+语言程序设计例例6-5.cpp#include#include using namespace std;using namespace std;intint main()main()intint*i_pointeri_pointer;/声明声明intint型指针型指针i_pointeri_pointer intint i;/i;/声明声明intint型数型数i i i_pointeri_pointer=&i;/=&i;/取取i i的地址赋给的地址赋给
22、i_pointeri_pointer i=10;/int i=10;/int型数赋初值型数赋初值 coutcoutOutput Output intint i=i i=iendlendl;/;/输出输出intint型数的值型数的值 coutcoutOutput Output intint pointer i=*pointer i=*i_pointeri_pointerendlendl;/输出输出intint型指针所指地址的内容型指针所指地址的内容 27C+语言程序设计指针注意事项指针注意事项1.常量指针常量指针:指向常量的指针,不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的
23、对象。const int*i=10;i=x;/正确 *i=20;/错误错误2.指针常量指针常量:指针本身是常量,不能被改变 char*const c=“hello”;c=“ok”;/错误错误28C+语言程序设计void类型指针类型指针VoidVoid类型指针:可以存储类型指针:可以存储任何类型任何类型任何类型任何类型的对象地址。的对象地址。通过访问该指针可以访问通过访问该指针可以访问任何类型任何类型任何类型任何类型的数据。的数据。void void vobjectvobject;/;/错,不能声明错,不能声明voidvoid类型的变量类型的变量 void*void*pvpv;/;/对,可以声明
24、对,可以声明voidvoid类型的指针类型的指针 intint *pint;*pint;intint i;i;intint main()main()pvpv=&i;/void=&i;/void类型指针指向整型变量类型指针指向整型变量 /void/void指针赋值给指针赋值给intint指针需要指针需要类型强制转换类型强制转换类型强制转换类型强制转换:pint=(pint=(intint*)*)pvpv;29C+语言程序设计指针变量的算术运算指针变量的算术运算指针p加或减整数n意义是指针当前指向位置的前方或后方第n个数据的地址。这种运算的结果值取决于指针指向的数据类型指针p+/+p或p-/-p意
25、义指向下一个或前一个数据。例如:y=*px+相当于 y=*(px+)30C+语言程序设计关系运算关系运算指向相同类型数据的指针之间可以进行各种指向相同类型数据的指针之间可以进行各种关系运算。关系运算。指向不同数据类型的指针,以及与一般整数指向不同数据类型的指针,以及与一般整数变量之间不能进行关系运算。变量之间不能进行关系运算。指针可以和零之间进行等于或不等于的关系指针可以和零之间进行等于或不等于的关系运算。例如:运算。例如:p=0p=0或或p!=0p!=0赋值运算赋值运算向指针变量赋的值必须是地址常量或变量,向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数不能是普通整数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 程序设计
限制150内