C语言程序设计_课件_第六章(适于清华谭浩强版).ppt

上传人:1595****071 文档编号:86288199 上传时间:2023-04-14 格式:PPT 页数:51 大小:490.50KB
返回 下载 相关 举报
C语言程序设计_课件_第六章(适于清华谭浩强版).ppt_第1页
第1页 / 共51页
C语言程序设计_课件_第六章(适于清华谭浩强版).ppt_第2页
第2页 / 共51页
点击查看更多>>
资源描述

《C语言程序设计_课件_第六章(适于清华谭浩强版).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计_课件_第六章(适于清华谭浩强版).ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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个字符型变量。个字符型变量。地址二维数组在概念上是二维的,可以说地址二维数组在概念上是二维的,可以说是数组的数组,二维数组的下标在行和列两个方是数组的数组,二维数组的下标在行和列两个方向变化。但是,计算机的内存是连续编址的,也向变化。但是,计算机的内存是连续编址的,也就是说存储器单元是按一维线性排列的。那么,就是说存储器单元是按一维线性排列的。那么,如何按照地址的顺序存放二维数组呢?一般有两如何按照地址的顺序存放二维数组呢?一般有两种方式来存储二维数组,第一种称为按行排

15、列,种方式来存储二维数组,第一种称为按行排列,方法是先存储完第一行中的每个元素,再存放下方法是先存储完第一行中的每个元素,再存放下一行的每个元素;第二种称为按列排列,方法是一行的每个元素;第二种称为按列排列,方法是先存储完第一列中的每个元素,再存放下一列的先存储完第一列中的每个元素,再存放下一列的每个元素。每个元素。C语言的编译系统采用按行排列。语言的编译系统采用按行排列。6.3.2二维数组的引用二维数组的引用引用二维数组的一般形式为:引用二维数组的一般形式为:数组名数组名行下标行下标列下标列下标行下标不能大于行下标不能大于行数行数-1,列下标不,列下标不能大于能大于列数列数-1。如果有如果有

16、intstu_score53;stu_score00、stu_score12、stu_score31都是正确的引用方式,但都是正确的引用方式,但是是stu_score33是不正确的。是不正确的。例例6.7判断下面程序的运行结果:判断下面程序的运行结果:#includestdio.hvoidmain()inti,j,a32;/*定义定义*/for(i=0;i3;i+)/*赋值赋值*/for(j=0;j2;j+)aij=i+j;for(i=0;i3;i+)for(j=0;j=0;i-)/*从从最最后后一一个个字字符符开开始始逆逆向向输输出出*/putchar(ci);6.4.2字符串变量字符串变量

17、C语言的字符串变量不是真正的字符串类型。语言的字符串变量不是真正的字符串类型。C语语言言的的字字符符串串变变量量从从形形式式上上还还是是定定义义一一个个字字符符数数组组,但但是是,在在概概念念上上,字字符符串串是是带带有有字字符符串串结结束束符符0的的一一组组字字符符,不不论论它它是是常常量量还是变量。还是变量。有有了了0标标志志以以后后,在在处处理理字字符符数数据据时时,就就不不必必再再用用数数组组的的长长度度来来控控制制对对字字符符数数组组的的操操作,而是用作,而是用0来判断字符串的结束位置。来判断字符串的结束位置。这这是是字字符符串串变变量量与与其其它它类类型型的的数数组组(包包括括一一

18、般的字符数组)在操作上的根本区别。般的字符数组)在操作上的根本区别。字符串变量需要用字符串常量对其进行初始字符串变量需要用字符串常量对其进行初始化。化。例如:例如:charstr=Hello;或或charstr=Hello;用上面两种方式初始化用上面两种方式初始化str以后,以后,str字符串字符串变量所占的内存空间是变量所占的内存空间是6字节,最后一个字节是字节,最后一个字节是字符串结束标志字符串结束标志0。6.4.3字符串变量的输入与输出字符串变量的输入与输出1、使使用用printf函函数数输输出出字字符符串串变变量量的的方方式式是是:使使用转换字符序列用转换字符序列“%s”。例例6.11

19、使用使用printf函数输出字符串变量。函数输出字符串变量。#includestdio.hvoidmain()charstr=Hello;printf(%s,str);运行结果:运行结果:Hello例例6.12请判断下面程序的运行结果:请判断下面程序的运行结果:#includestdio.hvoidmain()charstr10=H,e,l,l,o,!,0,!;printf(%s,str);运行结果:运行结果:?2、使使用用scanf函函数数输输入入字字符符串串给给字字符符串串变变量量也也使使用转换字符序列用转换字符序列“%s”。例例6.13使用使用scanf函数输入字符串给字符串变量。函数输

20、入字符串给字符串变量。#includestdio.hvoidmain()charstr10;scanf(%s,str);printf(%s,str);2、使使用用scanf函函数数输输入入字字符符串串给给字字符符串串变变量量也也使使用转换字符序列用转换字符序列“%s”。例例6.13使用使用scanf函数输入字符串给字符串变量。函数输入字符串给字符串变量。#includestdio.hvoidmain()charstr10;scanf(%s,str);printf(%s,str);运行结果:运行结果:Welcomeyou?3、puts()是字符串输出函数,其调用格式为:是字符串输出函数,其调用格

21、式为:puts(字符串变量字符串变量);它的功能是把字符串变量的内容(一定要它的功能是把字符串变量的内容(一定要有有0结束符)显示在屏幕上。结束符)显示在屏幕上。例例6.14使用使用puts()字符串输出函数。字符串输出函数。#includestdio.hvoidmain()charstr=Hello;puts(str);运行结果:运行结果:Hello#includestdio.hvoidmain()charstr=Hello;printf(%s,str);printf(%s,str);运行结果运行结果?#includestdio.hvoidmain()charstr=Hello;puts(s

22、tr);puts(str);运行结果:运行结果:?4、gets()是是字字符符串串输输入入函函数数,其其调调用用格格式式为为:gets(字符串变量字符串变量);它它的的功功能能是是:从从标标准准输输入入设设备备键键盘盘上上输输入入一一个个字字符串。符串。例例6.15使用使用gets()字符串输入函数。字符串输入函数。#includestdio.hvoidmain()charstr20;gets(str);puts(str);若输入为若输入为Welcomeyou输出?输出?6.4.4字符串函数字符串函数1.字符串连接函数字符串连接函数strcat其调用格式为:其调用格式为:strcat(字符串变

23、量字符串变量1,字符串,字符串2)它的功能是:将字符串它的功能是:将字符串2的字符串连接的字符串连接到字符串变量到字符串变量2中的字符串的后面,并删去字符中的字符串的后面,并删去字符串串变变量量1中中的的字字符符串串结结束束符符0。strcat的的返返回回值值是字符串变量是字符串变量1的首地址。的首地址。字字符符串串变变量量1应应定定义义足足够够的的长长度度,以以便便能能装装入连接以后的字符串。入连接以后的字符串。例例6.16字符串连接函数的使用。字符串连接函数的使用。#includestdio.h#includestring.hvoidmain()charstr130=Iam;charstr

24、210=astudent;strcat(str1,str2);puts(str1);运行结果:运行结果:Iamastudent2.字符串拷贝函数字符串拷贝函数strcpy其调用格式为:其调用格式为:strcpy(字符串变量字符串变量1,字符串,字符串2)它的功能是:将字符串它的功能是:将字符串2的字符串复制到的字符串复制到到到字字符符变变量量1中中。字字符符串串结结束束符符0也也一一起起复复制。制。字字符符串串2既既可可以以是是字字符符串串常常量量也也可可以以是是字字符符串串变变量。量。strcpy函数要求字符串变量函数要求字符串变量1有足够的长有足够的长度,以便能装入要复制的字符串。度,以便

25、能装入要复制的字符串。例例6.17使使用用函函数数strcpy将将一一个个字字符符串串的的内内容容拷拷贝贝到到另一个字符串中。另一个字符串中。#includestdio.h#includestring.hvoidmain()charstr130=Iam;charstr210=astudent;strcpy(str1,str2);puts(str1);运行结果:运行结果:astudent3.字符串比较函数字符串比较函数strcmp其调用格式为:其调用格式为:strcmp(字符串字符串1,字符串,字符串2)它的功能是:按照它的功能是:按照ASCII码顺序比较两个码顺序比较两个数组中的字符串,并由函

26、数返回值返回比较结数组中的字符串,并由函数返回值返回比较结果。果。若字符串若字符串1字符串字符串2,返回值为,返回值为0;若字符串若字符串1字符串字符串2,返回值为一正整数;,返回值为一正整数;若字符串若字符串1字符串字符串2,返回值为一负整数。,返回值为一负整数。字字符符串串1和和字字符符串串2既既可可以以是是字字符符串串常常量量也也可可以以是是字符串变量。字符串变量。4.求字符串长度函数求字符串长度函数strlen其调用格式为:其调用格式为:strlen(字符串字符串)它的功能是:计算字符串的实际长度它的功能是:计算字符串的实际长度(不含不含字字符符串串结结束束标标志志0),并并将将计计算

27、算结结果果作作为为函函数数值返回。字符串既可以是字符串常量也可以是值返回。字符串既可以是字符串常量也可以是字符串变量。字符串变量。例例6.18使用函数使用函数strlen计算字符串的长度并输出。计算字符串的长度并输出。#includestdio.h#includestring.hvoidmain()charstr=Iamastudent;printf(Thelengthofthestringis%dn,strlen(str);运行结果:运行结果:Thelengthofthestringis146.4.5程序举例程序举例例例6.19定定义义两两个个字字符符串串变变量量,使使用用输输入入函函数数为

28、为其其赋赋值值,将将两两个个字字符符串串连连接接起起来来并并输输出出(不不用用strcat函数)。函数)。例例6.20编编写写程程序序输输入入一一个个字字符符串串和和一一个个单单个个字字符符,在输入的字符串中删除所有的单个字符。在输入的字符串中删除所有的单个字符。例例6.21编编写写程程序序输输入入一一个个字字符符串串,对对该该字字符符串串中中的的字符从小到大排序并输出。字符从小到大排序并输出。例例6.22编写程序输入两个字符串,将在第一个字编写程序输入两个字符串,将在第一个字符串中出现的但在第二个字符串未出现的字符存符串中出现的但在第二个字符串未出现的字符存放在第三个字符串变量中并输出。注意

29、,允许第放在第三个字符串变量中并输出。注意,允许第三个字符串有重复的字符,例如,第一个字符串三个字符串有重复的字符,例如,第一个字符串是是“ABACDEFGH”,第二个字符串是第二个字符串是“BCD”,则第三个字符串是则第三个字符串是“AAEFGH”。例例6.23输入若干个学生的姓名(以一个特殊的名输入若干个学生的姓名(以一个特殊的名字字*作为结束)、期中成绩和期末成绩,计算作为结束)、期中成绩和期末成绩,计算出出总总评评成成绩绩,总总评评成成绩绩为为“30%期期中中成成绩绩+70%期期末末成成绩绩”,计计算算总总评评成成绩绩的的分分数数段段情情况况。最最后,从键盘输入一个学生的姓名,查询后,从键盘输入一个学生的姓名,查询该生的总评成绩。该生的总评成绩。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁