《第6章数组.ppt》由会员分享,可在线阅读,更多相关《第6章数组.ppt(41页珍藏版)》请在优知文库上搜索。
1、魏东平第6章魏东平一、为什么要使用数组?例:输入3个学生的成绩,求平均成绩并打印低于80分的成绩#include void main()int score1,score2,score3;float ave;scanf(%d%d%d,&score1,&score2,&score3);ave=(score1+score2+score3)/3.0;printf(Average is%.1fn,ave);printf(Less than 80:);if(score180)printf(%d,score1);if(score280)printf(%d,score2);if(score380)printf
2、(%d,score3);变例:输入n个学生的成绩,求平均成绩并打印低于80分的成绩方法一:用两个程序实现求平均成绩#include void main()int i,n,score;float ave=0;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&score);ave+=score;ave=ave/n;printf(Average is%.1f n,ave);打印大于80的成绩#include void main()int i,n,score;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&score);if(score80)print
3、f(%d,score);方法二:用一个程序实现#include void main()int i,n,score;float ave=0;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&score);ave+=score;ave=ave/n;printf(Average is%.1f n,ave);printf(Less than 80:);for(i=0;in;i+)scanf(%d,&score);if(score80)printf(%d,score);数组是一组相同类型的数据组成的有限集合数组中的数据称为数组,数组元素的个数称为,具有n个元素的数组的长度为n数组
4、中的元素具有先后次序,通常把最前边的元素称为第1个元素,依次是第2、第3、第n个元素如果用某个标识符表示数组的名称,则该数组的第i(1in)个元素可用数组名和下标i表示为i。如果数组元素的下标只有1个,则这样的数组是,如果有2个下标则是二维数组,依次类推数组元素的下标的个数称为数组的维数,习惯上将维数大于2的数组统称为。数组名是数组的唯一标识符数组元素用数组名和元素下标表示数组中的所有元素具有相同的数据类型,元素的数据类型常被称为数组类型在计算机内存中,同一数组的所有元素按下标顺序依次存放在相邻的存储单元中,因此数组占据的内存空间大小可由数组长度和数组类型计算出来一维数组与数学中的向量对应,是
5、C语言程序中最简单的数组,但也是最常见的数组形式之一一、一维数组的定义和引用1、数组的定义定义一维数组的一般方法是:其中,“数组名称”是一个标准的C语言标识符,“数组长度”是一个整型常量或常量表达式。“类型说明”给出了数组类型,即数组元素的数据类型,可以是任意合法的C语言类型,包括用户自定义的数据类型uC语言中,定义数组时必须显示地给出数组类型说明和数组长度例如:int a5,b10;定义了两个整型数组a和b,他们的长度分别为5和10,即分别具有5和10个数组元素。再如:#define N 10int student3*N;定义了一个包含30个元素的整型数组,这里N为符号常量。u初学者容易犯的
6、错误是试图定义可变长度的数组例如:int n;scanf(%d,&n);int datan;再如:int n=10,datan;再如:const int n=10;int datan;2、数组的引用C语言中,不允许引用数组进行运算,只能引用数组元素数组元素的表示方法是:“下标”是一个整数,代表元素的位置p数组元素的“下标”可以是常量,也可以是变量或表达式uC语言的数组元素的下标是从0开始的,a0是数组a的第1个元素,a1是第2个元素,ai-1是第i个元素p在内存中,一维数组的诸元素按照先后次序依次存放在相邻的存储单元中,占据连续的存储空间序号数组元素1a02a13a24a35a4p与变量相同,
7、可以将数组元素放在表达式中参与运算a3=a1+a2*bi+1-3;scanf(%d,&ai);输入任意5个整数,输出它们的和并打印出这些数#include void main()int i,sum=0;int data5;for(i=0;i5;i+)scanf(%d,&datai);for(i=0;i5;i+)sum=sum+datai;printf(Sum=%dn,sum);printf(List is:);for(i=0;i5;i+)printf(%d,datai);printf(n);1sum=0i=0输入dataii+i=0i 5sum=sum+dataii+i=0i 5输出datai
8、i+输出sumi 5假设数组a中已有5个数,要在第1个数的前面插入一个数x,并保持这5个数的前后关系不变,试编程实现数组中的数据是从第1个元素开始依次顺序存放的,5个数之间,包括它们的前面,是没有空的位置的。要插入一个数,就必须把其他数移走2元素下标初始状态移动过程插入元素01161211232334334544555最后一个元素没有使用从右边开始各元素依次右移一位第一个元素已不再使用将要插入的数值给第一个元素完成插入#include#define N 5void main()int i,x,aN+1;printf(Enter%d numbers:,N);for(i=0;iN;i+)scanf
9、(%d,&ai);printf(Before insert:);for(i=0;i0;i-)ai=ai-1;ai=x;printf(After insert:);for(i=0;iN+1;i+)printf(%d,ai);printf(n);3、数组的初始化u C语言中,引用数组元素的数值前必须先给数组元素赋值下面的程序段是错误的,因为数组a中各元素的值是随机的“脏数据”:int i,sum=0;int a10;for(i=0;i10;i+)sum+=ai;u C语言规定,局部数组如果没有初始化,数组元素的取值是不确定的,直接引用没有赋值的数组元素是错误的n 在定义数组时,可以用数值集合对数组
10、进行初始化,即给数组元素赋初值,方法是:花括号中的数值列表是用逗号分割的若干个数值的集合,这些数值的数据类型与数组类型保持一致,数值的个数不能超过数组长度!int a5=1,2,3,4,5;n 如果只是给某些元素赋初值,其他元素的值(可能是0)也必须给出int b5=1,1,0,0,1;n 如果要赋初值的元素位于数组的前列,初始化时可以采用省略格式int c5=1,2,3;这里,数组元素a3、a4的初值是0n 对于int c5=0,各元素的初始值都为0不能简化为int c5;或int c5=;n 如果在“数值列表”中给出了所有元素的初值,“数组长度”说明是可以省略的,但不要省略方括号int d
11、=1,2,3,4,5;注意,如果缺少等号和右面的数值列表,只书写“int d;”是错误的求数组中0元素的个数#include#define N 10void main()int i,count=0;int dataN=1,0,3,5;for(i=0;iN;i+)if(datai=0)count+;printf(Count of zero is%dn,count);3有30个同学参加了某门课的考试,计算平均成绩,并打印出低于平均分的成绩#include#define N 30void main()int i,scoreN;float ave=0;printf(Enter scores one b
12、y one?);for(i=0;iN;i+)scanf(%d,&scorei);for(i=0;iN;i+)ave+=scorei;ave=ave/N;printf(Average is%.1f n,ave);printf(Less than average:);for(i=0;iN;i+)if(scorei ave)printf(%d,scorei);printf(n);4输入30个成绩score求30个成绩的和sum平均成绩ave=sum/30打印平均成绩avei=0i 30scorei ave打印scorei是否在某体育项目中,同时有7位裁判为运动员打分,运动员的最终成绩是去掉一个最高分
13、和一个最低分后的5个得分的平均值,试编程实现计算运动员成绩的过程本程序包含两个过程,一是求最高得分和最低得分,二是求平均值。这里只分析一下第一个过程。容易理解,求最高得分和求最低得分是类似的,实际就是数学上的求最大值、最小值问题。以求最大值为例,可以先假设第1个数最大;再与第2个数比较,如果小于第2个数,则最大数用第2个数代替,否则不变;再与第3个数比较,依次类推,直到比较了所有的数值。5#include#define N 7void main()int i;float scoreN;float max,min,ave=0;printf(逐一输入裁判给分?);for(i=0;iN;i+)sca
14、nf(%d,&scorei);max=score0;min=score0;for(i=0;iN;i+)ave+=scorei;if(max scorei)min=scorei;ave=(ave-max-min)/(N-2);printf(运动员得分是%.1f n,ave);假设数组a为1,2,3,4,5,6,7,8,9,10,试编程将其倒置,结果为10,9,8,7,6,5,4,3,2,1。要满足两个条件:(1)程序可适应任何数组长度;(2)程序中只能使用一个数组,不能引入第二个数组p 对于第一个要求,可以将数组长度定义为较大的N,而实际大小为n,nNp 如果没有第二个要求,可以再定义一个数组b
15、,数组b的类型、长度与数组a完全相同,然后令b0=an-1、b1=an-2、bn-1=a0即可p 由于不能定义第2个数组,可以使用交换两个数的办法6#include#define N 100void main()int i,j,n,t,aN;printf(请输入数据个数?);scanf(%d,&n);while(nN)printf(错误,数据个数应介于1%d之间!n请重新输入?,N);scanf(%d,&n);printf(请输入%d个整数:n,n);for(i=0;in;i+)scanf(%d,&ai);printf(n输入的整数是:);for(i=0;in;i+)printf(%d,ai)
16、;i=0;j=n-1;while(ij)t=ai;ai=aj;aj=t;i+;j-;printf(n倒置后的结果为:);for(i=0;in;i+)printf(%d,ai);printf(n);在程序设计语言中,数学上的矩阵、方阵常用二维数组表示。矩阵运算是代数问题的核心,在科学工程运算中占有重要位置1、二维数组n定义二维数组的格式为:类型说明、数组名称的定义与一维数组相同,行数、列数都是整型常量或常量表达式float a34;n二维数组的数组元素的格式为:n对于有m行n列的二维数组a,其行下标的取值范围是0m-1,列下标的取值范围是0n-1na00 是数组的第一个元素,am-1n-1 是最后一个元素nC语言中,二维数组是按行存储的342414332313322212312111aaaaaaaaaaaa3231 302221 20 12 11 100201 002 1 0aaaaaaaaaaaaaaa 数组a数组a数组a的内存格式2、多维数组可以将用一维数组定义二维数组的方法延伸到多维数组的定义n三维数组的定义格式为:与二维数组类似,可以把三维数组看作是由二维数组组成的一维数组,即该