C语言课件:7_第七章 数组The Array)

举报
资源描述
第七章第七章 数数 组组(The Array)掌掌握握一一维维数数组组、二二维维数数组组的的定定义义、初初始化和引用。始化和引用。掌掌握握字字符符串串和和字字符符数数组组的的概概念念及及其其处处理函数。理函数。掌握用数组进行编程的技术。掌握用数组进行编程的技术。先看一个例子:先看一个例子:例:给出给出10个儿童的体重,要求计算平均体重个儿童的体重,要求计算平均体重 并打印出低于平均体重的数值。并打印出低于平均体重的数值。用变量来解决问题:main()int w1,w2,w3,w4,w5,w6,w7,w8,w9,w10;int t;scanf(%d%d%d%d%d%d%d%d%d%d,&w1,&w2,&w3,w4,&w5,&w6,&w7,&w8,&w9,&w10);t=(w1+w2+w3+w4+w5+w6+w7+w8+w9+w10)/10;if(w1 t)printf(%dn,w1);if(w2 t)printf(%dn,w2);if(w3 t)printf(%dn,w3);if(w4 t)printf(%dn,w4);if(w5 t)printf(%dn,w5);if(w6 t)printf(%dn,w6);if(w7 t)printf(%dn,w7);if(w8 t)printf(%dn,w8);if(w9 t)printf(%dn,w9);if(w10 t)printf(%dn,w10);用数组来解决问题:main()int w10;/*定义 1 个整型数组存放体重*/int sum=0,t,i;for(i=0;i10;i+)scanf(%d,&wi);for(i=0;i10;i+)sum+=wi;t=sum/10;for(i=0;i10;i+)if(wi t)printf(%dn,wi);数组及其相关概念数组及其相关概念 数组数组是一组有序的、类型相同的单元的集合,是一组有序的、类型相同的单元的集合,这些单元被称为这些单元被称为数组的元素数组的元素。数组下标数组下标 每个数组都有一个名字,称之为每个数组都有一个名字,称之为数组名数组名。为为标标识识数数组组中中的的每每个个元元素素,需需要要对对它它们们进进行行编编号号,称为称为数组元素的下标数组元素的下标。下下标标使使数数组组元元素素在在数数组组中中的的位位置置(或或排排列列顺顺序序)被被唯唯一一地地确确定定下下来来;用用数数组组名名加加上上下下标标可可以以准准确确地地访访问数组中的某个元素。问数组中的某个元素。如:如:w0代表数组代表数组w中的第一个元素中的第一个元素 w9代表数组代表数组w中的第十个元素中的第十个元素 注意注意:C语言规定下标从语言规定下标从0开始。开始。说明说明:数组名代表数组的起始地址。数组名代表数组的起始地址。数组元素在内存中是连续存储的。数组元素在内存中是连续存储的。7.1 一维数组的定义和引用(One Dimension Array)一、一维数组的定义一、一维数组的定义定义一维数组的一般方式:定义一维数组的一般方式:类型说明符类型说明符 数组名数组名常量表达式常量表达式;指明数组元素指明数组元素的数据类型的数据类型指明数组所含指明数组所含的元素个数的元素个数例如:例如:int a10;/*定义的整型数组定义的整型数组a含含10个元素个元素*/float b20;/*定义的实型数组定义的实型数组b含含20个元素个元素*/说明:说明:数组名的命名规则同变量名的命名规则一样;数组名的命名规则同变量名的命名规则一样;数组名后用方括号数组名后用方括号,不能用(),不能用();常量表达式必须是常量表达式必须是大于大于0的整型常量表达式的整型常量表达式,不不 能包含变量能包含变量,即其大小不依赖运行过程中变量值,即其大小不依赖运行过程中变量值;(4)定义数组时,数组的长度必须是确定的,定义数组时,数组的长度必须是确定的,C语言语言 不允许对数组的大小作动态定义。不允许对数组的大小作动态定义。int a(10);例如:例如:char name0;float weight10.3;float array-100;#define size 10float asize,bsize;int a3*8+2int n=5;int an二、一维数组的初始化二、一维数组的初始化1.1.定义时初始化定义时初始化方法:将初值依次写在花括号方法:将初值依次写在花括号 内。内。如:如:int a5=2,4,6,8,10;存储形式:存储形式:存储单元说明:说明:如果定义一维数组时给出了全部元素的初值,则如果定义一维数组时给出了全部元素的初值,则数组的下标允许省略。此时编译系统自动根据初始数组的下标允许省略。此时编译系统自动根据初始化数据的个数来确定数组的长度。化数据的个数来确定数组的长度。如:如:int a=2,4,6,8,10;int a;初始化的数据个数初始化的数据个数允许小于数组的长度允许小于数组的长度,但,但不不能大于数组的长度能大于数组的长度。当初始化的数据个数(至。当初始化的数据个数(至少要有一个)少于数组的长度时,未初始化部少要有一个)少于数组的长度时,未初始化部分将被编译系统自动用分将被编译系统自动用 0 赋值。赋值。如:如:int a5=2,4;相当于:相当于:a0=2,a1=4,a2=0,a3=0,a4=0 int a5=1,2,3,4,5,6,7,8;2.2.使用其它方法初始化使用其它方法初始化利用输入语句初始化main()char as26;int i;for(i=0;i26;i+)scanf(%c,&asi);.利用赋值语句初始化main()char as26,ch;for(ch=A;ch=Z;ch+)asch-A=ch;.三、一维数组的引用三、一维数组的引用 数组元素类似于单个变量,可以自由地存取和参数组元素类似于单个变量,可以自由地存取和参与各种运算。但是,它与一般变量相比,有以下特殊与各种运算。但是,它与一般变量相比,有以下特殊之处:之处:数组元素是通过数组名加上该元素在数组中的数组元素是通过数组名加上该元素在数组中的位置(即数组元素的下标)来访问的。位置(即数组元素的下标)来访问的。表示形式:数组名下标 如:a3其中,其中,下标可以是整型常量、整型变量或整型表达下标可以是整型常量、整型变量或整型表达式式。如:int a10;float i=3;ai=10;数组元素的下标是从数组元素的下标是从0开始的。开始的。如果定义了如果定义了an,则可使用,则可使用a0、a1、an-1。但是,不能使用。但是,不能使用an。C语言编译系统不检查数组下标越界的错误,在语言编译系统不检查数组下标越界的错误,在编程的时候要注意避免这种错误。编程的时候要注意避免这种错误。如:int a2;scanf(“%d,%d”,&a1,&a2);数组元素的赋值是逐个元素进行的,不允许把数组元素的赋值是逐个元素进行的,不允许把一个数组作为一个整体赋给另一个数组。除了数组一个数组作为一个整体赋给另一个数组。除了数组初始化外,也不允许用语句在花括号中列表的方式初始化外,也不允许用语句在花括号中列表的方式对数组整体赋值。对数组整体赋值。例1:int a5=2,4,6,8,10 ,b5;b5=a5;例2:int a5;a5=2,4,6,8,10 ;数组名数组名a代表的是数组代表的是数组a在内存中的首地址,因此,在内存中的首地址,因此,可以用数组名可以用数组名a来代表数组元素来代表数组元素a0的地址。的地址。等价于等价于scanf(“%d”,&a0);scanf(“%d”,a);四、一维数组应用举例四、一维数组应用举例例例1 1:从键盘上输入:从键盘上输入1010个实型数存入数组,然个实型数存入数组,然 后按输入顺序的逆序输出这后按输入顺序的逆序输出这1010个数。个数。main()float a10;int i;for(i=0;i=0;i-)printf(“%f”,ai);例例7.27.2:用数组来处理求斐波纳契数列:用数组来处理求斐波纳契数列:1 1,1 1,2 2,3 3,5 5,8 8的前的前2020个数。个数。main()int f20=1,1;for(i=2;i20;i+)/*f2是数组第3个元素*/fi=fi-2+fi-1;/f2=f0+f1;for(i=0;i20;i+)/f3=f1+f2;printf(“%10d”,fi);if(i%2=1)printf(“n”);/*每行打印2个数*/数学表示:数学表示:f(0)=f(1)=1,f(n)=f(n-2)+f(n-1)例例7.37.3:用冒泡法对:用冒泡法对n=6n=6个数排序(由小到大)。个数排序(由小到大)。冒泡法的思路是:冒泡法的思路是:将相邻两个数比较,将小的调到前头。将相邻两个数比较,将小的调到前头。9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 9 第一轮排序,比较了第一轮排序,比较了5次次,获得第一次结果,获得第一次结果。轮数 剩数 比较次数j=1n-1 n-j+1 n-j 1 6 5 2 5 4 3 4 3 4 3 2 5 2 1 main()int a7,i,j,t;printf(Input 6 numbers:n);for(i=1;i7;i+)scanf(%d,&ai);printf(n);for(j=1;j=5;j+)/*控制5轮排序 */for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;for(i=1;i=6;i+)printf(%d,ai);main()int a6,i,j,t;printf(Input 6 numbers:n);for(i=0;i6;i+)scanf(%d,&ai);printf(n);for(j=0;j=4;j+)/*控制5轮排序 */for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;for(i=0;i=5;i+)printf(%d,ai);7.2 二维数组的定义和引用先看一个例子:先看一个例子:某校近三年招收各专业本科生人数如下:某校近三年招收各专业本科生人数如下:计算机 电子 管理 数学 1999 90 40 80 30 2000 100 50 90 40 2001 95 45 100 50 要把这些数据组织起来,可以有两种选择:要把这些数据组织起来,可以有两种选择:按从左到右从上到下的顺序存入一个一维数按从左到右从上到下的顺序存入一个一维数 组中。(查询困难)组中。(查询困难)每年用一个一维数组,把这些数据分别存入每年用一个一维数组,把这些数据分别存入 三个数组中。三个数组中。(增加一年数据困难)(增加一年数据困难)一、二维数组的定义一、二维数组的定义 定义二维数组的一般方式:定义二维数组的一般方式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22;如:int a34;float b56;存储形式:存储形式:二维数组在内存中是按行的顺序存放的,即先存放第一行的元素,再存放第二行的元素。说明:说明:二维数组除了维数比一维数组多一维外,二维数组除了维数比一维数组多一维外,其其它性质与一维数组是全部类似的。它性质与一维数组是全部类似的。看看下面写法是否正确?看看下面写法是否正确?int a03;用于定义数组长度的常量表达式的值必须是用于定义数组长度的常量表达式的值必须是大于大于0的正整数。的正整数。int i=3,j=4;int aij;定义数组元素的个数必须使用常量表达式,而定义数组元素的个数必须使用常量表达式,而不能使用变量。不能使用变量。二、二维数组的初始化二、二维数组的初始化 这里主要介绍定义时初始化,其它方法初始化和一维数组类似。定义时初始化有两种方法:分行初始化分行初始化 例如:例如:int a23=1,2,3 ,4,5,6;int a34=1,2,3,4,5,6,7;123456007000 省
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 中学教育 > 初中教育


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号