(1.6)--第6章 数组类型C语言程序设计.ppt
《(1.6)--第6章 数组类型C语言程序设计.ppt》由会员分享,可在线阅读,更多相关《(1.6)--第6章 数组类型C语言程序设计.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章 数组数组1 1数组适用于解决批量数据问题。批量数据一般具有两个共同的特点:一是数量大,二是类型相同。当要对这类数据进行存储管理时,如果按照前面的办法,势必要定义一大批的变量,那显然是不可行的。本章要引入C语言的一个重要的数据类型数组数组,能够很好地胜任处理批量数据的需要。学习目标:21.理解数组的含义及数组在内存中的存放形式3.学会定义、使用、初始化二维数组4.学会定义、使用、初始化字符数组5.会根据批量数据的属性定义相应维的数组2.学会定义、使用、初始化一维数组本章重点内容:C语言数组的引入1一维数组的定义与使用24字符数组3二维数组的定义与使用31文学类计算机类西方音乐类中国音
2、乐类6.1C语言数组的引入1.为什么要使用数组46.1C语言数组的引入数组内存内存12065984容器中保存的物品日常生活中的容器程序中的数组数组的元素和日常生活一样,内存也希望将类型相同的物品摆放在一起,从而方便管理。5数组是若干个数据类型相同的元素按一定顺序组成的集合。62.数组的概念l数组的类型是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。l数组的命名应符合标识符的书写规定。l数组名不能与其它变量名相同。数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按一定顺序组织起来的一种形式。即给若干个类型相同的变量起一个共同的名字,用顺序号区分它们。这个名字称为
3、数组名,顺序号称为下标。组成数组的各个变量称为数组的分量,也称为数组元素。106051238911201200100221012267025434176.1C语言数组的引入3.数组的三要素7数组具有元素类型、数组的维度和各维的长度三要素。只要元素类型、维数或维的长度之一不同,即为不同的数组。l根据元素类型可分为整型数组、实型数组、字符数组等。l根据数组的维数可分为一维数组、二维数组、三维数组等。6.1C语言数组的引入l数组中任意一个元素都是一个独立的变量。l数组是一个整体,除初始化外不允许对数组进行整体操作。1.一维数组的定义和初始化86.2一维数组 类型名 数组名常量表达式 例如:int c
4、ount13;(1)“类型名”是数组中数据元素的类型,可以为基本数据类型,也可以为复合型的数据类型。(2)数组名的命名符合C语言标识符的命名规则。(3)“常量表达式”用来指定数组的长度,可以是常数或符号常量。(4)“”是数组的标志不能够省略。初始化是在使用之前给数组元素赋一个确定的值。(1)给数组的全部元素赋值:int a5=0,1,2,3,4;int a=0,1,2,3,4;(2)给数组的部分元素赋值:int a5=0,1,2;96.2一维数组 数组元素是数组的基本单元,数组元素通过下标法引用。数组名下标值2.一维数组的引用(1)下标值必须是 0定义的长度-1范围内的整型常量或整型表达式;(
5、2)数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量;(3)数组名不代表任何元素,只能逐个地使用下标变量,不能一次引用整个数组。例如:int count 10;正确的引用形式:count0、count4+5、counta-96、counti错误的引用形式:count13、count3.5/2;0123456789count3.一维数组的应用106.2一维数组(1)五个小朋友围成一圈分糖果,老师分给第一个小孩10块,第二个小孩14块,第三个小孩8块,第四个小孩22块,第五个小孩16块。然后所有的小孩同时将手中的糖分一半给右边的小孩,糖块数为奇数的人向老师要一块后再分。问经过这样几次后
6、大家手中的糖的块数一样多?每人各有多少块糖?abcde10148221610abcde1482216a1b1c1d1e15741185121311874111519116.2一维数组读入元素a-e的值ae是否相等将a一分为二,一半自留,一半给a1,b,c,d,e如法炮制更新a-e的值输出ae的终值不相等相等读入元素ae的值!(a=b&b=c&c=d&d=e)a=a1=(a%2=0?a/2:(a+1)/2);b=b1=(b%2=0?b/2:(b+1)/2);c=c1=(c%2=0?c/2:(c+1)/2);d=d1=(a%2=0?d/2:(d+1)/2);e=e1=(e%2=0?e/2:(e+1
7、)/2);输出ae的终值Tb=b+a1;c=c+b1;d=d+c1;e=e+d1;a=a+e1;F126.2一维数组#includevoid main()int a=10,b=14,c=8,d=22,e=16;int a1,b1,c1,d1,e1,count=0;printf(round 1 2 3 4 5 n);printf(%5d%4d%4d%4d%4d%4dn,count,a,b,c,d,e);while(!(a=b&b=c&c=d&d=e)a=a1=(a%2=0?a/2:(a+1)/2);b=b1=(b%2=0?b/2:(b+1)/2);c=c1=(c%2=0?c/2:(c+1)/2)
8、;d=d1=(a%2=0?d/2:(d+1)/2);e=e1=(e%2=0?e/2:(e+1)/2);b=b+a1;c=c+b1;d=d+c1;e=e+d1;a=a+e1;count+;printf(%5d%4d%4d%4d%4d%4dn,count,a,b,c,d,e);/while当人数较多时,需要定义更多的变量,不方便管理。136.2一维数组#includevoid main()int sweet5=10,14,8,22,16;int temp5;int i,j,k,flag,count=0;printf(Round 1 2 3 4 5 n);printf(.n);printf(%2d,
9、count+);for(k=0;k5;k+)printf(%3d,sweetk);printf(n);flag=1;while(flag)for(i=0;i5;i+)if(sweeti%2=0)tempi=sweeti=sweeti/2;else tempi=sweeti=(sweeti+1)/2;for(j=0;j4;j+)sweetj+1=sweetj+1+tempj;sweet0=sweet0+temp4;printf(%2d,count+);for(k=0;k5;k+)printf(%3d,sweetk);printf(n);for(i=0;i5;i+)if(sweet0!=sweet
10、i)flag=1;break;else flag=0;/while多个同类型变量定义成数组管理6.2一维数组(2)将一个长度为N的一维数组中的元素按颠倒的顺序重新存放,操作时只能借助于一个临时的存储单元。#include#define N 5void main()int i,j,temp,aN=1,3,5,7,9;printf(原来数组:n);for(i=0;iN;i+)printf(%d,ai);printf(n);for(i=0,j=N-1;ij;i+,j-)temp=ai;ai=aj;aj=temp;printf(调整后的数组:n);for(i=0;iN;i+)printf(%d,ai)
11、;printf(n);14135791359711ij13579i jai与aj互换ij条件:iji+;j-;i=0;j=N-1;ij?temp=ai;ai=aj;aj=temp;i+;j-;TF输出数组156.2一维数组(3)使用“冒泡法”对长度为N的一维数组中的元素进行排序,要求按照从小到大的顺序排列。一趟862315964681523 923 623234相邻元素:aj和aj+1用i表示趟:0 i N-1除最后一趟排出两个元素,其余每趟排出一个元素,N个元素排序需要N-1趟排序过程。6815964159615154第一趟第二趟23646815923第N-1趟46每趟中j的起始值都是0,终
12、值因所在趟而异N-2-i。16#include#define N 10void main()int aN,temp,i,j;printf(Enter 10 integer number:);for(i=0;iN;i+)scanf(%d,&ai);for(i=0;iN;i+)printf(%d ,ai);printf(n);for(i=0;iN-1;i+)for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;for(i=0;i10;i+)printf(%d ,ai);printf(n);6.2一维数组j=0;i=0;iN-1?i+jaj+1?aj,aj+1交换j+TTF
13、FFT输出176.3二维数组1.摘水果竞赛 某果园要举行摘果子比赛,参赛选手分别是小明(2011),小强(2012)和小梅(2013),比赛规则是:一共有三场比赛,每场比赛各30分钟,分别摘:葡萄、鸭梨和桃子。以摘得水果总重量为比赛依据,编写一个程序得出比赛的名次!选手选手葡萄葡萄/kg鸭梨鸭梨/kg桃子桃子/kg总量总量/kg2011576840?2012608372?2013405669?可以定义a5、b5、c5三个一维数组,分别存放小明、小强、小梅的编号、三种水果和总量信息,然后分别计算每位选手摘的水果的总量,最后通过比较a4、b4、c4的大小对选手进行排序。若参赛选手为n位,需将选手的
14、采摘总量组织成一维数组以方便排序。表格中的数据除了行上面的关系,还具有了列上面的关系,从而形成二维数组。6.3二维数组18初始化s35计算参赛选手摘水果总量s04s14?s0和s1交换s14s24?s1和s2交换FTTF输出结果#include#define M 3#define N 5void main()int i,j,k,temp,sMN=2011,57,68,40,0,2012,60,83,72,0,2013,44,56,69,0;for(i=0;iM;i+)for(j=1;jN-1;j+)siN-1=siN-1+sij;for(i=0;iM-1;i+)for(j=0;jM-1-i;j
15、+)if(sjN-1sj+1N-1)for(k=0;kN;k+)temp=sjk;sjk=sj+1k;sj+1k=temp;printf(名次 号码 葡萄 鸭梨 桃子 总量n);for(i=0;iM;i+)printf(%4d%5d%5d%5d%5d%5dn,i+1,si0,si1,si2,si3,si4);6.3二维数组2.二维数组定义l类型名 数组名常量表达式1常量表达式2例如:int a23“常量表达式1”指定二维数组行数;“常量表达式2”指定二维数组列数。l二维数组的元素采用下标法:数组名行标值列标值 l二维数组元素初始化(2)对数组的部分元素赋初始值。int a34=1,5,9;in
16、t a4=1,0,6,0,0,11;int a4=1,0,0,0,5,6;当批量数据出现两个方向顺序关系(1)对数组的全部元素赋初始值。a.整体赋初始值:int a34=1,2,3,4,5,6,7,8,9,10,11,12;b.分行赋初始值:int a34=1,2,3,4,5,6,7,8,9,10,11,12;19112012001002210122int arr2 =1,2,3,4,5,6;错误错误6.3二维数组a0a1a2a00a01a02a03a10a11a12a13a20a21a22a23二维数组int a34逻辑上:可以看成一个矩阵a00a01a02a03a10a11a12a13a2
17、0a21a22a23第1行第2行第3行第1列 第2列 第3列 第4列a0表示第1行首地址a1表示第2行首地址a2表示第3行首地址3.二维数组与一维数组的关系20物理上:可以看成一个一维数组数组a0数组a1数组a2特别强调:定义一个二维数组int a34后,二维数组a可以看成一维数组,这个一维数组里面有a0,a1,a2三个元素。三个元素a0,a1,a2又是数组名,表示以int为存储单位的存储空间。a是二维数组名表示地址,表示长度为3个int的一维数组为存储单位的存储空间。6.3二维数组214.求矩阵中各行各列之和12 4 612 4 615 7 915 7 9 8 23 38 23 3 2 5
18、1712 4 6 12 4 6 222215 7 9 15 7 9 3131 8 23 3 8 23 3 3434 2 5 17 2 5 17 242437 39 35 111#include#include void mvoid main()ain()int x54,i,j;int x54,i,j;for(i=0;i 4;i+)for(i=0;i 4;i+)for(j=0;j 3;j+)for(j=0;j 3;j+)scanf(%d,&xij);scanf(%d,&xij);for(i=0;i 3;i+)for(i=0;i 3;i+)x4i=0;x4i=0;for(j=0;j 5;j+)fo
19、r(j=0;j 5;j+)xj3=0;xj3=0;for(i=0;i 4;i+)for(i=0;i 4;i+)for(j=0;j 3;j+)for(j=0;j 3;j+)xi3+=xij;xi3+=xij;x4j+=xij;x4j+=xij;x43+=xij;x43+=xij;for(i=0;i 5;i+)for(i=0;i 5;i+)for(i=0;i 5;i+)for(j=0;j 4;j+)for(j=0;j 4;j+)for(j=0;j 4;j+)printf(%5dt,xij);printf(%5dt,xij);printf(%5dt,xij);printf(n);printf(n);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1.6-第6章 数组类型C语言程序设计 1.6 数组 类型 语言程序设计
限制150内