(中职)Visual C++程序设计基础(中职)Flash 8.0基础第4章 数组与指针ppt课件.ppt
《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第4章 数组与指针ppt课件.ppt》由会员分享,可在线阅读,更多相关《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第4章 数组与指针ppt课件.ppt(112页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(中职)Visual C+程序设计基础(中职)Flash 8.0基础第4章 数组与指针ppt课件_ 4.2 指针_ 4.4 引用_ 4.5 内存管理_ 4.3 指针与数组_ 4.1 数组构造类型构造类型构造类型构造类型基本类型基本类型基本类型基本类型空类型空类型空类型空类型(void)(void)类类类类(class)(class)(class)(class)指针类型指针类型指针类型指针类型*数据类型数据类型C+中中除除了了基基本本数数据据类类型型,还还有有将将基基本本数数据据类类型型的的一一组组数数据据按按一一定定的的规规则则组组成成的的构构造造类类型型。构构造造类类型型的的每每一一个个分分
2、量量可可以以是是一一个个基基本本数数据据类类型型的的变变量量(象象简简单单变变量量一一样样使使用用),也也可可以以又又是是一一个个构构造造类型的变量。类型的变量。C+构造类型有:数组、结构体、共用体等。构造类型有:数组、结构体、共用体等。数组数组数组数组结构体结构体结构体结构体(union)(union)共用体共用体共用体共用体(struct)(struct)整型整型整型整型字符型字符型字符型字符型实型实型实型实型枚举型枚举型枚举型枚举型4.1.1 4.1.1 数组概念的引出数组概念的引出数组概念的引出数组概念的引出例例例例:输入输入输入输入2020个成绩,求平均分,并输出高于平均分的成绩个成
3、绩,求平均分,并输出高于平均分的成绩个成绩,求平均分,并输出高于平均分的成绩个成绩,求平均分,并输出高于平均分的成绩#includevoid main()int sc,i;double aver=0.0;for(i=0;isc;aver+=sc;aver/=20;coutaver;?20个个 变变 量量?:a,b,c,d,t或或x0,x1,x2,x3,x19?编程编程?循环循环存存放放的的是是一一组组相相关关的的数数据据,用用同同名名和和 不不 同同 的的 下下 标标 来来 区区 分分:a0,a1,a2,a19for(i=0;iai;if(avarn;int an;.#includeconst
4、 int N=10;void main().int aN;/符号常量符号常量 float bN*2,x30,yN*3+6;._常量表达式常量表达式的值为元素的个数的值为元素的个数_一一般般是是整整型型的的常常数数、符符号号常常量量或宏定义的整数或宏定义的整数_常常量量表表达达式式中中只只能能包包含含常常数数、符号常量,符号常量,不能有变量不能有变量。(在编译时确定元素个数在编译时确定元素个数在编译时确定元素个数在编译时确定元素个数)数据类型数据类型 数组名数组名常量表达式常量表达式;错误错误一维数组的存储结构一维数组的存储结构a数组首地址数组首地址a9a8a7a1a0_ 一个数组的所有元素都是
5、连续存储的一个数组的所有元素都是连续存储的_ 数组元素为数组元素为:a0,a1,a2.a9int a10;_ 所占空间为所占空间为:类型空间类型空间*元素个数元素个数2一维数组元素的使用一维数组元素的使用 在一维数组中,各元素在内存中所占的存储单元在一维数组中,各元素在内存中所占的存储单元按下标序号顺序存放。按下标序号顺序存放。C+语言规定只能使用数组中语言规定只能使用数组中的某个数组元素,而不能对数组进行整体访问。数的某个数组元素,而不能对数组进行整体访问。数组元素的使用格式为:组元素的使用格式为:数组名数组名下标下标 每一个数组元素相当于一个变量,因此可以被赋每一个数组元素相当于一个变量,
6、因此可以被赋值,也可以参加运算。我们对数组的使用实际上是值,也可以参加运算。我们对数组的使用实际上是对数组元素的使用。对数组元素的使用。例如:例如:a0=a1+a2*2-a3;下面用法是错误的:下面用法是错误的:int a5,b5;a=b;/错误错误2一维数组元素的使用一维数组元素的使用#include void main()int a10;for(int i=0;i=0;i-)coutait;coutai;/i为整型变量,其值可为为整型变量,其值可为04中任意一个中任意一个coutai;/i的含义同上的含义同上当对数组中的全部数组元素进行输入、输出时,则应使用循当对数组中的全部数组元素进行输
7、入、输出时,则应使用循环语句进行,如:环语句进行,如:for(i=0;iai;for(i=0;i5;i+)/输出输出coutai;输入所有数组元素输入所有数组元素:for(i=0;iai;输出方法:输出方法:输出第i个数组元素:coutai;输出所有数组元素:输出所有数组元素:for(i=0;i10;i+)coutaiendl;循环控制循环控制变量变量i兼作下标兼作下标例例:输入输入n个成绩,求平均分个成绩,求平均分 (书P73页,例4.1)#includevoid main()int sc,n,i;double aver=0.0;cinn;for(i=0;isc;aver+=sc;aver/
8、=n;coutsci;aver+=sci;aver/=n;for(i=0;iaver)coutsc i);高于平均分的人数高于平均分的人数?注:定义了注:定义了注:定义了注:定义了5050个元素的个元素的个元素的个元素的数组,每次运行程序实数组,每次运行程序实数组,每次运行程序实数组,每次运行程序实际使用了际使用了际使用了际使用了n n 个元素个元素个元素个元素4.一维数组的初始化一维数组的初始化数组的初始化数组的初始化数组的初始化数组的初始化:定义定义定义定义数组的数组的数组的数组的同时同时同时同时给数组元素给数组元素给数组元素给数组元素赋值赋值赋值赋值int a5=1,2,3,4,5;在定
9、义数组时对数组的全部元素赋初值。在定义数组时对数组的全部元素赋初值。int a10=0,1,2,3,4,5,6,7,8,9;可以只给一部分数组元素赋初值。可以只给一部分数组元素赋初值。int a10=0,1,2,3,4;当对全部数组元素赋初值时,可以省略数组长度。当对全部数组元素赋初值时,可以省略数组长度。int a=0,1,2,3,4,5,6,7,8,9;如果想使一个数组中的全部数组元素都为如果想使一个数组中的全部数组元素都为0,可以将数组定义为,可以将数组定义为static型数组(代表该数组为静态存储类型)。型数组(代表该数组为静态存储类型)。static int a10;则表示则表示a0
10、a9全部都被赋初值全部都被赋初值0。或:。或:int a10=0;1.求最大值(最小值)及下标求最大值(最小值)及下标例例 编写程序求整型数编写程序求整型数组组a中的最大值及其下中的最大值及其下标,假定数组长度为标,假定数组长度为5。分析:设置变量分析:设置变量k表示表示最大值的下标,首先最大值的下标,首先将数组中的第一个数将数组中的第一个数组元素作为最大值,组元素作为最大值,即即k=0,然后将,然后将ak依依次与其他数组元素进次与其他数组元素进行比较,若该元素大行比较,若该元素大于于ak,则将其下标,则将其下标赋给赋给k。#include const int N=5;/定义符号常量N,代表数
11、组长度void main()int aN,k;/定义整型数组a,长度为N coutplease input N numbers:;for(int i=0;iai;/输入数组元素 k=0;for(i=0;iN;i+)if(akai)k=i;coutmax=ak tIndex=k;coutendl;一维数组程序设计举例(算法)一维数组程序设计举例(算法)2.排序排序(1)冒泡法排序冒泡法排序输入输入5 5个数个数,9 8 5 4 29 8 5 4 2由小到大排序后输出由小到大排序后输出:2 4 5 8 9 2 4 5 8 9算法:两两比较,大数向后移,找到最大数放在最后,再在剩余的的4个数中进行两
12、两比较,找到最大数,以次类推.最后,小数排在开始,相当于浮起,故称之为:冒泡法冒泡法一维数组程序设计举例(算法)一维数组程序设计举例(算法)85429542842524比较4次第一轮比较3次第二轮比较2次第三轮比较1次第四轮9854289542859428549285425842548254242452对对 n n 个数,则要进行个数,则要进行n-1n-1趟扫描,在第趟扫描,在第 i i 趟趟扫描中要进行扫描中要进行 n-in-i 次比较。次比较。可以推知:a0a0 a1a1 a2a2 a3a3 a4a4“211”:两重循环,一次比较,一次互换两重循环,一次比较,一次互换10个数:个数:a0a
13、9要循环进行要循环进行9 轮操作:轮操作:i=08第第1轮:轮:i=0:a0a9:10个数个数 j=08(9次比较)次比较)第第2轮:轮:i=1:a0a8:9个数个数 j=07(8次比较)次比较)第第3轮:轮:i=2:a0a7:8个数个数 j=06(7次比较)次比较)第第8轮:轮:i=7:a0a2 3个数个数 j=01(2次比较)次比较)第第9轮:轮:i=8:a0a1 j=0(1次比较)次比较)在每轮中:在每轮中:j=08-i对对aj 与与aj+1进行比较、互换进行比较、互换for(i=0;i=8;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;若为aj与aj-1的比
14、较互换,则j的变化范围为?若按从大到小的顺序排列?/i9/j9-i#includevoid main()int i,j,a10,t;for(i=0;iai;for(i=0;i9;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i10;i+)coutai;coutendl;#includevoid main()int i,j,a10,t;for(i=0;iai;for(i=0;i=8;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i=9;i+)coutai;coutendl;“211”:两重循环,一次比较,一次
15、互换两重循环,一次比较,一次互换n个数要循环比较个数要循环比较n-1 轮;轮;在每轮中在每轮中aj 与与aj+1进行比较互换进行比较互换(数组元素的下标从数组元素的下标从0n-1)第第1轮:轮:i=0:a0an-1:n个数个数 j=0n-2(即即n-2-i)第第2轮:轮:i=1:a0an-2:n-1个数个数 j=0n-3(即即n-2-i)第第3轮:轮:i=2:a0an-3:n-2个数个数 j=0n-4(即即n-2-i)第第n-2轮:轮:i=n-3:a0an-1 j=0 1(即即n-2-i)第第n-1轮:轮:i=n-2:a0a1 j=0(即即n-2-i)for(i=0;i=n-2;i+)/in-
16、1 for(j=0;j=n-2-i;j+)/jaj+1)t=aj;aj=aj+1;aj+1=t;若为aj与aj-1的比较互换,则j的变化范围为?若按从大到小的顺序排列?#includevoid main()const int N=10;int i,j,aN,t;for(i=0;iai;for(i=0;iN-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;iN;i+)coutai;coutendl;#includevoid main()int i,j,a10,t;for(i=0;iai;for(i=0;i9;i+)for(j=0;jaj+1)t=aj
17、;aj=aj+1;aj+1=t;for(i=0;i10;i+)coutai;coutendl;(2)(2)选择法排序选择法排序从前向后排从前向后排:从从ai到到aN-1找最大值的下标找最大值的下标k,而后将最大值而后将最大值akai特点:特点:比较后不立即互换元素,而是记下其位置并在每比较后不立即互换元素,而是记下其位置并在每一轮比较完毕后互换一轮比较完毕后互换举例举例:原始数据:原始数据:3,5,7,9,4 要求:降序要求:降序第一轮第一轮第一轮第一轮:初始化设最大元素下标为初始化设最大元素下标为初始化设最大元素下标为初始化设最大元素下标为 k k0 03 35 57 79 9k=0(ak
18、k=0(ak 与与与与aj aj 比较比较比较比较,j,j的变化范围的变化范围的变化范围的变化范围:14):14)3 35 57 79 9 k=1 k=13 35 57 79 9 k=2 k=23 35 57 79 9k=3k=3k=3k=3ai ai 与与与与 ak ak交换交换交换交换的结果的结果的结果的结果:9 95 57 73 3/选择排序选择排序for(i=0;iN-1;i+)k=i;for(j=i+1;jak)k=j;t=ai;ai=ak;ak=t;3.在在有序有序数组中数组中插入插入一个数后使数组仍然有序一个数后使数组仍然有序例如:例如:3 5 7 12 18,将将b=10插入插
19、入步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置 (2)给给b让位置让位置 (3)将将b放到该位置上放到该位置上#include void main()int a50=3,5,7,12,18,n=5,i,number;cinnumber;b=10b=103571218(2)357121218(3)for(i=n-1;i=0;i-)if(ainumber)ai+1=ai;/后移后移 elsebreak;ai+1=number;n+;121810(1)3571218a0a1a2a3a4a5#include void main()int a50=3,5,7,12,18,n=5,i,nu
20、mber;cinnumber;4.在在有序有序数组中数组中删除删除一个数一个数,例如例如:3 5 7 10 12 18,将将b=10删除删除步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置(2)后面的数组元素依次前移后面的数组元素依次前移,覆盖该位覆盖该位置上的数组元素即可实现删除置上的数组元素即可实现删除357101218(1)357101218(2)357121218for(i=0;in;i+)if(ai=b)break;101218for(;ix;for(top=0,bottom=N-1;top=bottom;)middle=(top+bottom)/2;if(x=amidd
21、le)break;else if(xamiddle)bottom=middle-1;else top=middle+1;if(x=amiddle)coutamiddle=xendl;else coutNot foundaij;输入整个数组元素:输入整个数组元素:for(i=0;i2;i+)for(j=0;jaij;输出方法:输出方法:输出第输出第i行第行第j列元素:列元素:coutaij;输出整个数组元素:输出整个数组元素:for(i=0;i2;i+)for(j=0;j3;j+)coutaijt;coutendl;4.二维数组的初始化二维数组的初始化int a34=1,2,3,4,5,6,7,
22、8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;与下面的定义等价:int a4=1,2,3,4,5,6,7,8,9,10,11,12;或int a4=1,2,3,4,5,6,7,8,9,10,11,12;系统会自动确定该数组的第一维长度为3。_按行为二维数组赋初值按行为二维数组赋初值_按数组元素的在内存中的存储顺序赋初值按数组元素的在内存中的存储顺序赋初值 _当对二维数组的全部元素赋初值时,定义数组时第一当对二维数组的全部元素赋初值时,定义数组时第一维的长度可省略,但第二维的长
23、度必须给定,系统会维的长度可省略,但第二维的长度必须给定,系统会根据数据的总个数分配存储空间根据数据的总个数分配存储空间只对各行第一列元素赋初值,如:只对各行第一列元素赋初值,如:int a34=1,3,5;作用是只对各行第一列的元素赋初值,其余元素值为作用是只对各行第一列的元素赋初值,其余元素值为0。int b;int b=1,2,3,4,5,6;int bnm;错错!_给部分元素赋初值给部分元素赋初值 对各行中的某一元素赋初值,如:对各行中的某一元素赋初值,如:int a34=1,0,3,0,0,5;只对某几行的部分元素赋初值,如:只对某几行的部分元素赋初值,如:int a34=1,3,5
24、;即对第三行不赋初值。也可以不对第二行赋初值,但花括号不即对第三行不赋初值。也可以不对第二行赋初值,但花括号不可以省略,即:可以省略,即:int a34=1,3,5;二维数组程序设计举例二维数组程序设计举例2*42*4的矩阵,求出其中的最大值及其所在的行号和列号。的矩阵,求出其中的最大值及其所在的行号和列号。#includevoid main()int i,j,row=0,column=0;/将第一个数组元素做为最大值将第一个数组元素做为最大值 int a24=1,2,3,4,5,6,7,8;/应应输入输入 for(i=0;i2;i+)for(j=0;jarowcolumn)row=i;col
25、umn=j;cout“max=“arowcolumn“trow=“row “tcolumn=“column“n”;33矩阵,求两条对角线元素之和#includevoid main()int a33,i,j,sum1=0,sum2=0;for(i=0;i3;i+)for(j=0;jaij;for(i=0;i3;i+)sum1+=aii;sum2+=ai2-i;/a02+a11+a20coutsum1tsum2endl;4.1.4 字符数组字符数组 字符型数组是数据类型为字符型数组是数据类型为char的数组。因的数组。因此前面介绍的数组的定义、存储形式和使用等此前面介绍的数组的定义、存储形式和使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中职Visual C+程序设计基础中职Flash 8.0基础第4章 数组与指针ppt课件 Visual C+ 程序设计 基础 Flash 8.0 数组 指针 ppt 课件
链接地址:https://www.taowenge.com/p-90036280.html
限制150内