NO5数组、指针和引用电子课件C++程序设计案例教程.ppt
《NO5数组、指针和引用电子课件C++程序设计案例教程.ppt》由会员分享,可在线阅读,更多相关《NO5数组、指针和引用电子课件C++程序设计案例教程.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数组、指针和引用数组、指针和引用 人人们们经经常常需需要要使使用用大大量量集集中中在在一一起起的的数数据据来来工工作作,C+通通过过数数组组处处理理来来满满足足这这种种要要求求。数数组组是是一一组组具具有有相相同同数数据据类类型型的的数数据据的的有有序序集集合合,可可以以是是一一维维的的,也也可可以以是是多多维维的的,许许多多重重要要的的应用都是基于数组的。应用都是基于数组的。C+具具有有在在程程序序运运行行时时获获得得变变量量地地址址和和操操纵纵地地址址的的能能力力,这这种种用用来来操操纵纵地地址址的的特特殊殊类类型型就就是是指指针针。指指针针可可以以用用于于数数组组,可可以以用用做做函函数
2、数参参数数,也也可可以以用用于于内内存存访访问问和和堆堆内内存存操操作作。指指针针的的功能最强,但也最危险。功能最强,但也最危险。使使用用引引用用可可以以确确定定把把参参数数传传递递给给函函数数的的方方法法。通通过过引引用用的的学学习习,要要求求正正确确掌掌握握引引用用的的语语法法,引引用用作作为为函函数数参参数数的的方方法法,正正确使用引用,明确引用与指针的区别。确使用引用,明确引用与指针的区别。5.1 数组数组 数数组组是是一一组组具具有有相相同同数数据据类类型型的的数数据据的的有有序序集集合合。数数组组是是一一个个存存储储单单元元,元元素素的的值值就就存存放放在在其其中中。数数组组的的数
3、数据据类类型型也也就就是是它它的的元元素素的的数数据据类类型型,如如整整型型数数组组,其其中中的的每每个个元元素素都都存存储储一一个个整整数数。数数组组的的下下标标用用于于标标识识数数组组元元素素的的位位置置。根根据据元元素素排排列列方方式式的的不不同同,数数组组可可分分为为一一维维数数组组、二二维维数数组组等等。不不同同维维数数的的数数组组,其其下下标标访访问问方方式式也也不不同同。通通过过数数组组的的学学习习,要要求求理理解解数数组组下下标标含含义义,掌掌握握数数组组初初始始化化的的方方法法,学学会会把把数数组作为函数的参数,学会二维数组的使用。组作为函数的参数,学会二维数组的使用。5.1
4、.1 一维数组一维数组 Add your text in here冒泡法排序冒泡法排序 从键盘输入从键盘输入1010个整数到一个一维数组中,使用冒泡法从小到大排序,个整数到一个一维数组中,使用冒泡法从小到大排序,输出排序结果。要求将每趟排序的结果输出输出排序结果。要求将每趟排序的结果输出。5.1.1 一维数组一维数组#include int main(int argc,char*argv)int a10;int i,j,k,temp;cout请输入请输入10个整数个整数:n;for(i=0;iai;for(i=0;i9;i+)/使用冒泡算法从小到大排序使用冒泡算法从小到大排序for(j=0;j
5、aj+1)temp=aj;aj=aj+1;aj+1=temp;cout第第i+1趟排序结果趟排序结果:;for(k=0;k=9;k+)/输出每趟排序结果输出每趟排序结果 coutak;coutendl;cout排序后为排序后为:n;for(i=0;i=9;i+)/输出排序完成后结果输出排序完成后结果coutai;coutaj+1,则交,则交换换aj与与aj+1,j的值为的值为0,1,2,8。经过这样。经过这样一趟冒泡,将这一趟冒泡,将这10个数中最大的数放个数中最大的数放在了在了a9中。中。15.1.1 一维数组一维数组程序分析程序分析第第1趟比较结束后,将趟比较结束后,将10个数中的最大数交
6、换到个数中的最大数交换到a9,然后对然后对a0a8再进行一趟冒泡,又将该范围内的最再进行一趟冒泡,又将该范围内的最大值换到了大值换到了a8中。中。2依次进行下去,最多只要进行依次进行下去,最多只要进行9 9趟冒泡,就可完成排序。趟冒泡,就可完成排序。3如果在某趟冒泡过程中没有交换相邻两个数的值,则说如果在某趟冒泡过程中没有交换相邻两个数的值,则说明排序已完成,可以提前结束排序。明排序已完成,可以提前结束排序。4知识讲解知识讲解 一维数组的定义一维数组的定义 一维数组的初始化一维数组的初始化类型说明符类型说明符 数组名数组名常量表达式常量表达式;例如:例如:int a10;对数组元素的初始化可以
7、在数组定义时进行,例如:对数组元素的初始化可以在数组定义时进行,例如:对数组元素的初始化可以在数组定义时进行,例如:对数组元素的初始化可以在数组定义时进行,例如:int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4,5,6,7,8,9;即将数组元素的初值依次放在一对花括号内。即将数组元素的初值依次放在一对花括号内。即将数组元素的初值依次放在一对花括号内。即将数组元素的初值依次放在一对花括号内。经过上面的定义和初始化后,经过上面的定义和初始化后,经过上面的定义和初始化后,经过上面的定义和初始化后,a0=0a0=0,a1=1a1=1,a2=2a2=2依次依次依
8、次依次类推。类推。类推。类推。当然,也可以只给一部分元素赋值,例如:当然,也可以只给一部分元素赋值,例如:当然,也可以只给一部分元素赋值,例如:当然,也可以只给一部分元素赋值,例如:int a10=0,1,2,3,4;int a10=0,1,2,3,4;5.1.2 二维数组二维数组 Add your text in here实现矩阵的转置实现矩阵的转置将用二维数组表示的矩阵的行和列互换,如下面一个将用二维数组表示的矩阵的行和列互换,如下面一个23的矩阵:的矩阵:转置后变成转置后变成32的矩阵:的矩阵:#include int main(int argc,char*argv)int a23;in
9、t b32;int i,j;cout请输入请输入23矩阵的值矩阵的值:n;for(i=0;i2;i+)/输入输入23矩阵的值矩阵的值for(j=0;jaij;for(i=0;i2;i+)/对对23矩阵进行转置矩阵进行转置for(j=0;j3;j+)bji=aij;cout转置后的矩阵为转置后的矩阵为:n;for(i=0;i3;i+)/输出转置后的矩阵输出转置后的矩阵for(j=0;j2;j+)coutbij;coutendl;return 0;5.1.2 二维数组二维数组源代码展示源代码展示5.1.2 二维数组二维数组运行结果运行结果程序分析程序分析 在程序中,首先声明了一个在程序中,首先声明
10、了一个23的二维数组的二维数组a和一个和一个32的二维数组的二维数组b,并通过键盘向二维数组,并通过键盘向二维数组a中输入中输入6个值;然后将数组个值;然后将数组a进行转置,转进行转置,转置后的元素存放到数组置后的元素存放到数组b中,最后将数组中,最后将数组b输出。输出。知识讲解知识讲解 二维数组的定义二维数组的定义类型说明符类型说明符 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2;其中,常量表达式其中,常量表达式1表示二维数组的行数,常量表达式表示二维数组的行数,常量表达式2表表示二维数组的列数。例如:示二维数组的列数。例如:int a23;表示定义了一个二维数组,数组名为表示
11、定义了一个二维数组,数组名为a,有,有6个元素。它在个元素。它在逻辑上的空间形式为逻辑上的空间形式为2行行3列,每个元素的数据类型为整型。列,每个元素的数据类型为整型。数组数组a的各个元素如下所示:的各个元素如下所示:a00 a01 a02 a10 a11 a12知识讲解知识讲解分行给二维数组赋初值分行给二维数组赋初值 可以将所有数据写在一个花括号内,按数组排列的可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值顺序对各元素赋初值 对部分元素赋初值对部分元素赋初值 int a23=1,2,3,4,5,6;int a23=1,2,3,4,5,6;int a23=1,2;如果对全部元素
12、都赋初值,则定义数组时对第一维的长度如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略可以不指定,但第二维的长度不能省略 int a23=1,2,3,4,5,6;等价于:等价于:int a3=1,2,3,4,5,6;二二维维数数组组的的初初始始化化5.1.3 数组名作函数参数数组名作函数参数 Add your text in here用选择法对数组中的整数进行排序用选择法对数组中的整数进行排序从键盘输入从键盘输入10个整数到一个数组中,用选择法对这个整数到一个数组中,用选择法对这10个整数进行排序,个整数进行排序,并按由小到大的顺序输出。要求输出每趟排序的结果
13、。并按由小到大的顺序输出。要求输出每趟排序的结果。5.1.3 数组名作函数参数数组名作函数参数源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)void select_sort(int arr,int n);/声明函数声明函数int a10,i;cout请输入请输入10个整数个整数endl;/从键盘输入从键盘输入10个整数到数组个整数到数组a中中for(i=0;iai;coutendl;select_sort(a,10);/调用函数,实参是数组调用函数,实参是数组acout选择法排序后结果为选择法排序后结果为:end
14、l;/输出排序后结果输出排序后结果for(i=0;i10;i+)coutai;coutendl;return 0;5.1.3 数组名作函数参数数组名作函数参数源代码展示源代码展示/选择排序函数,形参选择排序函数,形参arr是数组名是数组名void select_sort(int arr,int n)int i,j,k,m,temp;for(i=0;in-1;i+)/进行进行n-1趟排序趟排序k=i;/将余下的第一个数的下标用变量将余下的第一个数的下标用变量k保存保存 /每趟排序,将余下数中最小的数与余下的第一个数交换每趟排序,将余下数中最小的数与余下的第一个数交换for(j=i+1;jn;j+
15、)if(arrjarrk)k=j;temp=arrk;arrk=arri;arri=temp;/输出每趟排序结果输出每趟排序结果cout第第i+1趟排序结果趟排序结果:;for(m=0;m10;m+)coutarrm;coutendl;5.1.3 数组名作函数参数数组名作函数参数运行结果运行结果5.1.3 数组名作函数参数数组名作函数参数程序分析程序分析 在程序中定义了函数在程序中定义了函数select_sort(int arr,int n)select_sort(int arr,int n),形参形参arrarr是数组名,函数使用选择法进行排序。第一趟排序将是数组名,函数使用选择法进行排序。
16、第一趟排序将1010个数中最小的数与个数中最小的数与a0a0进行交换(即进行交换(即-33-33与与1313交换),第二交换),第二趟排序将余下的趟排序将余下的9 9个数中最小的数与个数中最小的数与a1a1交换(即交换(即3 3与与2323交换)交换),每趟排序都从余下的数中找出最小的,并与余下的第一个,每趟排序都从余下的数中找出最小的,并与余下的第一个数进行交换。数进行交换。在调用函数在调用函数select_sort(a,10)select_sort(a,10)前后,数组前后,数组a a中元素的位中元素的位置发生了变化。在调用函数前,数组置发生了变化。在调用函数前,数组a a(实参)中的元素
17、是无(实参)中的元素是无序的;调用函数后,形参数组序的;调用函数后,形参数组arrarr已用选择法进行了排序,形已用选择法进行了排序,形参数组参数组arrarr的改变也使实参数组的改变也使实参数组a a随之改变。随之改变。知识讲解知识讲解 当用数组名作函数参数时,由于数组名代表数组首元当用数组名作函数参数时,由于数组名代表数组首元素的地址,所以在调用函数时是将实参数组首元素的地址素的地址,所以在调用函数时是将实参数组首元素的地址传递给形参数组名,这样实参数组和形参数组便占用同一传递给形参数组名,这样实参数组和形参数组便占用同一段内存地址单元。假如,实参数组段内存地址单元。假如,实参数组a的起始
18、地址为的起始地址为2000,将将a传递给形参数组传递给形参数组b时,时,b的起始地址也是的起始地址也是2000。此时,。此时,a0与与b0表示同一个单元,表示同一个单元,a1与与b1也表示同一个单元,也表示同一个单元,依次类推。因此,当形参数组依次类推。因此,当形参数组b中的元素值发生变化时,中的元素值发生变化时,实参数组实参数组a中的元素值也随着改变。中的元素值也随着改变。这与用变量作函数参数不同,用变量作函数参数时,这与用变量作函数参数不同,用变量作函数参数时,在调用函数时只是将实参变量的值传递给形参变量,而没在调用函数时只是将实参变量的值传递给形参变量,而没有将地址传递给形参变量,所以即
19、使形参的值发生变化,有将地址传递给形参变量,所以即使形参的值发生变化,也不会影响实参变量的值。也不会影响实参变量的值。5.1.4 字符数组字符数组 Add your text in here输出输出3个字符串中的最大者个字符串中的最大者 从键盘输入从键盘输入3个长度不超过个长度不超过10的字符串,用的字符串,用3个字符数组存个字符数组存放,然后进行判断,将最大的字符串输出。放,然后进行判断,将最大的字符串输出。5.1.4 字符数组字符数组源代码展示源代码展示#include#include int main(int argc,char*argv)char maxStr10;/定义字符数组定义字
20、符数组maxStr,保存最大字符串,保存最大字符串 char str310;/定义二维字符数组,即存放字符串的数组定义二维字符数组,即存放字符串的数组str int i;cout输入输入3个字符串:个字符串:endl;for(i=0;istri;if(strcmp(str0,str1)0)/将前两个字符串比较,大者存入字符数组将前两个字符串比较,大者存入字符数组max中中5.1.4 字符数组字符数组源代码展示源代码展示strcpy(maxStr,str0);elsestrcpy(maxStr,str1);if(strcmp(str2,maxStr)0)/将最后一个字符串和将最后一个字符串和ma
21、xStr中的字符串比较中的字符串比较 strcpy(maxStr,str2);/如果最后一个字符串大,则将其复制到如果最后一个字符串大,则将其复制到maxStr中中cout最大的字符串为:最大的字符串为:maxStrendl;return 0;5.1.4 字符数组字符数组运行结果运行结果程序分析程序分析 在程序中,首先声明了一个字符数组在程序中,首先声明了一个字符数组maxStr,用于保存最大字符串;接,用于保存最大字符串;接着声明了一个二维字符数组,即存放字符串的数组着声明了一个二维字符数组,即存放字符串的数组str,用于接收从键盘输入,用于接收从键盘输入的的3个字符串。在进行比较时,先将前
22、两个字符串比较,将较大的字符串暂时个字符串。在进行比较时,先将前两个字符串比较,将较大的字符串暂时存入字符数组存入字符数组max中;再将最后一个字符串和中;再将最后一个字符串和maxStr中的字符串比较,如果中的字符串比较,如果最后一个字符串大,则将其复制到最后一个字符串大,则将其复制到maxStr中。程序结束后,中。程序结束后,maxStr中保存的中保存的字符串就是最大的字符串。字符串就是最大的字符串。知识讲解知识讲解 当数组中的元素全都由字符组成时,该数组称为字符数当数组中的元素全都由字符组成时,该数组称为字符数组。在组。在C+中,用一个一维的字符数组表示字符串。数组中,用一个一维的字符数
23、组表示字符串。数组的每个元素保存字符串的一个字符,在字符串结尾附加一的每个元素保存字符串的一个字符,在字符串结尾附加一个空字符,用个空字符,用0表示。因此,如果一个字符串有表示。因此,如果一个字符串有n个字符,个字符,则用于保存该字符串的数组长度应为则用于保存该字符串的数组长度应为n+1。下面的代码声明。下面的代码声明了一个长度为了一个长度为10的字符数组的字符数组maxStr:char maxStr10;则该数组能够保存的字符数最多为则该数组能够保存的字符数最多为9。字符数组在初始化时,不需要一个字符一个字符地赋值,字符数组在初始化时,不需要一个字符一个字符地赋值,可以用一个字符串对字符数组
24、进行初始化。例如:可以用一个字符串对字符数组进行初始化。例如:maxStr10=Hello;字符数组的定义与初始化字符数组的定义与初始化 知识讲解知识讲解计算字符串长度的函数计算字符串长度的函数strlen()字符串复制函数字符串复制函数strcpy()字符串连接字符串字符串连接字符串strcat()strlen(字符数组字符数组)strcpy(字符数字符数组组名名1,字符数字符数组组名名2)strcat(字符数组名字符数组名1,字符数组名字符数组名2)字符串比较函数字符串比较函数strcmp()strcmp(字符串字符串1,字符串字符串2)字字符符串串处处理理函函数数5.2 指针指针 Add
25、 your text in here输入两个整数,并将它们从大到小输出输入两个整数,并将它们从大到小输出 使用指针变量实现:从键盘输入两个数给整型变量使用指针变量实现:从键盘输入两个数给整型变量a和和b,并将它们按先大后小的顺序输出。并将它们按先大后小的顺序输出。5.2.1 指针的引用指针的引用5.2.1 指针的使用指针的使用#include#include int main(int argc,char*argv)cout输入两个整数输入两个整数:ab;/输入两个整数输入两个整数p1=&a;/p1指向指向ap2=&b;/p2指向指向bcout*p1的值为的值为*p1*p2的值为的值为*p2en
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NO5数组、指针和引用电子课件 C+程序设计案例教程 NO5 数组 指针 引用 电子 课件 C+ 程序设计 案例 教程
限制150内