您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 衡水市中考满分作文-第5章 数组(1)
1第5章数组5.1一维数组的定义和引用5.2二维数组的定义和引用5.3用数组名作函数参数5.4字符数组5.5字符串类与字符串变量2思考?如何存储全班(乃至全院)学生的C++成绩?用变量?——太不方便(定义不方便、使用不方便)用数组——一种新的构造类型数组概念若干相同类型的变量按照一定的顺序关系组合在一起形成的整体。组成数组的变量称为该数组的元素。分类一维数组、多维数组数值数组、字符数组数组的概念35.1一维数组的定义和引用一、定义一维数组1、格式类型名数组名[常量表达式];如:inta[10];含义:数组名为a的整型数组、包含10个元素:a[0]、[1]…a[9]2、说明(1)数组名——合法的标识符,后为[];(2)定义时[]中只能为常量,表示数组长度;如:inti=10;inta[i];#defineN10inta[N];(3)数组元素的下标是从0开始,最大为长度减1。4二、一维数组的存储1、特点:顺序存放,地址连续2、举例:inta[10];3、说明a-数组名:代表数组首元素的内存地址,等价于&a[0];a+1:表示下一个元素a[1]的地址,即&a[1];a+i:表示元素a[i]的地址,即&a[i];数组名a表示一个常量,不能被赋值,如:a=10;a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]aa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a5三、一维数组的初始化1、对每个数组元素初始化如:inta[5]={0,1,2,3,4};2、只对数组前面部分元素初始化如:inta[5]={0,1,2};3、对数组中全部元素初始化相同的值如:inta[5]={1,1,1,1,1};不能写成:inta[5]={1*5};4、对数组全部元素初始化时,可以不指定数组长度如:inta[]={1,2,3,4,5};通过sizeof计算元素的个数。其余元素值为0。sizeof(a)/sizeof(int)6四、一维数组元素的引用1、形式数组名[下标]2、注意先定义,后引用如:inta[10];a[2]=5;下标为整型表达式如:a[0]=5;a[2*3]=10;a[i]=i;intb;b=a[5]+10;7只能逐个引用数组元素的值如:a[10]={1,2,3......};又如:从键盘对数组a输入数值逐个:cina[0];cina[1];cina[2];......cina[9];使用时,下标不要越界for(i=0;i10;i++)cina[i];思考?inta0,a1,a2…,a9;for(i=0;i10;i++)cinai;cina;8五、综合举例例1:已知有一整型数组a,长度为10,要求对其元素分别赋值为1~10的平方,并求数组之和。分析:定义数组inta[10];用循环对数组元素赋值寻找每个数组元素下标及其赋值与循环变量之间的关系9参考程序:#includeiostreamusingnamespacestd;intmain(){inta[10],i,sum=0;for(i=0;i10;i++){a[i]=(i+1)*(i+1);sum+=a[i];}cout“sum=sumendl;return0;}10例2:体育比赛的评分系统。评分规则:共有10个评委,去掉一个最高分,去掉一个最低分,然后求平均分。分析:使用数组存储评委的分数doublescore[10];先求和,再将最大值、最小值去掉,最后再除最大值、最小值的求法:比较法(打擂法)11参考程序:#includeiostreamusingnamespacestd;intmain(){doublescore[10];doublesum,ave,max,min;inti;for(i=0;i10;i++)cinscore[i];sum=0;max=min=score[0];for(i=0;i10;i++){sum=sum+score[i];if(score[i]max)max=score[i];if(score[i]min)min=score[i];}ave=(sum-max-min)/8;coutave=aveendl;return0;}12思考?1、修改程序,使其适合100以内的任意个评委的评分。2、若没有人数限制,考虑如何实现呢?动态内存分配,以后再讲。13思考1参考程序:#includeiostreamusingnamespacestd;intmain(){doublescore[100];doublesum,ave,max,min;inti,num;cinnum;for(i=0;inum;i++)cinscore[i];sum=0;max=min=score[0];for(i=0;inum;i++){sum=sum+score[i];if(score[i]max)max=score[i];if(score[i]min)min=score[i];}ave=(sum-max-min)/(num-2);coutave=aveendl;return0;}14例3:使用冒泡法对10个数从小到大进行排序。分析:使用数组inta[10];思路将相邻两个数比较,小的调到前,大的调到后用双重循环外循环控制轮数的变化,内循环控制每轮的比较次数15冒泡排序演示第1轮第2轮16冒泡排序演示第3轮思考?若n个数,最多需比较几轮?每轮中需比较多少次?n-1轮n-i次17参考程序:#includeiostreamusingnamespacestd;intmain(){inta[10];inti,j,t;coutinput10numbers:endl;for(i=0;i10;i++)cina[i];for(i=0;i9;i++)for(j=0;j9-i;j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}coutthesorted:endl;for(i=0;i10;i++)couta[i];coutendl;return0;}18思考1、按从大到小进行排序,如何修改程序?2、是不是N个数进行排序必须要比较N-1轮呢?答:最多是比较N-1轮,可以少于N-1轮3、比较过程中(不到N-1轮),如何判定数据已经排好顺序?答:若本轮比较过程中,没有数据发生交换则数据已排好顺序。4、修改程序,使其满足:数据顺序排好后,结束比较。19思考4参考程序:#includeiostreamusingnamespacestd;intmain(){inta[10];inti,j,t,flag;for(i=0;i10;i++)cina[i];for(i=0;i9;i++){flag=0;for(j=0;j9-i;j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;flag=1;}if(flag==0)break;}coutthesorted:endl;for(i=0;i10;i++)couta[i];coutendl;return0;}205.2二维数组的定义和引用一、定义二维数组1、格式类型名数组名[常量表达式1][常量表达式2];如:inta[3][4];含义:二维整型数组a;两个下标—行下标、列下标;一维长度为3,二维长度为4;共有含12个元素,分别是:a[0][0]、a[0][1]、a[0][2]、a[0][3]a[1][0]、a[1][1]、a[1][2]、a[1][3]a[2][0]、a[2][1]、a[2][2]、a[2][3]—a[0]—a[1]—a[2]注:a[0],a[1],a[2]可当作数组名。21二、二维数组的存储1、特点:按行顺序存放,地址连续2、举例:inta[3][4];3、说明a:第0行地址;a+1:第1行地址;a+2:第2行地址;a[0]:第0行0列元素的地址,&a[0][0];a[1]+1:第1行1列元素的地址,&a[1][1];……a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]……a[2][0]a[2][1]a[2][2]a[2][3]……a[0]a[1]a[2]22三、二维数组的初始化(1)分行赋初值inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};(2)按存储顺序赋值inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};(3)对部分元素赋初值inta[3][4]={{1},{0,6},{0,0,11}};(4)初始化时,可省略第一维的长度inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[][4]={{1,2,3},{},{9,10}};23四、引用二维数组的元素1、形式数组名[下标][下标]2、注意先定义,后引用如:inta[3][4];下标为整型表达式使用时,下标不要越界如:a[0][4]a[3][3]a[3][4]a[2][3]只能逐个引用数组元素的值for(i=0;i3;i++)for(j=0;j4;i++)cina[i][j];双重循环24五、综合举例某班有30名同学,每名同学有5门课程。求:(1)每个学生的平均分(2)每门课程的平均分分析:定义二维数组doubles[30][5],其中每行用来存储1名同学5门课程的成绩;利用双重循环输入30名同学5门课程的成绩求某个学生或某门课程的平均成绩,用一重循环;求每个学生或每门课程的平均成绩,用双重循环。25参考程序:#includeiostreamusingnamespacestd;intmain(){doubles[30][5];doublecou_ave[5];doublestu_ave[30];inti,j;for(i=0;i30;i++)for(j=0;j5;j++)cins[i][j];for(i=0;i30;i++){stu_ave[i]=0;for(j=0;j5;j++)stu_ave[i]=stu_ave[i]+s[i][j];stu_ave[i]=stu_ave[i]/5;cout学生i的平均成绩stu_ave[i];}coutendl;26for(i=0;i5;i++){cou_ave[i]=0;for(j=0;j30;j++)cou_ave[i]=cou_ave[i]+s[j][i];cou_ave[i]=cou_ave[i]/30;cout课程i的平均成绩cou_ave[i];}coutendl;return0;}参考程序(续)
本文标题:衡水市中考满分作文-第5章 数组(1)
链接地址:https://www.777doc.com/doc-3958406 .html