第07章数组.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章数组第7章数组问题的提出:一、少量变量的使用特点1、按义取名2、按名存取3、对存储位置无要求二、大量变量的使用1、变量之间相关性强2、统一名命3、连续存储提高存取效率第7章数组7.1数组的定义及应用一、一维数组的定义数组(整体)inta[10];数组名元素个数数组类型二、一维数组元素的引用a[0],a[1],a[2],…...a[9]元素下标数组是一个整体概念,数组元素是个体概念,每一个元素都是一个整型变量。7.1.1一维数组的定义及使用第7章数组同理:可定义其他类型数组inta[10];floatb[5];charc[20];a[0],a[1],…...a[9]b[0],b[1],…...b[4]c[0],c[1],…...c[19]定义引用数组元素的下标可以是整型表达式,如:inti=3,j=2,a[10];a[i],a[i+4],a[i+j],……第7章数组数组在内存中的存放例:inta[10];申请10个整型变量,占内在40个字节。…..内存a[0]…..a[1]a[2]a[8]a[9]第7章数组一个整型变量的存储示意:011110000001001000110100010101100111100001010110int型变量(4个字节)0011010000010010内存低地址高地址inta=0x12345678;对于变量a,对它的直观理解和内存中的存放形式为:第7章数组三、一维数组初始化1、在定义数组时赋初值inta[3]={1,3,5};floatb[2]={3.14,5.18};charc[5]={'a','b','c','d','e'};2、只给一部分元素显式赋初值intb[10]={1,2};b[0]和b[1]的值为1和2,其余元素的值0。3、数组全部元素赋初值可不指定数组大小inta[]={1,2,3,4,5};编译器自动确定元素个数。4、定义全局数组或局部静态数组,C++编译器将数组所有元素初值置为0;如果定义的是局部动态数组,则数组全部元素为不确定的值第7章数组一维数组不可整体赋值inta[10]={1,2,3,4,5,6,7,8,9,10};intb[10];不能写成b=a;而必须用循环语句给一维数组元素逐个赋值:for(inti=0;i=9;i++)b[i]=a[i];如何给一维数组赋值第7章数组例7.1:数组元素的引用#includeiostream.h#includeiomanip.hvoidmain(){inti,a[10];for(i=0;i=9;i++)a[i]=i;for(i=9;i=0;i--)coutsetw(4)a[i];coutendl;}…..内存a[0]…..a[1]a[2]a[8]a[9]01289运行结果如下:9876543210第7章数组#includeiostream.hvoidmain(){inti,f[20]={1,1},sum=f[0]+f[1];for(i=2;i20;i++)//求f[2]到f[19]{f[i]=f[i-2]+f[i-1];sum+=f[i];}for(i=0;i20;i++)//控制一行输出5个数{if(i%5==0)cout'\n';coutf[i]'\t';}cout'\n'前20项和为:sum'\n';}1,1,2,3,5,8,……f[0],f[1],f[2],f[3],f[4],f[5],……f[19]例7.3:用数组来处理求Fibonacci数列的前20项和它们的和。第7章数组#includeiostream.hvoidmain(){inti,j=0,k,a[20];//j记录分解的数的位数cout请输入一个整数:;cini;k=i;while(k0)//将一个数分解到数组a中{a[j++]=k%10;k=k/10;}cout正向输出序列:endl;for(k=j-1;k=0;k--)couta[k]'\t';coutendl;cout反向输出序列:endl;for(k=0;k=j-1;k++)couta[k]'\t';coutendl;}例7.4:将一个数分解到数组中,然后正向,反向输出第7章数组7.1.2一维数组作函数参数1.一维数组元素作函数实参定义inta[10];引用a[0],a[1],a[2],…...a[9]用a[i]:i在0到9之间,否则越界a[i]作为函数的实参与单个变量作函数实参一样使用。第7章数组1.数组元素作函数实参[例7.5]比较两个数组的大小a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]j是a[i]b[i]的次数k是a[i]==b[i]的次数m是a[i]b[i]的次数比较对应元素结论:如果jm,则a数组比b数组大如果jm,则a数组比b数组小如果j==m,则a数组与b数组相等例:a数组比b数组小a[]:1327603b[]:4329802j=1k=3m=3第7章数组intlarge(intx,inty)//比较两个整数的大小{intflag;if(xy)flag=1;elseif(xy)flag=-1;elseflag=0;returnflag;//返回值有三种可能}[例7.5]比较两个数组的大小第7章数组#includeiostream.hvoidmain(){intlarge(int,int);inta[10],b[10],i,j=0,k=0,m=0,n;cout请输入数组元素个数:\n;cinn;//n≤10,为实际数组元素个数cout输入数组a:\n;for(i=0;in;i++)cina[i];cout'\n';cout输入数组b:\n;for(i=0;in;i++)cinb[i];cout'\n';[例7.5]比较两个数组的大小第7章数组for(i=0;in;i++){if(large(a[i],b[i])==1)j=j+1;elseif(large(a[i],b[i])==0)k=k+1;elsem=m+1;}couta[i]大于b[i]的次数jendl;couta[i]等于b[i]的次数kendl;couta[i]小于b[i]的次数mendl;if(jm)cout数组a大于数组b\n;elseif(jm)cout数组a小于数组b\n;elsecout数组a等于数组b\n;}[例7.5]比较两个数组的大小第7章数组一维数组的特点:1、一组连续存放的变量2、数据类型相同3、数组名是数组在内在中连续存入的首地址当一维数组名作函数实际参数时,传输给形参的是一维数组的首地址,此时形参也应该是一维数组名的形式。实参:实参数组名,元素个数形参:形参数组名,整型变量2.一维数组名作函数实参第7章数组#includeiostream.hvoidreverse(intb[],intn){inti=0,j=n-1,t;while(ij){t=b[i];b[i]=b[j];b[j]=t;i++;j--;}}voidmain(void){inta[10]={1,2,3,4,5,6,7,8,9,10},i;reverse(a,10);for(i=0;i10;i++)couta[i]'\t';coutendl;}[例7.6]将一个一维数组中的值按逆顺重新存放在被调函数中改变b数组元素的值就是改变主调函数中a数组的值,不需要也不可能用return语句返回。第7章数组实参数组a形参数组b实参数组与形参数组元素共享存储单元p90a[0]a[1]a[2]…...a[8]a[9]…...b[0]b[1]b[2]…...b[8]b[9]iji++,j--i=0j=9[例7.6]将一个一维数组中的值按逆顺重新存放另一种在两个函数之间传递多个值的方法第7章数组[例7.6]将一个一维数组中的值按逆顺重新存放P89#includeiostream.hvoidinverse(intb[],intn){inti;for(i=0;in/2;i++){intt=b[i];b[i]=b[n-1-i];b[n-1-i]=t;}}voidmain(void){inta[10]={1,2,3,4,5,6,7,8,9,10},i;reverse(a,10);for(i=0;i10;i++)couta[i]'\t';coutendl;}37911067542N-1-iib[i]=b[N-1-i]图第7章数组b[0]b[1]b[2]…...b[N-2]b[N-1]…...i=0,b[0]与b[N-1]对称,即b[i]与b[N-1-i]对称i=1,b[1]与b[N-2]对称,即b[i]与b[N-1-i]对称i=2,b[2]与b[N-3]对称,即b[i]与b[N-1-i]对称……返回数组共有N个元素第7章数组解题思路:排序的规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小把题目抽象为:“对n个数按升序排序”采用起泡法排序[例7.7]用冒泡法对6个数排序(由小到大)第7章数组985420895420859420854920854290854209a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i=4;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}[例7.7]用冒泡法对6个数排序(由小到大)第7章数组854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i=3;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}[例7.7]用冒泡法对6个数排序(由小到大)第7章数组542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i=2;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}[例7.7]用冒泡法对6个数排序(由小到大)第7章数组420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i=1;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}[例7.7]用冒泡法对6个数排序(由小到大)第7章数组204589024589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i=0;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}[例7.7]用冒泡法对6个数排序(由小到大)第7章数组for(i=0;i=4;i++)if(a[i]a[i+1]){……}for(i=0;i=3;i++)if(a[i]a[i+1]){……}for(i=0;i=0;i++)if(a[i]a[i+1]){……}……for(i=0;i=4-j;i++)if(a[i]a[i+1]){……}for(j=0;j=4;j++)[例7.7]用冒泡法对6个数排序(由小到大)第7章数组N个数排序,要进行N-1趟扫描。用i表示循环次数:i:0~(N-2)或i:1~(N-1)第i趟扫描时,要做N-i次两两比较用j来控制相邻两个数的比较:前面的大则交换i:0~(N-2)时j:0~(N-i-2)或i:1~(N-1)时j:0~(N-1-i)具体记忆(假定10个数)for(i=0;i=10-2;i++)//i:1—(10-1)for(j=0;j=10-2-i;j++)//j:0—(10-i-1)if(a[j]a[j+1])

1 / 78
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功