c精品课件昆明理工大学5第四章1章节

上传人:E**** 文档编号:91225673 上传时间:2019-06-26 格式:PPT 页数:27 大小:258KB
返回 下载 相关 举报
c精品课件昆明理工大学5第四章1章节_第1页
第1页 / 共27页
c精品课件昆明理工大学5第四章1章节_第2页
第2页 / 共27页
c精品课件昆明理工大学5第四章1章节_第3页
第3页 / 共27页
c精品课件昆明理工大学5第四章1章节_第4页
第4页 / 共27页
c精品课件昆明理工大学5第四章1章节_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《c精品课件昆明理工大学5第四章1章节》由会员分享,可在线阅读,更多相关《c精品课件昆明理工大学5第四章1章节(27页珍藏版)》请在金锄头文库上搜索。

1、研究式学习C程序设计(第四章),1,第四章,数组(一),研究式学习C程序设计(第四章),2,上讲主要内容,什么是循环结构? 循环语句 语法练习 编程练习,研究式学习C程序设计(第四章),3,本章主要内容,一维数组 概念的引入 一维数组的定义、引用及初始化 程序举例 二维数组,研究式学习C程序设计(第四章),4,数组问题的提出,在程序设计中,常常需要处理以整体形式出现的一批数据,比如求一个班级(或学院)学生的某科成绩的平均分,这样需要存储所有学生的成绩(90,85,67,77,),这样的数据在程序中如何处理?如果仍然用简单变量来存放,那么当这批数据的数量较大时,程序将无法编写。c语言使用了一种新

2、的数据类型数组,来处理这种有一定顺序关系且以整体出现的一组数据。,问题:求某班学生某科成绩高于平均分的人数。,研究式学习C程序设计(第四章),5,数组-问题分析(1),假设有n个学生,n个学生的学习成绩按学号顺序排列(成绩分只取到整数位数)。要完成题目要求,需要解决以下问题:,数组-问题分析(2),1 成绩存储形式 n 个学生的成绩分数可视为一组n个类型相同的数据。在C语言中,允许用一个名字来命名同类型的一组数据,并把这样的数据类型称为数组。 例如score0,score1scorei(0in),其中score 为数组名,i为某个学生成绩数据存放数组score中的顺序号,也称为下标表达式。C语

3、言规定下标从0开始计数,因此数组score的最大下标为n-1。,1 成绩存储形式 与使用普通(基本类型)变量一样,使用数组存放数据之前,要对数组进行定义。存储n个成绩数据的数组score可以定义如下: int score100; 这里,score是数组名,而int表明数组类型,即所有数组元素的数据类型都是int型。方括号中的100是数组的大小(长度)。即数组score有100个元素。,研究式学习C程序设计(第四章),7,数组-问题分析(3),2 成绩数据的输入 每一个数组元素可以存放一个成绩分数。要输入n个学生的成绩就应当执行n次输入函数: for(i=0 ;i100; i+) scanf(“

4、%d”, 在上述语句中,scanf函数将被执行100次,scorei表示下标为i的元素,当i从0变到99时,每次输入的数据(成绩分数)被依次存入score0,score1,score99这100个数组元素中。,研究式学习C程序设计(第四章),8,数组-问题分析(4),3 求出平均分 首先需要把100个同学的分数累加来,也就是把100个数组元素的值相加后,再求平均值。 for(i=0 ;i100; i+) sumsum+scorei; averange=sum/100;,i=0: sum=0+score0 i=1: sum=score0+score1 i=2: sum= +score2 i=3:

5、 sum= +score3 . i=99: sum= +score99,4 求出高于平均分的学生人数 用平均分与各数组元素逐一比较,并记下大于平均分的数组元素的个数。 for(i=0 ;iaverange) count+;,研究式学习C程序设计(第四章),9,数组程序,#define N 10 main() int i, count, sum, average; int scoreN; count=0; sum=0; printf(“Input %d scores:“ N); for (i=0; iaverage ) /* 比较当前成绩是否高于平均分 */ count+; /* 若高于平均分,

6、计数器加1 */ printf(“naverage=%d, conut=%d“, average, count ); ,Input 10 scores: 70 80 68 92 88 76 96 60 56 90 average=77 ,count= 5,程序,研究式学习C程序设计(第四章),10,一维数组的概念,数组用于组织具有顺序关系的一组同类型数据。 数组是一种整体定义,个别使用的数据结构。 数组中每个变量被称为数组元素,用数组名加写在分括号中的序号来标识 。顺序号也称为下标。只需要一个下标便可识别一个数组元素的数组称一维数组。 与使用普通(基本类型)变量一样,使用数组存放数据之前,要对

7、数组进行定义。,研究式学习C程序设计(第四章),11,一维数组的定义,一维数组定义的一般形式为: 类型名 数组名常量表达式 例如:int a10;,其中: (1)数组名取名要符合标识符取名规则 (2)数组名后只能用方括号 (3)常量表达式表示元素个数,即数组长度。其中只可包含常量或符号常量,不可包含变量。,1、定义了一个名为a的一维数组。 2、方括号中的10规定了a数组长度为10,即有10个元素,它们分别是a0、a1、a2、a3、a7、a8、a9。 3、类型名int规定了a数组中每个元素都是整型,在每个元素中只能存放整型数。 4、每个元素只有一个下标,C语句规定数组第一个元素的下标为0(下标的

8、下限),因此,a数组最后一个元素的下标是4(下标的上限)。 5、C编译程序将为a数组在内存中开辟10个连续的存储单元,各元素按照下标递增的顺序存放,如下所示:,研究式学习C程序设计(第四章),12,一维数组的引用,只能逐个引用数组元素,而不能一次引用整个数组(字符数组除外)。引用形式如下: 数组名下标表达式 其中,下标可以是整型表达式。例如定义了b数组: int b100; 则b0、bi、bi+k都是对b数组元素的合法引用,其中0, i, i+k, 称为下标表达式。由于定义了b数组有100个元素,因此下标表达式必须大于等于零并小于100。 注意:bi+k中,i+k只是一个下标表达式。,要建立以

9、下概念: 1 一个数组元素实质上就是一个同类型变量。因此,对基本数据类型的变量能进行的运算或操作,也适用于同类型数组元素。 2 一个数组不能整体引用。例如不能用b代表b0到b99这100个元素。 C语言中,数组名是一地址常量。它代表整个数组的首地址。关于这方面的内容将在第六章指针中详细讨论。,研究式学习C程序设计(第四章),13,一维数组的初始化,在定义数组的同时给数组赋初值,称为初始化 。 1、对数组的全部元素赋初值。如: int a5=0,1,2,3,4 /*依次把花括弧中数据赋给a0到a4*/ 对数组全部元素赋初值时,可不指定长度。例如: int a =1,2,3,4,5,6,7,8 编

10、译系统按初值个数确定该数组长度。上数组等价于: int a8=1,2,3,4,5,6,7,8,2、对数组的部分元素赋初值。如: int a5=1,2,3; 初值个数为3少于数组元素个数5,表示只给数组前三个元素赋值,后两个元素a3,a4编译系统给赋初值0。,3、如果程序中没有为静态数组赋初值,则编译系统自动为其赋初值0。,研究式学习C程序设计(第四章),14,一维数组应用举例,例 1 一维数组的定义和引用。 main() int a5=9; /* 定义整数型数组a并初始化*/ int i; a1=8; /* 给数组a的第二个元素赋值 */ for(i=2;i4;i+) /* 对数组a的第3,4

11、两个元素赋值 */ ai=9-i; printf(“输入数组第五个元素的值:”); scanf(“%d”,程序运行结果为: 输入数组第五个元素的值:5 该数组五个元素的值分别为: 9 8 7 6 5,程序,研究式学习C程序设计(第四章),15,一维数组应用举例,例 2 输入100个整型数据,找出其中最大值并显示出来。,main() int buffer100,max,i; for(i=0;i100;i+) scanf(“%d”,输入数组元素,找最大,输出最大值,max赋初值,研究式学习C程序设计(第四章),16,一维数组应用举例,例 2 找出一维整型数组中具有最小值的元素及其所在位置。 mai

12、n() int a5=9,8,11,6,22; int i,k,min; min=a0/* 将数组中第一个元素的值作为比较基准 */ k=0; /* 将a0下标值赋给变量k */ for(i=1; iai) /*的最小值和最小值对应下标 */ min=ai; k=i; printf(“数组中最小值的元素下标为d, 其值是:%4d“,k,min); ,程序,程序运行结果为: 数组中最小值的元素下标为 3, 其值是:6,研究式学习C程序设计(第四章),17,一维数组应用举例,例3 将数组中数据按逆序存放后输出,不允许再另外开辟新数组。 分析:逆序存放数组的算法为:假设数组有n个元素,则第一个元素与

13、最后一个元素交换,第二个元素与倒数第二个元素交换,依次类推直到交换n/2次后,逆序存放完成。当n为偶数时进行两两交换;当n为奇数时,中间那个数不用交换。如图所示。,for(i=0;in/2;i+) t=ai;ai=an-i-1; an-i-1=t;,程序清单看教科书例4.3,程序,研究式学习C程序设计(第四章),18,二维数组问题的提出,问题:某小组有3人,要求计算每人考试成绩总分,期末考试成绩如下 :,研究式学习C程序设计(第四章),19,二维数组问题分析,学生成绩表是一个由3行和5列组成的表格或矩阵。其中每一行记录一个学生各科成绩及总分。而每一列是某门课成绩或总分。存储这样由3行5列共15

14、个数据组成的表格,可以使用二维数组。所谓二维数组,是指数组中的每个元素都有两个下标。其中第一个下标为行下标。第二个下标为列下标。由于数组只能存储相同类型的数据,在本题中,把学号及各门课成绩定义为实型,都能兼顾。 假设用二维数组a来存储数据: float a35;,float a35; a数组的逻辑结构可视为具有如下形式的3行4列的矩阵(或表格): 第0列 第1列 第2列 第3列 第4列 第0 行 a00 a01 a02 a03 a04 第1行 a10 a11 a12 a13 a14 第2行 a20 a21 a22 a23 a24,研究式学习C程序设计(第四章),20,main() int i,

15、j; float s35= 24001,97.2,87.7,93.6,0, 24002,87.5,91.3,90.7,0, 24003,78.6,81.9,91.9,0 ; printf(“n No. YW MT EN TOTALn”); printf(“-n”); for (i=0; i3; i+ ) printf (“n%6.0f”,si0); /* 输出学生学号 */ for (j=1; j4; j+) si4+=sij; /* 求第i个学生总分 */ printf (“%6.1f”,sij); /* 输出单科成绩 */ printf (“%6.1f”,si4); /* 输出第i个学生总分 */ ,二维数组程序,运行结果为: No. YW MH EN TOTAL 24001 97.2 87.7 9

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

最新文档


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

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