C语言程序设计_课件_第六章(适于清华谭浩强版).ppt
《C语言程序设计_课件_第六章(适于清华谭浩强版).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计_课件_第六章(适于清华谭浩强版).ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章数组数组l6.1 6.1 问题的提出问题的提出 l6.2 6.2 一维数组一维数组l6.3 6.3 二维数组二维数组l6.4 6.4 字符串与字符串函数字符串与字符串函数6.1问题的提出问题的提出第一个问题是:输入第一个问题是:输入100个学生的个学生的“C程序设计程序设计”课程的成绩,将这课程的成绩,将这100个分数从个分数从小到大输出。小到大输出。第二个问题是输入第二个问题是输入100个学生的个学生的“C程程序设计序设计”课程的期中和期末成绩,算出总评课程的期中和期末成绩,算出总评成绩,总评成绩为成绩,总评成绩为“30%期中成绩期中成绩+70%期末成绩期末成绩”,计算总评成绩的分
2、数,计算总评成绩的分数段情况。段情况。6.2一维数组一维数组6.2.1一维数组的定义一维数组的定义从从概概念念上上来来说说,数数组组是是一一组组变变量量,这这组变量应该满足下列条件:组变量应该满足下列条件:(1)具有有相同的名字具有有相同的名字(2)具有相同的数据类型具有相同的数据类型(3)在存储器中连续存放在存储器中连续存放每个变量称为数组的一个每个变量称为数组的一个“数组单数组单元元”,保存在其中的数据值称为,保存在其中的数据值称为“数组元数组元素素”,不论是数组单元,还是数组元素,不论是数组单元,还是数组元素,在不引起混淆的情况下,可以简称为在不引起混淆的情况下,可以简称为元元素素。数组
3、对象的整体有一个名称,这个。数组对象的整体有一个名称,这个名称表示整个数组。名称表示整个数组。每个数组在使用之前都需要定义。每个数组在使用之前都需要定义。定义数组的语法是:定义数组的语法是:数据类型说明符数据类型说明符数组名数组名数组长度数组长度;数数据据类类型型说说明明符符是是C语语言言提提供供的的任任何何一种基本数据类型或构造数据类型。一种基本数据类型或构造数据类型。数组名数组名是用户定义的标识符。是用户定义的标识符。方括号中的方括号中的数组长度数组长度是一个常量表达是一个常量表达式,它表示了数组单元的个数。注意:数式,它表示了数组单元的个数。注意:数组长度只能是常量。组长度只能是常量。例
4、如:例如:intdata5;说明整型数组说明整型数组a,有有5个元素。个元素。floatb10,c20;说明单精度浮点型数组说明单精度浮点型数组b,有有10个元素;单个元素;单精度浮点型数组精度浮点型数组c,有有20个元素。个元素。charstring20;说明字符型数组说明字符型数组string,有有20个元素。个元素。注意注意(1)数组的数据类型定义的是每个数组数组的数据类型定义的是每个数组元素的取值类型。对于一个数组来说,所元素的取值类型。对于一个数组来说,所有数组元素的数据类型应该都是相同的。有数组元素的数据类型应该都是相同的。(2)数组名要符合用户定义字的书写规数组名要符合用户定义字
5、的书写规则,也就是与普通变量一样。则,也就是与普通变量一样。(3)在在C语言的一个函数中,数组名不能语言的一个函数中,数组名不能与本函数的其它变量名同名。与本函数的其它变量名同名。(4)数组长度不能是变量,也不能是或包含变)数组长度不能是变量,也不能是或包含变量的表达式,可以是常量或常量表达式。并且量的表达式,可以是常量或常量表达式。并且常量表达式应是整型数,不能是小数常量表达式应是整型数,不能是小数。程序段一:程序段一:#defineSize5main()intaSize,bSize+10;/*正确正确*/程序段二:程序段二:main()intn=5;intdatan;/*错误错误*/6.2
6、.2一维数组的引用一维数组的引用引用数组单元的一般形式为:引用数组单元的一般形式为:数组名数组名 下标下标 数组下标可以是整型变量或整型表达式,数组下标可以是整型变量或整型表达式,但不能是浮点型的变量或浮点型表达式;并且但不能是浮点型的变量或浮点型表达式;并且下标不能大于下标不能大于 数组长度数组长度-1-1,因为超过部分没,因为超过部分没有被定义过,是不能正确使用的。有被定义过,是不能正确使用的。图。图。例如:例如:data4、datai+j、datai+都是都是合法的引用方式。合法的引用方式。例例6.1用数组方式读入用数组方式读入5个整数,并求和。个整数,并求和。/*sumof5inter
7、ger*/#includestdio.hvoidmain()inti,data5,sum=0;printf(nPleaseenter5integer:);for(i=0;i5;i+)scanf(%d,&datai);for(i=0;i5;i+)sum=sum+datai;printf(Sumis%dn,sum);在语言中只能逐个地使用每个数组单元在语言中只能逐个地使用每个数组单元进行操作,而不能一次引用整个数组。进行操作,而不能一次引用整个数组。例如,不能用例如,不能用printf(“%d”,data);来代替下来代替下面的语句:面的语句:for(i=0;i=4;i+)printf(%d,da
8、tai);因为,因为,C语言规定数组名本身代表数组的首语言规定数组名本身代表数组的首地址。地址。printf(“%u”,data);语句输出的是数组的语句输出的是数组的首地址,而不是数组单元的内容。首地址,而不是数组单元的内容。6.2.3一维数组的初始化一维数组的初始化初始化是指在数组定义时给数组元素赋予初始化是指在数组定义时给数组元素赋予初值。需要注意的是,数组初始化是在编译阶初值。需要注意的是,数组初始化是在编译阶段进行的,而不是在程序开始运行以后,由可段进行的,而不是在程序开始运行以后,由可执行语句完成的,因此不能将初始化的执行语句完成的,因此不能将初始化的“=”与与赋值号混淆。赋值号混
9、淆。一维数组初始化的一般形式是:一维数组初始化的一般形式是:数据类型说明符数据类型说明符数组名数组名数组长度数组长度=数值,数数值,数值,值,.数值数值;intdata5=1,2,3,4,5;注意注意(1)允许初始化一部分元素,而不是全部。允许初始化一部分元素,而不是全部。intdata5=1,2;(2)初始化数组时,允许省略数组的长度。初始化数组时,允许省略数组的长度。intdata=1,2,3,4,5;与与intdata5=1,2,3,4,5;是完全等价的。是完全等价的。(3)初始化数组时,不能对整个数组初始化。初始化数组时,不能对整个数组初始化。例如,例如,intdata5=1;6.2.
10、4程序举例程序举例例例6.2用数组方式解决用数组方式解决Fibonacci数列问题,求出数列问题,求出Fibonacci数列的前数列的前20项存储在数组中,并将数项存储在数组中,并将数组内容输出。组内容输出。#includestdio.hvoidmain()inti,fib20=1,1;/*初始化初始化*/printf(n);for(i=2;i20;i+)fibi=fibi-1+fibi-2;for(i=1;i=20;i+)printf(%10d,fibi-1);if(i%5=0)printf(n);/*换行,每行输出换行,每行输出5个个*/例例6.3输输入入100个个整整数数,求求出出最最小
11、小的的数数以以及及第第一一个个最小的数在数组中的下标。最小的数在数组中的下标。例例6.4输入输入100个整数,从小到大排列并输出个整数,从小到大排列并输出。选择排序选择排序例例6.5输入输入100个学生的个学生的“C程序设计程序设计”课程的期课程的期中和期末成绩,算出总评成绩,总评成绩为中和期末成绩,算出总评成绩,总评成绩为“30%期中成绩期中成绩+70%期末成绩期末成绩”,计算总评,计算总评成绩的分数段情况。成绩的分数段情况。本题要使用三个平行的数组才能解决问题。本题要使用三个平行的数组才能解决问题。这三个数组的第这三个数组的第i个元素记录了一个学生的期中个元素记录了一个学生的期中成绩、期末
12、成绩和总评成绩。成绩、期末成绩和总评成绩。6.3二维数组二维数组 如如果果一一维维数数组组的的数数组组单单元元不不是是一一个个变变量量,而而是是另另一一个个一一维维数数组组,就就构构成成了了二二维维数组。数组。图。图。e_score是一个一维数组,它的每个数是一个一维数组,它的每个数组单元是一个变量,分别是组单元是一个变量,分别是e_score0、e_score1、e_score2、e_score3、e_score4。而。而stu_score的每个数组单元不的每个数组单元不是一个变量,而是一个有三个变量的一维数是一个变量,而是一个有三个变量的一维数组,这就构成了二维数组。组,这就构成了二维数组
13、。stu_score有有5个数组单元,每个数个数组单元,每个数组单元又有组单元又有3个元素,我们称个元素,我们称stu_score是是一个一个53的二维数组,该二维数组行的的二维数组,该二维数组行的个数是个数是5,列的个数是,列的个数是3。6.3.1二维数组的定义二维数组的定义定义二维数组的语法是:定义二维数组的语法是:数数据据类类型型说说明明符符数数组组名名行行数数列列数数例如:例如:intdata53;说说明明整整型型数数组组a,有有5行行3列列共共15个个整整型型变量。变量。floatb1020;说明单精度浮点型数组说明单精度浮点型数组b,有有10行行20列共列共200个单精度浮点型变量
14、。个单精度浮点型变量。charstring2050;说明字符型数组说明字符型数组string,有有20行行50列共列共1000个字符型变量。个字符型变量。地址二维数组在概念上是二维的,可以说地址二维数组在概念上是二维的,可以说是数组的数组,二维数组的下标在行和列两个方是数组的数组,二维数组的下标在行和列两个方向变化。但是,计算机的内存是连续编址的,也向变化。但是,计算机的内存是连续编址的,也就是说存储器单元是按一维线性排列的。那么,就是说存储器单元是按一维线性排列的。那么,如何按照地址的顺序存放二维数组呢?一般有两如何按照地址的顺序存放二维数组呢?一般有两种方式来存储二维数组,第一种称为按行排
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课件 第六 适于 清华 谭浩强版
限制150内