C语言程序设计第七章利用数组处理数据.ppt
《C语言程序设计第七章利用数组处理数据.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第七章利用数组处理数据.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 C程序设计程序设计主讲人:袁丽主讲人:袁丽燕大里仁基础教学部第七章:利用数组处理批量数据第七章:利用数组处理批量数据1 定义和引用一维数组定义和引用一维数组2 定义和引用二维数组定义和引用二维数组3 字符数组字符数组引:引:u前几章前几章使用的变量都属于使用的变量都属于基本类型基本类型,例如整型、字符型、,例如整型、字符型、浮点型数据,这些都是简单的数据类型。浮点型数据,这些都是简单的数据类型。u对于有些数据,只用简单的数据类型是不够的,对于有些数据,只用简单的数据类型是不够的,难以难以反映反映出数据的出数据的特点特点,也难以有效地进行处理。,也难以有效地进行处理。u如果有如果有100010
2、00名学生名学生,每个学生有一个成绩,需要求这每个学生有一个成绩,需要求这10001000名学生的平均成绩。名学生的平均成绩。u用用s s1 1,s,s2 2,s,s3 3,s,s10001000表示每个学生的成绩,能体现表示每个学生的成绩,能体现内在联系内在联系。uC C语言用方括号中的数字表示下标,如用语言用方括号中的数字表示下标,如用s15s15表示表示数组名数组名u数组是一组数组是一组有序数据的集合有序数据的集合。数组中各数据的排列是有一。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号定规律的,下标代表数据在数组中的序号u用一个用一个数组名数组名和和下标下标惟一确定数组中
3、的元素惟一确定数组中的元素u数组中的每一个元素都属于数组中的每一个元素都属于同一个数据类型同一个数据类型回顾:回顾:前面使用的数据类型都属于基本类型:整型,实型,字符型。前面使用的数据类型都属于基本类型:整型,实型,字符型。其存储特点是:其存储特点是:每个变量单独存储每个变量单独存储,亦称简单变量。,亦称简单变量。如:如:X=a;Y1=0X=a;Y1=0;Y2=2Y2=2*x;x;各变量之间独立存放,无任何联系。各变量之间独立存放,无任何联系。在在C C语言中,还有另外一些复杂类型,合称为构造类型。语言中,还有另外一些复杂类型,合称为构造类型。构造类型:是由基本类型构造而成的。如数组、结构体、
4、共同体等构造类型:是由基本类型构造而成的。如数组、结构体、共同体等 构造类型的每一个分量是一个变量,它可以是一个简单类型或构造类型的每一个分量是一个变量,它可以是一个简单类型或构造类型。构造类型。构造类型的分量构造类型的分量占用相邻的存储空间占用相邻的存储空间。数组概念的引入:数组概念的引入:计算机处理数据时,经常出现数据是用某种有序的形式进行组织计算机处理数据时,经常出现数据是用某种有序的形式进行组织的情况。的情况。例如:按学号排列的成绩表例如:按学号排列的成绩表 这些数据具有共同的特征:这些数据具有共同的特征:1.1.都是由若干个分量组成;都是由若干个分量组成;2.2.数据的诸分量都是同一
5、类型(可取任何数据类型);数据的诸分量都是同一类型(可取任何数据类型);3.3.这些分量是按一定顺序排列的;这些分量是按一定顺序排列的;数组:按序排列的具有相同类型的变量的集合。数组:按序排列的具有相同类型的变量的集合。学习数组应该注意的问题:学习数组应该注意的问题:数组的首地址,数组元素的类型和个数(数组长度)数组的首地址,数组元素的类型和个数(数组长度)定义一维数组定义一维数组一、定义和引用一维数组一、定义和引用一维数组 引用一维数组引用一维数组 一维数组的初始化一维数组的初始化 一维数组程序举例一维数组程序举例 定义一维数组定义一维数组n一维数组是数组中最简单的一维数组是数组中最简单的n
6、它的元素只需要用数组名加一个下标,就能惟一确定它的元素只需要用数组名加一个下标,就能惟一确定n要使用数组,必须在程序中先定义数组要使用数组,必须在程序中先定义数组n定义一维数组的一般形式为:定义一维数组的一般形式为:类型符类型符 数组名数组名 常量表达式常量表达式;其中:其中:类型符是任一种基本数据类型或构造数据类型。类型符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。例如:例如:int a10;int a10;说明整型数组说明整
7、型数组a a,有,有1010个元素。个元素。float b10,c20;float b10,c20;说明实型数组说明实型数组b b,有,有1010个元素,实型数组个元素,实型数组c c,有,有2020个元素。个元素。char ch20;char ch20;说明字符数组说明字符数组chch,有,有2020个元素。个元素。对于数组类型说明应注意以下几点:对于数组类型说明应注意以下几点:u数组的类型实际上是指数组元素的取值类型。对于同一个数组,数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。其所有元素的数据类型都是相同的。u数组名的书写规则应符合标识符的书写规
8、定。数组名的书写规则应符合标识符的书写规定。u数组名不能与其它变量名相同。数组名不能与其它变量名相同。例如:例如:main()main()int a;int a;float a10;float a10;是错误的。是错误的。u方括号中常量表达式表示数组元素的个数,如方括号中常量表达式表示数组元素的个数,如a5a5表示数组表示数组a a有有 5 5个元素。但是其下标从个元素。但是其下标从0 0开始计算。因此开始计算。因此5 5个元素分别为个元素分别为a0,a1,a2,a3,a4a0,a1,a2,a3,a4。u不能在方括号中用不能在方括号中用变量变量来表示元素的个数,来表示元素的个数,但是可以是符但
9、是可以是符号常数或常量表达式。号常数或常量表达式。例如:例如:#define FD 5#define FD 5 main()main()int a3+2,b7+FD;int a3+2,b7+FD;是合法的。是合法的。但是下述说明方式是错误的。但是下述说明方式是错误的。main()main()int n=5;int n=5;int an;int an;u允许在同一个类型说明中,说明多个数组和多个变量。允许在同一个类型说明中,说明多个数组和多个变量。例如:例如:int a,b,c,d,k110,k220;int a,b,c,d,k110,k220;1.1.数组名命名规则和简单变量名相同;数组名命名
10、规则和简单变量名相同;2.2.数组名后只能用方括号括起来的常量(常量表达式和符号常量);数组名后只能用方括号括起来的常量(常量表达式和符号常量);3.3.常量表达式的值确定数组元素的个数常量表达式的值确定数组元素的个数定义定义即提供以下的信息:即提供以下的信息:名,类型,维数,长度名,类型,维数,长度,从而分配空间。,从而分配空间。一维数组的存储:一维数组的存储:计算机中用连续的内存单元存放各个元素。计算机中用连续的内存单元存放各个元素。如:如:int a5;int a5;其内存存储为:其内存存储为:保存数组所需内存量与数组元素的基本类型和数组大小有关。保存数组所需内存量与数组元素的基本类型和
11、数组大小有关。总字节数总字节数=sizeof(=sizeof(基本类型)基本类型)*数组元素个数数组元素个数如上例:如上例:=sizeof(int=sizeof(int)*5 5第第i i个元素的地址个元素的地址=第第1 1个元素的地址个元素的地址+i+i*sizeofsizeof(基本类型)(基本类型)引用一维数组引用一维数组 数组元素是组成数组的基本单元。数组元素也是一种变量,数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。顺序号。数组元素的一般形式为:数组元素的一般
12、形式为:数组名数组名 下标下标 其中下标只能为整型常量或整型表达式。其中下标只能为整型常量或整型表达式。例如:例如:a5a5ai+jai+jai+ai+都是合法的数组元素。都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组,数组元素通常也称为下标变量。必须先定义数组,才能使用才能使用下标变量。在语言中只能逐个地使用下标变量,而不能一次下标变量。在语言中只能逐个地使用下标变量,而不能一次引用整个数组。引用整个数组。例如,输出有例如,输出有1010个元素的数组必须使用循环语句逐个输出各个元素的数组必须使用循环语句逐个输出各下标变量:下标变量:for(i=0;i10;i+)for(i=0
13、;i10;i+)printf(%d,ai);printf(%d,ai);而不能用一个语句输出整个数组。而不能用一个语句输出整个数组。下面的写法是错误的:下面的写法是错误的:printf(%d,a);printf(%d,a);例:例:对对1010个数组元素依次赋值为个数组元素依次赋值为0,1,2,3,4,5,6,7,8,90,1,2,3,4,5,6,7,8,9,要求按逆序,要求按逆序输出。输出。解题思路:解题思路:定义一个长度为定义一个长度为1010的数组,数组定义为整型的数组,数组定义为整型要赋的值是从要赋的值是从0 0到到9 9,可以用循环来赋值,可以用循环来赋值用循环按下标从大到小输出这用
14、循环按下标从大到小输出这1010个元素个元素#include#include int main()int main()int i,a10;int i,a10;for(i=for(i=0 0;i=;i=;i=0 0;i-);i-)printf(%d,ai);printf(%d,ai);printf(n);printf(n);return 0;return 0;使使a0a9的值为的值为09先输出先输出a9,最后输出,最后输出a0一维数组的初始化一维数组的初始化数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式为:初始化赋值的一般
15、形式为:类型说明符类型说明符 数组名数组名 常量表达式常量表达式=值,值值,值值值;其中在其中在 中的各数据值即为各元素的初值,各值之间用逗号中的各数据值即为各元素的初值,各值之间用逗号间隔。间隔。例如:例如: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=0;a1=1.a9=9;a0=0;a1=1.a9=9;语言对数组的初始化赋值还有以下几点规定:语言对数组的初始化赋值还有以下几点规定:1.1.可以只给部分元素赋初值。可以只给部分元素赋初值。当当 中值的个数少于元素个数时,只中值的个数少于元素个数时,只 给前面
16、部分元素赋值。给前面部分元素赋值。例如:例如:int a10=0,1,2,3,4;int a10=0,1,2,3,4;表示只给表示只给a0a0a45a45个元素赋值,而后个元素赋值,而后5 5个元素自动赋个元素自动赋0 0值。值。2.2.只能给元素逐个赋值,不能给数组整体赋值。只能给元素逐个赋值,不能给数组整体赋值。例如给例如给1010个元素全部赋个元素全部赋1 1值,只能写为:值,只能写为:int a10=1,1,1,1,1,1,1,1,1,1;int a10=1,1,1,1,1,1,1,1,1,1;而不能写为:而不能写为:int a10=1;int a10=1;3.3.如给全部元素赋值,则
17、在数组说明中,如给全部元素赋值,则在数组说明中,可以不给出数组元素的可以不给出数组元素的个数。个数。例如:例如:int a5=1,2,3,4,5;int a5=1,2,3,4,5;可写为:可写为:int a=1,2,3,4,5;int a=1,2,3,4,5;一维数组程序举例一维数组程序举例例:有例:有1010个地区的面积,要求对它们按由小到大的顺序排列。个地区的面积,要求对它们按由小到大的顺序排列。解题思路:解题思路:u排序的规律有两种:一种是排序的规律有两种:一种是“升序升序”,从小到大;另一种从小到大;另一种是是“降序降序”,从大到小,从大到小u把题目抽象为:把题目抽象为:“对对n n个
18、数按升序排序个数按升序排序”u采用起泡法排序采用起泡法排序a0a1a2a3a4a5985420895420859420854920854290854209for(i=0;ifor(i=0;iai+1)if(aiai+1)t=ai;ai=ai+1;ai+1=t;t=ai;ai=ai+1;ai+1=t;大数沉淀,小数起泡大数沉淀,小数起泡a0a1a2a3a4a5854209584209548209542809542089for(i=0;ifor(i=0;iai+1)if(aiai+1)t=ai;ai=ai+1;ai+1=t;t=ai;ai=ai+1;ai+1=t;a0a1a2a3a4a554208
19、9452089425089420589for(i=0;ifor(i=0;iai+1)if(aiai+1)t=ai;ai=ai+1;ai+1=t;t=ai;ai=ai+1;ai+1=t;a0a1a2a3a4a5420589240589204589for(i=0;ifor(i=0;iai+1)if(aiai+1)t=ai;ai=ai+1;ai+1=t;t=ai;ai=ai+1;ai+1=t;a0a1a2a3a4a5204589024589for(i=0;ifor(i=0;iai+1)if(aiai+1)t=ai;ai=ai+1;ai+1=t;t=ai;ai=ai+1;ai+1=t;for(i=0;
20、ifor(i=0;iai+1)if(aiai+1)for(i=0;ifor(i=0;iai+1)if(aiai+1)for(i=0;ifor(i=0;iai+1)if(aiai+1)for(j=0;j5;j+)for(j=0;j5;j+)for(i=0;ifor(i=0;iai+1)if(aiai+1)int a10;int i,j,t;int a10;int i,j,t;printf(input 10 numbers:n);printf(input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i10;i+)scanf(%d,&ai);
21、printf(n);printf(n);for(j=0;j9;j+)for(j=0;j9;j+)for(i=0;i9-j;i+)for(i=0;iai+1)if(aiai+1)t=ai;ai=ai+1;ai+1=t;t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers:n);printf(the sorted numbers:n);for(i=0;i10;i+)printf(%d,ai);for(i=0;i10;i+)printf(%d,ai);printf(n);printf(n);二、定义和引用二维数组二、定义和引用二维数组 定义二维数组定义二维数组
22、引用二维数组引用二维数组 二维数组的初始化二维数组的初始化 二维数组程序举例维数组程序举例 定义二维数组定义二维数组u二维数组定义的一般形式为二维数组定义的一般形式为 类型符类型符 数组名数组名 常量表达式常量表达式 常量表达式常量表达式;如:如:float a34,b510;float a34,b510;u二维数组可被看作是一种特殊的一维数组:二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组它的元素又是一个一维数组u例如,把例如,把a a看作是一个一维数组,它有看作是一个一维数组,它有3 3个元素:个元素:a0 a0、a1a1、a2a2 每个元素又是一个包含每个元素又是一个包含
23、4 4个元素的一维数组个元素的一维数组a0a1a2逻辑存储逻辑存储内存中的存储顺序内存中的存储顺序引用二维数组的元素引用二维数组的元素n二维数组元素的表示形式为二维数组元素的表示形式为:数组名下标下标数组名下标下标nb12=a23/2 b12=a23/2 合法合法nfor(i=0;im;i+)for(i=0;im;i+)printf(“%d,%dn”,ai0,a0i);printf(“%d,%dn”,ai0,a0i);合法合法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 a34=1,2,3,4
24、,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,5,9;int a34=1,5,9;等价于等价于int a34=1,0,0,0,5,0,0,0,9,0,0,0;int a34=1,0,0,0,5,0,0,0,9,0,0,0;int a34=1,5,6;int a34=1,5,6;相当于相当于int a34=1,5,6,0;int a34=1,5,6,0;二维数组的初始化二维数组的初始化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,1
25、1,12;等价于:等价于:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;int a 4=1,2,3,4,5,6,7,8,9,10,11,12;int a4=0,0,3,0,10;int a4=0,0,3,0,10;合法合法二维数组程序举例二维数组程序举例 例:将一个二维数组行和列的元素互换,存到另一个二维数组中。例:将一个二维数组行和列的元素互换,存到另一个二维数组中。解题思路:解题思路:可以定义两个数组:数组可以定义两个数组:数组a a为为2 2行行3 3列,存放指定的列,存放指定的6 6个数个数数组数组b b为为3 3行行2 2列,开始时未赋值列,开始时未赋值将将a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第七 利用 数组 处理 数据
限制150内