C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章

上传人:w****i 文档编号:94379264 上传时间:2019-08-06 格式:PPT 页数:58 大小:1.79MB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章_第1页
第1页 / 共58页
C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章_第2页
第2页 / 共58页
C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章_第3页
第3页 / 共58页
C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章_第4页
第4页 / 共58页
C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 姜海涛《C语言程序设计》第六章(58页珍藏版)》请在金锄头文库上搜索。

1、第六章 数组,主要内容,数组的引入,1,一维数组,2,字符数组与字符串,3,二维数组与多维数组,4,应用实例,5,本章要点,一维数组 字符数组与字符串 二维数组,本章学习目标,了解一维数组、二维数组的概念 掌握一维数组的定义、初始化和元素引用方法 掌握二维数组的定义、初始化和元素引用方法 理解字符数组与字符串的关系 掌握用字符数组进行字符串处理操作的方法,6.1 数组的引入,问题:统计收银员收款额的最大值 假设超市里面有4个收银员,编写程序,#include void main() float a,b,c,d; /*分别存放4个收银员当天收款额*/ float max; printf(“请输入

2、收款额:“); scanf(“%f%f%f%f“, ,6.1 数组的引入(续),如果超市又来了一个收银员,修改程序 如果超市又来了两个收银员,那么我们又要修改程序 如果超市走了一个收银员,那么我们又要修改程序,#include void main() float a,b,c,d,e; /*分别存放5个收银员当天收款额*/ float max; printf(“请输入收款额:“); scanf(“%f%f%f%f%f“, ,6.1 数组的引入(续),有没有更优雅的解决这个问题的方式呢?,#include void main() float money100; /*定义了由100个浮点数组成的数组

3、*/ float max; int nums; /*存放营业员的数量*/ int i; /*从键盘获取营业员数量*/ printf(“请输入营业员数量:“); scanf(“%d“, ,6.2 一维数组,一维数组主要用来存储一组类型相同并且数量一定的数据。其中,每个数据称为数组的一个元素。 6.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名常量表达式; int x100; char string10; double data10;,6.2 一维数组(续),常量表达式给出了数组的长度,在C语言中定义数组时必须确定数组的长度,因此不能用变量来指定数组的长度,即使该变量已被指定初始值

4、。 例如下面定义数组的方法是错误的。 int i=100; int xi;,6.2.2 一维数组的元素引用,可以通过数组名和下标引用数组元素 数组名下标表达式 下标表达式的值应为整数,其范围从0到数组长度-1。 任意的表达式只要其值符合要求,都可以用来引用数组元素。如x5|i、xi*3都是合法的引用形式。 下标表达式在C语言中称为下标运算符,下标表达式的值给出了要访问的元素在数组中的位置。,6.2.2 一维数组的元素引用(续),【例6-1】数组元素的引用。,/*程序6-1*/ #include void main() int a10,i; for(i=0;i=0;i-) printf(“a%d

5、=%dn“, i, ai); ,6.2.2 一维数组的元素引用(续),一维数组中各元素的存储空间是依次相邻的。 例如,程序中的数组a中包含10个整型元素,假设每个元素分配4字节的存储空间,则数组a将占用40个字节的连续存储空间。,6.2.3 一维数组的初始化,定义数组的时候指定数组元素的初始值。 int x10=0,1,2,3,4,5,6,7,8,9; 通过一对大括号里面的初值列表分别给数组中的每一个元素指定初值。,6.2.3 一维数组的初始化(续),也可以只给一部分元素指定初值。 int x10=0,1,2,3,4; int x10=0;,6.2.3 一维数组的初始化(续),如果在初值列表中

6、给每一个元素都指定了初值,那么数组定义中的常量表达式可以省略,例如: int a=2,4,6,7,8; 等价于 int a5=2,4,6,7,8; 需要注意,如果没有对数组进行初始化,数组中各元素的值是不确定的。,6.2.4 冒泡法排序,有n个数,要求以从大到小进行排序 第一趟排序:从第一个数开始,先比较第一个和第二个数,如果第一个数比第二个数小,就把两者交换,否则保持不变。然后比较第二个数和第三个数,第三个数和第四个数直至第n-1个数和第n个数。这样,经过n-1次比较和若干次交换之后,最小的数被逐步移动到了它应该在的位置,即第n个位置。,6.2.4 冒泡法排序(续),第二趟排序:依然从第一个

7、数开始,先比较第一个数和第二个数,然后是第二个数和第三个数,但是这次只需要进行到第n-2个数和第n-1数的比较就可以了,因为第n个数已经是最小的了,不需要再参与比较了。所以第二趟排序进行n-2次比较,最终的结果是第二小的数被逐步移动到了它应该在的位置,即第n-1个位置。,6.2.4 冒泡法排序(续),第三趟排序,这次进行n-3次比较,第三小的数被放到了第n-2个位置。 第i趟排序,这次进行n-i次比较,第i小的数被放到了第n-(i-1)个位置。 第n-1趟,这次进行n-(n-1)次也就是1次比较,第n-1小的数(也就是第二大的数)被放到了第n-(n-1)-1也就是第2个位置。同时,最大的数被放

8、到了第1个位置。,6.2.4 冒泡法排序(续),【例6-2】利用冒泡法对营业额从大到小排序,/*程序6-2*/ #include void main() float money100; /*定义了由100个浮点数组成的数组*/ float temp; int nums; /*存放营业员的数量*/ int i,j; /*从键盘获取营业员数量*/ printf(“请输入营业员数量:“); scanf(“%d“, ,实例演示,排序前的money数组,实例演示(续),i=0,j=0执行之后:,实例演示(续),i=0,j=1执行之后:,实例演示(续),i=0,j=2执行之后:,实例演示(续),i=0,j

9、=3执行之后:,6.3、字符数组与字符串,6.3.1 字符数组 定义字符数组 char c10; 对数组进行初始化 char c11=h,e,l,l,o, ,w,o,r,l,d;,6.3、字符数组与字符串(续),【例6-3】输出了字符数组中的每个字符。,/*程序6-3*/ #include void main() char c11=h,e,l,l,o, ,w,o,r,l,d; int i; for(i=0;i11;i+) putchar(ci); ,6.3.2 字符串,字符串常量是用一对双引号括起来的字符序列。 C语言中的字符串实际上是按照字符数组来处理的。 字符串“hello,world“

10、可以看出字符串“hello,world“实际上是一个长度为12的字符数组。,6.3.2 字符串(续),在C语言中只要保证字符串以空字符结尾,就可以在一个字符数组中存放字符串。 char noname = h,e,l,l,w,o,r,l,d,0; 数组noname中存放的是一个字符串。 字符串“hello,world”长度为11,数组noname长度为12,可以看出,为了在数组中存放字符串,数组长度应大于等于字符串长度加1。,6.3.2 字符串(续),定义字符数组时,可以用字符串为其赋初值,如: char string = “hello,world“;,6.3.3 字符串的输入输出,1通过sca

11、nf函数输入字符串 scanf函数通过格式说明符%s从键盘获取字符串,基本用法如下: scanf(“%s“, buf); 这条语句执行时,将会等待用户从键盘上输入字符串,直到用户输入回车为止。 参数buf是一个事先分配了存储空间的数组的名字,而且应该保证用户输入的字符串(连同结束标记0)不能超出这个数组的范围。,6.3.3 字符串的输入输出(续),【例6-4】读取字符串 %s格式只能读取由非空白符构成的字符串,如果遇到空白符则会认为字符串结束,后续字符不会被读取。,/*程序6-4*/ #include void main() char str20; int i; /*从健盘输入字符串*/ sc

12、anf(“%s“, str); /*输出字符串中的每个字符*/ for(i=0; stri!=0; i+) printf(“%c“, stri); ,输入: Good morning 程序输出: Good,6.3.3 字符串的输入输出(续),2通过printf函数输出字符串 printf函数可以使用格式说明符%s输出字符串,基本用法如下: printf(“%s“, buf); 参数buf可以是字符串常量或存放了字符串的数组的名字。,6.3.3 字符串的输入输出(续),【例6-5】输出字符串 str实际上表示字符串的起始地址(即第一个字符的地址 printf函数将从第一个字符开始,逐个输出字符串

13、的每个字符,直到遇到0为止。,/*程序6-5*/ #include void main() char str20; /*从健盘输入字符串*/ scanf(“%s“, str); /*通过%s输出字符串*/ printf(“%s“, str); ,输入: Hello 程序输出: Hello,6.3.3 字符串的输入输出(续),char string = h,e,l,l,w,o,r,l,d; printf(“%s“, string); 该语句执行后除了会输出hello,world这几个字符之外,可能还会出现一些其它字符。例如: hello,world#$% 造成这种现象的原因在于在hello,wo

14、rld之后并没有加上结束标记,所以printf函数输出hello,world之后并不会停止,而会越过数组的边界继续输出,直到在内存的某个地方遇到空字符为止。,6.4、二维数组和多维数组,6.4.1 二维数组的定义 二维数组定义的一般形式为: 类型名 数组名常量表达式1常量表达式2; 其中,常量表达式1给出了数组第一维的长度即数组的行数,常量表达式2给出了数组第二维的长度即数组的列数。 double a34; 多维数组定义的一般形式为: 类型名 数组名常量表达式1常量表达式2.常量表达式n; int x567;,6.4、二维数组和多维数组(续),6.4.2 二维数组的元素引用 二维数组的元素引用

15、的一般形式为: 数组名下标表达式1下标表达式2; 其中,下标表达式1、下标表达式2分别给出了要访问元素的行号、列号。 例如:a20、a5-x8+y 二维数组每一维下标的范围同一维数组一样,都是从0开始的。如上面定义的二维数组a,它的下标表达式1的取值范围为02,下标表达式2的取值范围为03。,6.4.3 二维数组初始化,二维数组同样可以在定义时初始化 通过将初值列表中的初值用大括号分成几个部分,可以按行对二维数组进行初始化。 int a34=0,0,0,0,1,1,1,1,2,2,2,2; 也可以按如下方式进行初始化: int a34=0,0,0,0,1,1,1,1,2,2,2,2;,6.4.3 二维数组初始化(续),也可以只对部分元素赋初值 int a34=1,2,3; 除了每行首列元素的值分别被赋为1,2,3之外,其余元素的初值都为0。,6.4.3 二维数组初始化(续),如果在初值列表中给每一个元素都指定了初值,那么二维数组定义里面的常量表达式1(即第一维的长度)可以省略,但常量表达式2(即第二维的长度)必须指定。 int a

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

最新文档


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

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