C语言数组详解.ppt
《C语言数组详解.ppt》由会员分享,可在线阅读,更多相关《C语言数组详解.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、L就是一组具有就是一组具有就是一组具有就是一组具有固定数目的固定数目的固定数目的固定数目的、有序的有序的有序的有序的、类型相同类型相同类型相同类型相同的的的的数据的集合。根据数组下标的多少,数组可以分为数据的集合。根据数组下标的多少,数组可以分为数据的集合。根据数组下标的多少,数组可以分为数据的集合。根据数组下标的多少,数组可以分为一维数组和多维数组。一维数组和多维数组。一维数组和多维数组。一维数组和多维数组。n例如:一个班级有例如:一个班级有3030个学生,可以用个学生,可以用g g1 1,g,g2 2,g,g3030代表学生的成绩,其中代表学生的成绩,其中g g是数组名,下是数组名,下标代
2、表学生的序号。由于在标代表学生的序号。由于在C C语言中无法表示下标,语言中无法表示下标,所以就引入了所以就引入了 表示下标。表示下标。ng1:g1:第第1 1个学生的成绩个学生的成绩ngi:gi:第第i i个学生的成绩等等个学生的成绩等等(一)一维数组(一)一维数组(1 1)定义及使用定义及使用类型说明符类型说明符类型说明符类型说明符 数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式 int a10 int a10任一种任一种基基本数据类本数据类型型或构造或构造数据类型。数据类型。用户自定义的数组用户自定义的数组名字,其定名规则名字,其定名规则与变量名定名规则与变量名定名规
3、则一样,都需遵循一样,都需遵循标标识符定名规则识符定名规则表示元素表示元素的个数,的个数,即数组长即数组长度。度。下标运下标运算符算符单目运算符单目运算符优先级优先级(1)左结合左结合不能用不能用()注意:注意:1.数组名数组名不能不能与其它变量名相同与其它变量名相同voidmain()inta;floata10;(一)一维数组(一)一维数组(1 1)定义及使用定义及使用2.2.不能在方括号中用不能在方括号中用不能在方括号中用不能在方括号中用变量变量来表示元素的个来表示元素的个来表示元素的个来表示元素的个数,但可以是数,但可以是数,但可以是数,但可以是符号常数或常量表达式符号常数或常量表达式。
4、int n;int n;scanf(%d,&n);scanf(%d,&n);/*/*表示维表示维表示维表示维数的只能是常量数的只能是常量数的只能是常量数的只能是常量*/*/int an;int an;#define FD 5#define FD 5 void main()void main()int a3+2,b7+FD;int a3+2,b7+FD;(一)一维数组(一)一维数组(1 1)定义及使用定义及使用3.方括号中常量表达式表示数组元素方括号中常量表达式表示数组元素的个数。的个数。如如int a5:数组数组a有有5个元个元素,其素,其下标从下标从0开始开始,分别为,分别为a0,a1,a2
5、,a3,a4。4.允许在同一个类型说明中说明多个数允许在同一个类型说明中说明多个数组和多个变量。组和多个变量。例如:例如:int a,b,c,d,k110,k220;如果出现数如果出现数如果出现数如果出现数组越界,组越界,组越界,组越界,编译系统编译系统编译系统编译系统没有提示没有提示没有提示没有提示的。的。的。的。(一)一维数组(一)一维数组(1 1)定义及使用定义及使用E 数组必须数组必须数组必须数组必须先定义,然后使用先定义,然后使用先定义,然后使用先定义,然后使用。E 数组元素的表示形式为:数组元素的表示形式为:数组元素的表示形式为:数组元素的表示形式为:数组名数组名数组名数组名 下标
6、下标下标下标 E C C语言规定语言规定语言规定语言规定只能逐个引用数组元素只能逐个引用数组元素只能逐个引用数组元素只能逐个引用数组元素而不能一次而不能一次而不能一次而不能一次引用整个数组。引用整个数组。引用整个数组。引用整个数组。p可以是整型常量可以是整型常量或整型表达式或整型表达式(一)一维数组(一)一维数组(2 2)引用引用O 全部初始化全部初始化O 部分初始化部分初始化O 使用输入函数使用输入函数scanf初始化初始化O 使用表达式赋值使用表达式赋值int a10=0,1,2,3,4,5,6,7,8,9;a0=0;a1=1;a2=2;a3=3;a4=4;a5=5;a6=6;a7=7;a
7、8=8;a9=9;int a10=0,1,2,3;a0=0;a1=1;a2=2;a3=3;a4=0;a5=0;a6=0;a7=0;a8=0;a9=0;int a10;for(int i=0;i10;i+)scanf(%d,&ai);int a10=0,1,2,3;a4=a3+2;对全部数组元素赋初值时,数组对全部数组元素赋初值时,数组对全部数组元素赋初值时,数组对全部数组元素赋初值时,数组长度可以省略长度可以省略长度可以省略长度可以省略(一)一维数组(一)一维数组(3 3)初始化初始化int a5=1,2,3,4,5;54321a4a3a2a1a020202016201220082004a#i
8、nclude#include void main()void main()int a5=0,1,2,3,4;int a5=0,1,2,3,4;for(int i=0;i5;i+)for(int i=0;i5;i+)printf(a%d=%d,printf(a%d=%d,其地址是其地址是其地址是其地址是%dn,i,ai%dn,i,ai,&ai,&ai););printf(printf(数组的首地址为数组的首地址为数组的首地址为数组的首地址为:%dn,:%dn,a a););printf(printf(数组数组数组数组a a在内存中占字节数在内存中占字节数在内存中占字节数在内存中占字节数:%dn,
9、:%dn,sizeof(a)sizeof(a););数组名表示数组名表示数组数组的起始地址的起始地址,是,是一个地址常量一个地址常量程序举例程序举例程序举例程序举例1 1 1 1:用选择排序法进行排序。用选择排序法进行排序。用选择排序法进行排序。用选择排序法进行排序。选择排序法是编程中经常用的一种排序算选择排序法是编程中经常用的一种排序算选择排序法是编程中经常用的一种排序算选择排序法是编程中经常用的一种排序算法。具体如下:法。具体如下:法。具体如下:法。具体如下:先将先将先将先将5 5 5 5个数中最小的数与个数中最小的数与个数中最小的数与个数中最小的数与a0a0a0a0对换,再将对换,再将对
10、换,再将对换,再将a1a1a1a1到到到到a4a4a4a4中最小的数与中最小的数与中最小的数与中最小的数与a1a1a1a1对换,这样每比对换,这样每比对换,这样每比对换,这样每比较一轮,找出一个未经排序的数中最小的一较一轮,找出一个未经排序的数中最小的一较一轮,找出一个未经排序的数中最小的一较一轮,找出一个未经排序的数中最小的一个。共比较个。共比较个。共比较个。共比较4 4 4 4轮。轮。轮。轮。int a5=3,6,1,9,4;int a5=3,6,1,9,4;int a5=3,6,1,9,4;int a5=3,6,1,9,4;1.4 1.4一维数组程序举例一维数组程序举例a0 a1 a2
11、a3 a4a0 a1 a2 a3 a4 3 6 1 9 4 3 6 1 9 4 未排序的情况未排序的情况 1 6 3 9 4 1 6 3 9 4 将将5 5个数中最小的数个数中最小的数1 1与与 a0 a0对换对换 1 3 6 9 4 1 3 6 9 4 将余下的将余下的4 4个数中最小的数个数中最小的数 3 3与与a1 a1 对换对换 1 3 4 9 6 1 3 4 9 6 将余下的将余下的3 3个数中最小的数个数中最小的数 4 4与与a2 a2 对换对换 1 3 4 6 9 1 3 4 6 9 将余下的将余下的2 2个数中最小的数个数中最小的数 6 6与与 a3 a3 对换对换main()
12、main()int i,j,k,t;int i,j,k,t;int a5=3,6,1,9,4;int a5=3,6,1,9,4;for(i=0;i sizeof(a)/sizeof(int)1;i+)for(i=0;i sizeof(a)/sizeof(int)1;i+)k=i;k=i;for(j=i+1;j sizeof(a);j+)for(j=i+1;j sizeof(a);j+)if(aj ak)k=j;if(aj ak)k=j;if(k!=i)if(k!=i)t=ai;ai=ak;ak=t;t=ai;ai=ak;ak=t;N 数组的起始下标、最后一个元素的下标数组的起始下标、最后一个元
13、素的下标数组的起始下标、最后一个元素的下标数组的起始下标、最后一个元素的下标N 定义数组时不指定长度定义数组时不指定长度定义数组时不指定长度定义数组时不指定长度(动态数组动态数组动态数组动态数组)N 对数值型数组进行整体操作对数值型数组进行整体操作对数值型数组进行整体操作对数值型数组进行整体操作N 用用用用scanfscanf语句时,数组元素前应加语句时,数组元素前应加语句时,数组元素前应加语句时,数组元素前应加&语句错误,不了解数组定义时与数组元语句错误,不了解数组定义时与数组元语句错误,不了解数组定义时与数组元语句错误,不了解数组定义时与数组元素使用时的区别素使用时的区别素使用时的区别素使
14、用时的区别:scanf(“%d”,a10);scanf(“%d”,a10);N 一维数组的定义、初始化、引用、输入、输一维数组的定义、初始化、引用、输入、输一维数组的定义、初始化、引用、输入、输一维数组的定义、初始化、引用、输入、输出概念、操作必须掌握出概念、操作必须掌握出概念、操作必须掌握出概念、操作必须掌握N 数组中的所有元素,数据类型都一致数组中的所有元素,数据类型都一致数组中的所有元素,数据类型都一致数组中的所有元素,数据类型都一致N 数组名字代表数组的首地址,是一个常量数组名字代表数组的首地址,是一个常量数组名字代表数组的首地址,是一个常量数组名字代表数组的首地址,是一个常量N数组元
15、素具有和相同单个变量一样的属性,凡数组元素具有和相同单个变量一样的属性,凡数组元素具有和相同单个变量一样的属性,凡数组元素具有和相同单个变量一样的属性,凡允许使用单个变量的地方均可以使用数组元素允许使用单个变量的地方均可以使用数组元素允许使用单个变量的地方均可以使用数组元素允许使用单个变量的地方均可以使用数组元素(二)二维数组(二)二维数组定义及使用定义及使用这儿只讨论二维数组,多维数组可由二维数组这儿只讨论二维数组,多维数组可由二维数组推导得出推导得出二维数组定义的一般形式为:二维数组定义的一般形式为:类型说明符类型说明符数组名数组名常量表达式常量表达式常量表达常量表达式式第一常量表达式为行
16、数,第二个为列数第一常量表达式为行数,第二个为列数inta34;floata3,4,b5,10;/*错误错误*/二维数组中的元素在二维数组中的元素在内存中的排列顺序是:按内存中的排列顺序是:按行存放,即先顺序存放第行存放,即先顺序存放第一行的元素,再存放第二一行的元素,再存放第二行的元素行的元素 二二二二维数组在内存中的存放维数组在内存中的存放维数组在内存中的存放维数组在内存中的存放下图表示对下图表示对下图表示对下图表示对a a3 34 4数组存放的顺序数组存放的顺序数组存放的顺序数组存放的顺序 int a23=1,2,3,4,5,6;a0654321a12a11a10a02a01202220
17、18201420102006a002002a1(二)二维数组(二)二维数组存储方式存储方式#include#include void main()void main()int a23=1,2,3,4,5,6,i,j;int a23=1,2,3,4,5,6,i,j;for(i=0;i2;i+)for(i=0;i2;i+)for(j=0;j3;j+)for(j=0;j3;j+)printf(printf(第第第第a%d%da%d%d元素元素元素元素=%d=%d,其地,其地,其地,其地址为址为址为址为:%dn,i,j,aij,&aij);:%dn,i,j,aij,&aij);printf(a=%dt
18、a0=%dta1=%dn,a,a0,printf(a=%dta0=%dta1=%dn,a,a0,a1);a1);(二)二维数组(二)二维数组引用引用二维数组的表示形式:二维数组的表示形式:数组名数组名下标下标下标下标注意:注意:N 下标可以是整型表达式,如下标可以是整型表达式,如a2-12*2-1N 数组元素可以出现在表达式中,也可以被赋值数组元素可以出现在表达式中,也可以被赋值 b12=a23/2;N 在使用数组元素时,应该注意下标值应在已定在使用数组元素时,应该注意下标值应在已定义的数组大小范围内义的数组大小范围内 int a34;a34=5;N 严格区分在定义数组时用的严格区分在定义数组
19、时用的a34和引用元素和引用元素时的时的a34O 全部初始化全部初始化O 部分初始化部分初始化O 使用输入函数使用输入函数scanf初始化初始化int a23=0,1,2,3,4,5;int a23=0,1,20,1,2,3,4,53,4,5;a00=0;a01=1;a02=2;a10=3;a11=4;a12=5;int a23=int a23=0,1,20,1,2;int a23=0,1;int a23=0,1;a00=0;a01=1;a02=2;a10=0;a11=0;a12=0;int a23;for(int i=0;i2;i+)for(int j=0;j3;j+)scanf(%d,&a
20、ij);对全部数组元素赋初值时,第一对全部数组元素赋初值时,第一对全部数组元素赋初值时,第一对全部数组元素赋初值时,第一维的长度可以省略维的长度可以省略维的长度可以省略维的长度可以省略(二)二维数组(二)二维数组初始化初始化(二)二维数组(二)二维数组程序举例程序举例例例例例3 3:一个学习小组有:一个学习小组有:一个学习小组有:一个学习小组有5 5个人,每个人有三门课的考试个人,每个人有三门课的考试个人,每个人有三门课的考试个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。成绩。求全组分科的平均成绩和各科总平均成绩。成绩。求全组分科的平均成绩和各科总平均成绩。成绩。求全组
21、分科的平均成绩和各科总平均成绩。EnglishMathC张张807592王王616571李李596370赵赵858790周周767785(二)二维数组(二)二维数组程序举例程序举例例例例例3 3:一个学习小组有:一个学习小组有:一个学习小组有:一个学习小组有5 5个人,每个人有三门课的考试成绩。求全个人,每个人有三门课的考试成绩。求全个人,每个人有三门课的考试成绩。求全个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。组分科的平均成绩和各科总平均成绩。组分科的平均成绩和各科总平均成绩。组分科的平均成绩和各科总平均成绩。for i=0 to 2for i=0 to 2for
22、j=0 to 4for j=0 to 4sumi+=scoreijsumi+=scoreijavgi=sumi/5avgi=sumi/5for i=0 to 2for i=0 to 2output avgioutput avgiavg+=avgiavg+=avgioutput avg/3output avg/3#include#define N 3#define M 5#include#define N 3#define M 5void main()void main()float scoreNM,avg1=0,avgN,sumN=0;float scoreNM,avg1=0,avgN,sum
23、N=0;int i,j;int i,j;for(i=0;iN;i+)for(i=0;iN;i+)for(j=0;jM;j+)for(j=0;jM;j+)printf(printf(第第第第%d%d门课门课门课门课,第第第第%d%d个学生的成绩个学生的成绩个学生的成绩个学生的成绩:,i,j);:,i,j);scanf(%f,&scoreij);scanf(%f,&scoreij);for(i=0;iN;i+)for(i=0;iN;i+)for(j=0;jM;j+)for(j=0;jM;j+)sumi+=scoreij;sumi+=scoreij;avgi=sumi/M;avgi=sumi/M;f
24、or(i=0;iN;i+)for(i=0;iN;i+)printf(printf(第第第第%d%d门课的平均成绩为门课的平均成绩为门课的平均成绩为门课的平均成绩为%.2fn,i,avgi);%.2fn,i,avgi);avg1+=avgi;avg1+=avgi;printf(printf(各科总平均成绩为各科总平均成绩为各科总平均成绩为各科总平均成绩为%.2fn,avg1/N);%.2fn,avg1/N);二维数组在内存中是按行存放二维数组在内存中是按行存放二维数组在内存中是按行存放二维数组在内存中是按行存放 数组元素的下标每一维都是从数组元素的下标每一维都是从数组元素的下标每一维都是从数组元
25、素的下标每一维都是从0 0开始的开始的开始的开始的 数值型数组不能够整体引用数值型数组不能够整体引用数值型数组不能够整体引用数值型数组不能够整体引用 可以把二维数组看成是一个特殊的一维数组,可以把二维数组看成是一个特殊的一维数组,可以把二维数组看成是一个特殊的一维数组,可以把二维数组看成是一个特殊的一维数组,即其元素是一个一维数组即其元素是一个一维数组即其元素是一个一维数组即其元素是一个一维数组 二维数组初始化有两种方法:按行赋值或者二维数组初始化有两种方法:按行赋值或者二维数组初始化有两种方法:按行赋值或者二维数组初始化有两种方法:按行赋值或者一行赋值一行赋值一行赋值一行赋值(三)字符数组(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数组 详解
限制150内