第4章数组(C语言基础)

上传人:平*** 文档编号:5972273 上传时间:2017-08-07 格式:PPT 页数:61 大小:1.03MB
返回 下载 相关 举报
第4章数组(C语言基础)_第1页
第1页 / 共61页
第4章数组(C语言基础)_第2页
第2页 / 共61页
第4章数组(C语言基础)_第3页
第3页 / 共61页
第4章数组(C语言基础)_第4页
第4页 / 共61页
第4章数组(C语言基础)_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《第4章数组(C语言基础)》由会员分享,可在线阅读,更多相关《第4章数组(C语言基础)(61页珍藏版)》请在金锄头文库上搜索。

1、第4章 数组,4.1 数组的引人4.2 一维数组的定义和应用4.3二维数组的定义和应用4.4字符数组和字符串4.5本章小结,1,4.1数组的引入,例4.1 现需要编写一个程序,实现对一个班级学习C语言的学生的成绩输入,然后分别统计优、良、中、及格和不及格五个等级的人数并计算高于平均成绩的人数,最后输出成绩清单。假如这个班级共有6名学生学习了C语言。,2,编程分析:,为了保存6名学生的C语言成绩,需要定义6个float型的变量,变量定义如下: float stud1,stud2,stud3,stud4, stud5,stud6; 接着为了输入这6个学生的成绩,编程如下: scanf(“%d%d%

2、d%d%d%d”, &stud1,&stud2, &stud3,&stud4, &stud5, &stud6);,3,现在如何来统计优良中差各等级人数和计算平均成绩呢?我们必须针对每一名学生,都写一段程序来完成优良中差各等级的判定功能,先对stud1变量判定,编程思路如下: if(stud1 = 90.0)优秀人数+ ;else if(stud1 = 80.0) 良好人数+ ; else if(stud1 = 70.0)中等人数+ ; else if(stud1= 60.0) 及格人数+ ; else不及格人数+ ; 然后分别对stud2,stud3,stud4, stud5, stud6变量

3、重复进行和上面相同的判定程序,显然程序代码将十分冗长而且容易出错。 特别是:当学生人数发生变化,从6增加到80或者甚至增加到1000,我们需要怎样的耐心来写如此多的重复代码?!这肯定不是我们想要的编程方法,该怎么办呢? 请数组来帮忙。,4,4.2.1 一维数组的定义,定义: 类型标识符 数组名整型常量表达式;所以针对例4.1编程需要,可以如下定义一个数组:float stud6; 以上定义表示:该数组名为stud,共包含了6个元素, 这6 个元素都是float型变量。如果需要处理100个学生的C语言的成绩,则定义如下:float s100;说明:类型标识符指明该数组中所有元素的数据类型,可以是

4、char、int、float、double等基本的数据类型标识符。,5,4.2.1 一维数组的定义(续1),2. 数组名命名规则和变量名命名规则相同,都遵循标识符命名规则。3. 方括号中的数字指明了数组共含有多少个变量,也称数组的长度,所以必须是大于或等于1的整数,不能为浮点型的常量;其表现形式可以整型常量、符号常量或整型常量表达式,但不能含有变量的表达式。例如:int m=8, xm; /* 数组的大小不能用变量的值指定 ,所以这是不合法的*/ #define NUMBER 80float scoreNUMBER; /用符号常量 /* 数组的大小可用符合常量 ,所以这是合法的*/,6,4.2

5、.1 一维数组的定义(续2),4.允许在同一数据类型的变量定义中,定义多个变量和多个数组。例如: int i , j , a5 , b10;还可以按如下形式定义一维数组: float string2; int a5*2+10;分析:定义了一个名为string 的数组,因为字符常量2的ASCII值为50,所以string 数组共有50个元素定义了一个名为a 的数组,共有20个元素,每个元素的类型是整型。,7,4.2.2 数组元素的名称,当定义好一个数组后,数组中的每个元素的名称分别是什么呢? C语言标准规定:当定义好一个数组后,可以通过数组名加元素下标的方式来使用数组元素,数组中的每个元素按照在

6、内存中排列的顺序都有相应的编号即下标,数组中的元素编号从0开始,依次为1、2、3直到“数组元素个数1”为止;下标用中括号括起来。因而数组元素的名称为:数组名下标注意:其中下标是一个整型表达式,可以是变量或常量表达式,这与数组定义时要求只能是常量不同,但必须保证下标值=0。,8,4.2.2 数组元素的名称举例,例如: int a5; 说明: a数组中的5个整型变量的名称分别为:a0 、a1 、 a2 、a3,a4, 这5个元素的 下标分别为:0、1、2、3 、4注意:a 数组没有名为 a5 这样的元素!数组a 有如下图所示的逻辑结构。,9,4.2.3数组在内存中的表示,一个基本类型的变量(如in

7、t、char或double类型的 变量)在计算机内存中是如何表示?计算机内存是计算机用于存储程序和数据的,内存按照各字节的排列顺序依次编号(一个字节包含8位二进制数),每一个字节的编号即为其内存地址。如下定义一个double类型的变量:double d;由于double类型的变量长度是64位,变量d需要在内存占用8个字节,且在内存中这8个字节是相邻的,所以变量d共包含8个内存地址。我们规定:当说到“一个变量的地址”时,是指该变量所占用的第一个字节的地址;可以用取地址运算符&来获取变量的地址,因而,对于变量d,可以用&d获取其地址。,10,4.2.3数组在内存中的表示(续1),数组中的每个元素(

8、即下标变量)在内存中采用和基本类型变量一样的方式来表示,所有元素在内存中是相邻的。例如:double f4;说明:该数组共有4个类型为double的变量;根据数组f的定义,计算机会分配可容纳数组f所有元素的相邻的连续内存空间:即共48个字节,并把变量f0的地址作为整个数组的首地址,而数组名f中存放了数组的首地址。所以下面两个printf语句输出相同的结果。 printf(“%f”, &f0); printf(“%f”, f);,11,4.2.3数组在内存中的表示(续2),该数组的内存排列示意图见下图:,12,4.2.4 访问数组元素,数组定义好后,当需要给数组元素输入数据,则应当逐个访问一个个

9、元素。例如:void main()float stud6; /数组定义scanf(“%f”,&stud0);scanf(“%f”,&stud1);scanf(“%f”,&stud2);scanf(“%f”,&stud3);scanf(“%f”,&stud4);scanf(“%f”,&stud5);上面程序也可用如下代码来实现:,13,4.2.4 访问数组元素(续),void main()float stud6; /数组定义int i;for(i=0;i6;i+)scanf(“%f”,&studi);对比上面两个完成同样功能的程序,可以清楚地看到:当把循环用于数组时可大大简化程序的编写。,14,

10、4.2.5 数组的初始化,C语言标准规定,在数组定义的同时对数组元素赋值,称之为数组初始化,其格式如下: 类型标识符 数组名整型常量表达式 = 表达式1,表达式n;(1)定义数组时对数组的全部元素赋初值例:int a4=1,2,3,4; 和 int a4; a0=1; a1=2; a2=3; a3=4;效果一样(2) 只给数组的前面一部分元素设定初值 例:int e5 = 0, 1, 2; 即:e0=0; e1=1; e2=2; e3=0; e4=0;,15,4.2 .5 一维数组初始化(续1),说明: 当数组前n个元素被设定了初值,未明确设定初值的元素自动被设定为0。 当定义数组时,如未对它

11、的任何元素指定过初值,则它的元素的值是不确定的。(3) 当对一维数组的全部元素都明确设定初值时,可以不指定一维数组元素的个数。例如: int g = 5, 6, 7, 8, 9 ;说明:由花括号内的初值个数确定数组的元素个数,16,4.2.5 数组初始化常见错误分析, 数组初始化时初始值个数不能大于元素个数例如:int a3=1,2,3,4; 系统报告错误如下:初始化的值太多。不能直接给数组名赋值,因为数组名是一个地址常量例如:int b3;b=1,2,3;系统报告错误如下:赋值运算符的左边不能是常量,17,4.2.5 数组初始化常见错误分析(续), 如果要给一个数组中的全部元素初始化为0,不

12、可以写成:int a5=0*5;“初值列表”的方式只限于数组的初始化,不能出现在赋值语句中 例如:int c4; c4=1,2,3,4; /错误两个数组不能直接进行赋值运算,但数组元素可以例如: int a4=5,6,7,8; int b4;b=a;/错误如果希望将 a数组中的数据送给b数组,可以使用 如下代码:for(i=0;i4;i+)bi=ai;,18,例4.2 输入5个整数,编程求出其中最大和最小的整数并输出编程步骤分析: 1.先定义有 5 个元素的数组iArr, 然后用for循环输入5个整数2. 处理:(a) 给变量max和min赋初值:max=min= iArr 0(b) 依次用i

13、Arri(下标i依次取值为1、2、3、4) 和max,min比较: 若maxiArri,令min=iArri;3. 输出:max和min,19,4.2.6 数组应用举例,举例分析:1.假设数组iArr 中的5个元素分别是:467-12145992.给变量max和min赋初值,使max和min 的初值同为4; 第一次用元素iArr1 的值67 分别和max、min 比较大小,因为67max, 所以max 的值变为67,min 的值不变; 第二次用元素iArr2 的值-12 分别和max、min 比较大小,因为-12min,所以min 的值变为 12,而max 的值不变; 依次进行第三次和第四次比

14、较,最后得出:max 的值为145,min 的值为-12。3.用输出函数printf 输出:max和min,20,数组应用举例1,程序代码:#include #define SIZE 5void main() int iArr SIZE,max, min; int i; printf(Enter 5 integers:n); for(i=0;iSIZE;i+) printf(%d:,i+1);scanf(%d,&iArri); max = iArr0; min = iArr0; for(i=1;iSIZE;i+) if(maxiArri) min=iArri; printf(Maximum v

15、alue is: %dn,max);printf(Minimum value is: %dn,min);,21,数组应用举例1,例4.3 用选择排序,对6 个整数按由小到大进行排序思路分析:选择排序的思想是:第一次从数组的6个元素中寻找最大数及其下标,然后将此数与其下标为5的元素进行交换;如果求出的最大数正好是下标为5的元素,可以不进行交换。第二次在下标为0、1、2、3、4 这五个元素中寻找最大的元素及其下标,并把该次找到的最大数和其下标为4 的元素进行交换;类似进行第三次、第四次和第五次查找和交换过程,最终实现将6 个整数按照由小到大进行排序。可以借鉴刚才求最大数的代码,来完成选择排序算法。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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