C语言程序设计 教学课件 ppt 作者 曹哲曹哲书xgPPT 第7章xg

上传人:E**** 文档编号:89188108 上传时间:2019-05-20 格式:PPT 页数:86 大小:1.02MB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 曹哲曹哲书xgPPT 第7章xg_第1页
第1页 / 共86页
C语言程序设计 教学课件 ppt 作者 曹哲曹哲书xgPPT 第7章xg_第2页
第2页 / 共86页
C语言程序设计 教学课件 ppt 作者 曹哲曹哲书xgPPT 第7章xg_第3页
第3页 / 共86页
C语言程序设计 教学课件 ppt 作者 曹哲曹哲书xgPPT 第7章xg_第4页
第4页 / 共86页
C语言程序设计 教学课件 ppt 作者 曹哲曹哲书xgPPT 第7章xg_第5页
第5页 / 共86页
点击查看更多>>
资源描述

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

1、第7章 数组,学习内容指南,7.1 一维数组的定义和引用,7.2 一维数组与指针,7.3 二维数组的定义和引用,7.4 多维数组与指针,7.5 字符数组,7.6 字符串与指针,什么是数组? 在数学中我们学过数列、矩阵的概念, 数列通常表示为:a1 、a2 、a3、.、an 矩阵通常表示为:,前言,在C语言中表示数组和矩阵的方法是: 数组:a0、a1、a2、a3、a4、a5 其中 a称为数组名。 方括号中的数:称为下标 下标是一个数时,也就是数列,称为一维数组。 下标是两个数时,也就是矩阵,称为二维数组。 还有三维、四维数组等,前言,例如,一个班有40个学生,要计算其某门课程的平均成绩,可以将每

2、一个分数读到同一个单个变量s中,并及时进行累加,重复40次,即可以求出总成绩,再求出平均成绩。但这种方法并没有将40个学生成绩都存储起来,如果再想计算每一个学生的成绩与平均成绩之差,又需要重新从键盘读入每一个学生成绩,这显然是不合适的。如果用40个单个变量s1-s40存储40个成绩,处理时则很难使用循环结构。可见,一组不同名的单个变量无法表达一组数据的内在联系。,前言,如果把这些变量的集合作为一个整体来处理,即将它们构成一个数组,就可以利用数组名加下标的方法表示每一个数据。例如,用s1、s2、s3、s40共40个变量分别存放每名学生的成绩,它们构成一个s数组:其中s是数组名,它由40个数组元素

3、构成;每个数组元素“ ” 中的序号称为“下标”,这种带下标的变量又称为下标变量。 40个学生的成绩分别存在s1、s2、s3、s40中.,前言,可见,数组有如下几个特点: 数组是一组有序数据的集合。数组元素的下标即标示了它在数组中的位置顺序。 同一数组中的每个元素必须具有相同的数据类型。 具有一个下标的数组称为一维数组,如前面介绍的s数组。而具有2个下标的数组称为二维数组,以此类推,可以使用三维、四维等多维数组。一般四维以上的数组很少使用。,前言,数组有如下几个特点: 数组是一组有序数据的集合。数组元素的下标即标示了它在数组中的位置顺序。 同一数组中的每个元素必须具有相同的数据类型。 具有一个下

4、标的数组称为一维数组,如前面介绍的s数组。而具有2个下标的数组称为二维数组,以此类推,可以使用三维、四维等多维数组。一般四维以上的数组很少使用。,前言,一维数组在内存的存储形式: num (数组名)就是数组存储区域的首地址, 即 num=200 。,一组变量,7.1 一维数组的定义和引用,定义一个一维数组的格式: 类型说明符 数组名 常量表达式 ; 例如:int a 5 ; 几点说明: 格式中的类型说明符指定了每个数组元素的数据类型。 数组名的命名与变量名的命名规则相同,必须符合标识符的命名规则。 数组名后只有一个方括号,表示定义一个一维数组。 方括号中的常量表达式的值指定了该数组含有元素的个

5、数,即所定义的数组的长度。 常量表达式中可以含有符号常量,但不能包含变量,即不能定义动态数组。 一维数组的存储方式。根据类型并按照下标由小到大的顺序将数组元素存储在一片连续的内存空间中。,一维数组的定义,和对变量的初始化类似,可以在定义数组的同时给各数组元素赋值,即可以对数组进行初始化。 数组初始化的几种方法: 给出全部数组元素的初始化数据。此时方括号“ ”中的常量表达式可以省略不写。 可以只给出数组中前面部分元素的初始化数据。 要将一个数组所有元素都初始化为0,可以使用几种方法 。 当初始化列表中数据的个数多于数组的长度时,出错。,一维数组的初始化,如: int a 5 = 1 , 3 ,

6、5 , 7 , 9 ; 等价于: int a = 1 , 3 , 5 , 7 , 9 ; 在内存中的存储如图所示:,如: int a 5 = 1 , 3 , 5 ; 剩下的两个元素未给出初始化数据,系统自动用0来赋值。初始化的结果如图 :,如: int a 5 = 0 , 0 , 0 , 0 , 0 ; int a = 0 , 0 , 0 , 0 , 0 ; int a 5 = 0 ; 最后一种方法最可取,如: int a 5 = 1 , 3 , 5 , 7 , 9 , 11 ; 编译时将给出“Too many initializers” 的出错信息。,数组必须先定义,后使用 只能逐个引用数组

7、元素,不能一次引用整个数组 引用数组元素的格式: 数组名下标 其中:下标可以是常量、变量或表达式。,例 int a10; scanf(“%d”,a) ;,必须 int a10; for(j=0;j10;j+) scanf(“%d”, ,例如: int k=5 ; a1、a1+5 、ak、a10-k,(),( ),一维数组的引用,应注意定义数组和引用数组元素两者之间的区别。 例如: int a 5 ; /* 定义一个数组*/ a 4 = 0 ; /* a 4 表示引用a数组下标为4的元素*/ 引用数组元素下标不要越界。 例如: float i , j , k10 , x , y ; k -1 =

8、 0 ; k 10 = 100 ;,一维数组的引用的几点说明,( )下标越界,范围应该在09之间,( )下标越界,范围应该在09之间,例:建立一个含有10个元素的a数组,依次存放从1开始的奇数,然后分别按正序和逆序输出该数组所有元素的值。,一维数组的引用的几点说明,#include int main ( ) int a 10 , i ; for ( i = 0 ; i = 0 ; i- ) printf ( “%3d“ , a i ) ; printf ( “n“ ) ; return 0 ; ,例:从键盘输入一个班n个学生一门课的成绩,求出总成绩和平均成绩。,一维数组的引用的几点说明,#in

9、clude int main ( ) int score 100 , i , n , sum = 0 ; float aver ; printf ( “n=?“ ) ; scanf ( “%d“ , ,第1次运行,处理一个班5名学生的成绩,结果如下: n=?5 9588768760 Total=406 Aver=81.20 第2次运行,处理一个班10名学生的成绩,结果如下: n=?10 75918283778564815570 Total=763 Aver=76.30,例:用起泡法对10个学生成绩数据按升序(即由小到大的顺序)排序。,一维数组的引用的几点说明,分析解题过程:首先输入10数字到数

10、组a10 中。 (1)比较第一个数与第二个数,若为逆序a0a1,则交换值;然后比较第二个数与第三个数,若为逆序a1a2,则交换值;依次类推,直至第9个数和第10个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上,即在a9中。 (2)对前9个数进行第二趟冒泡排序,结果使次大的数被安置在第9个元素位置,即在a8中 。 (3)重复上述过程,共经过9趟冒泡排序后,排序结束。,起泡法排序的基本思路是:每次将相邻的2个数比较,如果顺序不对,则将2个数对调。 下面说明对4个数按升序排序的起泡法排序过程 :,一维数组的引用的几点说明,3 9 7 2,初始状态,3 9,7 9,2 9,3 7,2

11、 7,2 3,2,因此可将程序设计如下:,一维数组的引用的几点说明,#include int main ( ) int a 10 , i , j , t ; printf ( “Please input 10 data:n“ ) ; for ( i = 0 ; i a j + 1 ) t = a j ; a j = a j + 1 ; a j + 1 = t ; printf ( “The sorted data:n“ ) ; for ( i = 0 ; i 10 ; i+ ) printf ( “%d“ , a i ) ; printf ( “n“ ) ; return 0 ; ,运行结果如

12、下: Pleaseinput10data 65779173558498898381 The sorted data: 55657377818384899198,一个数组由若干个同类型的元素组成,这些元素按照下标从小到大的顺序被分配在内存中一片连续的存储单元中,每个数组元素都占用一个存储单元。每个数组元素的地址就是该数组元素的指针。 一个指针变量可以指向单个变量。同理,一个指针变量也可以指向一个数组元素,只要把数组元素的地址赋给该指针变量就可以了。,7.2 一维数组与指针,指向数组元素的指针,定义:与以前的指针变量相同 例 int array10; int *p; p=,数组名是表示数组首地址的

13、地址常量,array,指向数组元素的指针,指针变量的赋值运算 p= (指针变量p2值p1) 不能把一个整数p,也不能把p的值整型变量,如 int i, *p; p=1000; () i=p; (),指针变量与其指向的变量具有相同数据类型,指向数组元素指针的运算规则,指针的算术运算: p+i p+id (i为整型数,d为p指向的变量所占字节数) p+, p-, p+i, p-i, p+=i, p-=i等,例:p指向float数,地址为2000,则 p+1 p+1 4 2004,例:p指向int型数组,地址为2000,且p= 则 p+1 a1 2002,指向数组元素指针的运算规则,若p1与p2指向

14、同一数组 p1-p2 = 两指针间元素个数(p1-p2)/d p1+p2 无意义,例 int a10; int *p=,例 int a10; int *p1=,1,3,指向数组元素指针的运算规则,指针变量的关系运算 若p1和p2指向同一数组,则 p1p2 表示p1指的元素在后 p1=p2 表示p1与p2指向同一元素 若p1与p2不指向同一数组,比较无意义,指向数组元素指针的运算规则, 变址运算符 ai *(a+i),ai pi *(p+i) *(a+i),当p=a时,通过指针引用数组元素,总结 指向数组元素的指针的运算规则: 设指针变量p已指向数组中某一个元素,则p+1指向该数组中的下一个元素

15、,而p-1则指向该数组中的上一个元素。 设指针变量p已指向数组中某一个元素,则p+1指向该数组中的下一个元素,而p-1则指向该数组中的上一个元素。 *( p + i ) 或 *( a + i ) 是对p + i或a + i所指向的数组元素a i 的间接访问,因此等价于a i 。于是,当i从0变到9,*( p + i )、*( a + i )、 a i 都可以依次访问a数组的所有10个元素。 指向数组元素的指针变量可以带下标。 如果2个指针变量p1和p2指向同一数组的2个不同元素,则p1 - p2或p2 - p1表示2个元素的位置之差。,例: a数组有五个元素,用多种方法输出其所有元素的值,main() int a5,*p,i; for(i=0;i5;i+)ai=i+1; p=a; for(i=0;i5;i+) printf(“%d“, ai); for(i=0;i5;i+) printf(“%d“, *(a+i); for(p=a;p(a+5)

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

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

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