计算机本科C语言第七章讲.ppt
《计算机本科C语言第七章讲.ppt》由会员分享,可在线阅读,更多相关《计算机本科C语言第七章讲.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章 数组学习目的:1、理解数组元素与普通变量的区别 2、掌握数组的地址 3、掌握数组的存储 4、掌握数组的初始化第一节 数组的概念 在处理实际问题时,常要处理同一类型的成批数据(如100个学生的成绩)。可以把这批数据看作一个有机的整体,称为数组,用一个统一的名字代表这批数据,而用序号或下标来区分各个数据。例如:用s代表学生成绩这组数据,s是数组名,用s1、s2、s3分别代表学生1、学生2、学生3的成绩,s右下角的数字1、2、3用来表示该数据在数中的序号,称为下标。数组中的数据称为数据元素。概括地说:数组是有序数据的集合,要寻找一个数组中的某一个元素必须给出两个要素:数组名和下标。注意:1
2、数组是有类型属性的 2 同一数组中的每一个元素都必须属于 同一数据类型 3 一个数组中内存中占一片连续的存储单元int k10;由于在程序中无法由于在程序中无法用下角表示下标,用下角表示下标,因此因此C中用方括号中用方括号来表示下标。来表示下标。如如k0、k1、k2在在C中中分别用分别用k0、k1、k2来表示。来表示。k0 k0 k1 k1 k2 k2 k3 k3 k4 k4 k5 k5 k6 k6 k7 k7 k8 k8 k9 k91000100210041006100810101012101410161018一、一维数组的定义与引用一、一维数组的定义与引用1 定义一组数组定义一组数组 类型
3、标识符类型标识符 数组名数组名常量表达式常量表达式;例如:例如:float s10;它表示数组名为它表示数组名为s,此数组为实型,有,此数组为实型,有10个元素。个元素。说明:说明:数组名定名规则和变量名相同数组名定名规则和变量名相同 用方括号括起来的常量表达式表示下标值用方括号括起来的常量表达式表示下标值 int a10;int s2*8;#define N 20 int arrayN*2;第二节 一维数组 常量表达式的值表示元素的个数,即数组长度。常量表达式的值表示元素的个数,即数组长度。int a10;表示表示a有有10个元素,这个元素,这10个元素是:个元素是:a0、a1、a9。常量表
4、达式中可以包括常量、符号常量,但不能包含常量表达式中可以包括常量、符号常量,但不能包含 变量。也就是说,变量。也就是说,C不允许对数组的大小作动态定义不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。即数组的大小不依赖于程序运行过程中变量的值。int k;scanf(“%d”,&k);int sk;注意点:1)在表示数组元素时下标可以是正整数或整 型变量或整型表达式 for(t=0;t=9;t+)st=t;2)数组的第一个元素的地址即为数组的首地 址,而且C规定,用数组名代表数组的首地 址.&data0=data3)数组名是地址常量,不能向数组名赋值,也不能对其进行&运
5、算。数组元素最小下标由0 0开始,数组元素最大下标是:数组元素个数1例子1 若有以下定义:double w10;则w数组元素下标的上限是_,下限是_。二、一维数组的初始化在定义数组的同时给数组元素赋初值的过程在定义数组的同时给数组元素赋初值的过程 称为数组的初始化。格式如下:称为数组的初始化。格式如下:数据类型数据类型 数组名数组名 数组元素个数数组元素个数=数组初值数组初值;1 1、初始值是用逗号隔开的一组常量。、初始值是用逗号隔开的一组常量。如:如:int a5=5,4,3,2,1;int a5=5,4,3,2,1;float j3=3.1416,0.789,5.1 float j3=3.
6、1416,0.789,5.1 char char s5=h,e,l,l,o;s5=h,e,l,l,o;2、数组初始化时,多于数据个数的元素被赋0。如:int a5=1,2,3;3、初始化时,初始值不能多于元素的个数;否则 会出现语法错误。如:int a5=1,2,3,4,5,6;4、初始化时,号中的数字可以省略,由初始化 数据的个数决定数组元素的个数。如:int a=19,12,3,7;定义一个数组后,如果不给其元素赋值,则定义一个数组后,如果不给其元素赋值,则各元素的值是不确定的。要想使数组元素以准确各元素的值是不确定的。要想使数组元素以准确的值参加运算,必须设法使数组获得初值,使数的值参加
7、运算,必须设法使数组获得初值,使数组元素获得初值的方法组元素获得初值的方法有三种:有三种:、使用赋值语句;、使用赋值语句;、利用库函数从键盘、利用库函数从键盘或磁盘文件或磁盘文件读取读取 数据;数据;、定义数组时对其进行初始化。、定义数组时对其进行初始化。例子例子 2 main()int a5=1,2,3,4,5;/*在定义时初始化在定义时初始化*/int t;for(t=0;t=4;t+)printf(“%d”,at);例子例子 3 main()int a5;int t;for(t=0;t=4;t+)/*利用赋值语句利用赋值语句*/at=t*2;for(t=0;t=4;t+)printf(“
8、%d”,at);例子例子 4 main()int a5;int t;for(t=0;t=4;t+)/*利用库函数从终端输入利用库函数从终端输入*/scanf(“%d”,&at);for(t=0;t=4;t+)printf(“%d”,at);例子例子例子例子5 5 5 5 下面程序以每行下面程序以每行下面程序以每行下面程序以每行4 4 4 4个数据的形式输出个数据的形式输出个数据的形式输出个数据的形式输出a a a a数组,请填空。数组,请填空。数组,请填空。数组,请填空。#define N 20#define N 20#define N 20#define N 20 main()main()m
9、ain()main()int aN,I;int aN,I;int aN,I;int aN,I;for(I=0;IN;I+)scanf(“%d”,_);for(I=0;IN;I+)scanf(“%d”,_);for(I=0;IN;I+)scanf(“%d”,_);for(I=0;IN;I+)scanf(“%d”,_);for(I=0;IN;I+)for(I=0;IN;I+)for(I=0;IN;I+)for(I=0;IN;I+)if(_)_;if(_)_;if(_)_;if(_)_;printf(“%3d”,aI);printf(“%3d”,aI);printf(“%3d”,aI);printf
10、(“%3d”,aI);printf(“n”);printf(“n”);printf(“n”);printf(“n”);main()main()int I,f10;int I,f10;f0=f1=1;f0=f1=1;for(I=2;I10;I+)for(I=2;I10;I+)fI=fI-2+fI-1;fI=fI-2+fI-1;for(I=0;I10;I+)for(I=0;I10;I+)if(I%4=0)printf(“n”);if(I%4=0)printf(“n”);printf(“%3d”,fI);printf(“%3d”,fI);例子6 下面程序的运行结果是?用起泡法对数据排序(由小到大)思
11、路:将相邻两个数比较,将小的调到前头。思路:将相邻两个数比较,将小的调到前头。a0 a1 a2 8 2 12812181次次2次次第一趟第一趟1281次次第二趟第二趟从例子中可知,从例子中可知,n个个数用数用“起泡法起泡法”排序,排序,共要比较共要比较n-1趟,每趟,每一趟要比较一趟要比较n-j次。次。(n表示数据的个数,表示数据的个数,j表示第几趟表示第几趟)例子7 用起泡法对10个数进行排序(由小到大)#include main()int a11,n,j,temp;for(n=1;n11;n+)scanf(“%d”,&an);for(n=1;n=9;n+)for(j=1;jaj+1)tem
12、p=aj;aj=aj+1;aj+1=temp;for(n=1;n11;n+)printf(“%3d”,an);例子例子8 请根据题意编写源程序请根据题意编写源程序 中秋佳节,有贵客来到草原,主人要从羊群中选中秋佳节,有贵客来到草原,主人要从羊群中选一只肥羊宴请客人,当然要选最肥的一只,请大一只肥羊宴请客人,当然要选最肥的一只,请大家以家以10只羊为例,从键盘输入只羊为例,从键盘输入10只羊的重量,并只羊的重量,并求出第几只羊是主人所要的。求出第几只羊是主人所要的。第三节第三节 二维数组和多维数组二维数组和多维数组一、二维数组和多维数组的定义定义二维数组的一般格式:数据类型 数组名行数列数;例:
13、int a23;上面定义了一个a数组,它有行列。每一个数组元素都是整型数据。注意:每一维的下标都从算起。因此,a数组中的元素如下:a00 a01 a02 a10 a11 a12二维数组在内存中的排列顺序是二维数组在内存中的排列顺序是“按行按行存放存放“。即先存第。即先存第0行的元素,然后再存第行的元素,然后再存第1行的元素。如下图:行的元素。如下图:1212213467200120032005200720092011多维数组的定义格式:多维数组的定义格式:int a232;int a232;定义了一个三维数组定义了一个三维数组a a,其有,其有*1212元元素,其内存分配情况如素,其内存分配情
14、况如右图:右图:二、二维数组的引用数组必须“先定义,后引用”。引用二维数组的形式:数组名下标下标 如:c00 c76引用三维数组的形式:数组名数组名 下标下标下标下标下标下标 如:c000 b212 三、二维数组的初始化三、二维数组的初始化对一个二维数组初始化可以分行以对各元素赋对一个二维数组初始化可以分行以对各元素赋值。值。例例:int a23=1,2,3,4,5,6;int a23=1,2,3,4,5,6;或或 int a23=1,2,3,4,5,6;int a23=1,2,3,4,5,6;也可以对部分元素赋值,例:也可以对部分元素赋值,例:int a23=1,2,3,4;int a23=
15、1,2,3,4;如果在定义数组时,给出了全部数组元素的初值,则定义数组时第一个下标可以省略。int a23=1,2,3,4,5,6;等价于 int a3=1,2,3,4,5,6;例子例子1 include main()int a34,t,k;for(t=0;t=2;t+)for(k=0;k=3;k+)scanf(“%d”,&atk);for(t=0;t=2;t+)for(k=0;k=3;k+)printf(“%4d”,atk);printf(“n”);例子2 定义如下变量和数组:int k;int a33=1,2,3,4,5,6,7,8,9;则下面语句的输出结果是_ for(k=0;k3;k+
16、)printf(“%d”,ak2-k);例子例子例子例子3 3 有如下程序:有如下程序:有如下程序:有如下程序:main()main()int a33=1,2,3,4,5,6;int a33=1,2,3,4,5,6;int i,j,s=0;int i,j,s=0;for(i=1;i3;i+)for(i=1;i3;i+)for(j=0;j=1;j+)for(j=0;j=1;j+)s+=aij;s+=aij;printf(“%dn”,s);printf(“%dn”,s);该程序的运行结果是该程序的运行结果是该程序的运行结果是该程序的运行结果是_三维数组的初始化int a234=1,2,3,4,5,
17、6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24由于第一维的大小为,可以认为a数组由二个二维数组组成。每个二维数组为行列。如下图示:例子例子4include main()int a333,t,k,i;for(t=0;t=2;t+)for(k=0;k=2;k+)for(i=0;i=2;i+)scanf(“%d”,&atki);for(t=0;t=2;t+)for(k=0;k=2;k+)for(i=0;i=2;i+)printf(“%4d”,atki);printf(“n”);例子例子5 5 将一个二维数组行和列元素互换,存到另一将一个二维数
18、组行和列元素互换,存到另一个二维数组中个二维数组中main()main()int m,n,a23,b32;int m,n,a23,b32;for(m=0;m2;m+)for(m=0;m2;m+)for(n=0;n3;n+)for(n=0;n3;n+)scanf(“%d”,&amn);scanf(“%d”,&amn);for(m=0;m2;m+)for(m=0;m2;m+)for(n=0;n3;n+)for(n=0;n3;n+)bnm=amn;bnm=amn;for(m=0;m3;m+)for(m=0;m3;m+)for(n=0;n2;n+)for(n=0;n2;n+)printf(“%4d”,
19、bmn);printf(“%4d”,bmn);例子例子6 有一个有一个3*4的矩阵,要求编程序求出其中的矩阵,要求编程序求出其中值最大元素的值,以及其所在的行号和列号。值最大元素的值,以及其所在的行号和列号。解题思路:采用解题思路:采用“打擂台打擂台”的算法的算法如果有若干人比武,先有一个站在台上,再上去一人与其如果有若干人比武,先有一个站在台上,再上去一人与其手,败者下台,胜者留台上。第手,败者下台,胜者留台上。第3个人再上台与在台上者个人再上台与在台上者比,同样是败者下台,胜者留台上,如此比下去,直到所比,同样是败者下台,胜者留台上,如此比下去,直到所有人都上台比过为止,最后留在台上的就是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 本科 语言 第七
限制150内