C语言程序设计:cd-7 数组

上传人:窝*** 文档编号:202091125 上传时间:2021-10-14 格式:PPT 页数:61 大小:2.22MB
返回 下载 相关 举报
C语言程序设计:cd-7 数组_第1页
第1页 / 共61页
C语言程序设计:cd-7 数组_第2页
第2页 / 共61页
C语言程序设计:cd-7 数组_第3页
第3页 / 共61页
C语言程序设计:cd-7 数组_第4页
第4页 / 共61页
C语言程序设计:cd-7 数组_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《C语言程序设计:cd-7 数组》由会员分享,可在线阅读,更多相关《C语言程序设计:cd-7 数组(61页珍藏版)》请在金锄头文库上搜索。

1、共 53 页 第 1 页,数 组,第七章,C语言程序设计,共 53 页 第 2 页,本章要点 1.建立数组的概念; 2.掌握一维数组和二维数组的定义、引用、存储结构和初始化方法; 3.掌握一维字符数组的输入输出; 4.掌握字符串处理函数的使用; 5.掌握数组程序设计的方法。,共 53 页 第 3 页,7.1 数组的概念,如何处理一个班学生的学习成绩? 一行文字怎样存储? 一个矩阵怎样存储 ?.,问题的提出:,数组:一组具有相同数据类型的数据的 有序集合,这些数据的特点:1.具有相同的数据类型 2.存放在连续的内存区域中 C语言为这些数据提供了一种构造数据类型:数组。,共 53 页 第 4 页,

2、7.2 一维数组,7.2.1 一维数组的定义和引用 1.一维数组的定义 类型说明符 数组名正整型常量表达式 ;,说明: 类型说明符:数组的类型。 数组名同变量名命名规则,数组名代表数组首地址,是地址常量。 常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量,不能是变量。 例如: float mark100; char str200; int s10,b10,c;,数组的名字,数组元素的个数,数组的类型,共 53 页 第 5 页,数组定义应注意: (1)数组名后是用方括号而不是圆括号。 int a(10),d(6);,(2)数组定义中的常量表达式表示数组元素个数。必须是

3、大于零的常量。 int b-8; int c0; (3) 语言中不允许对数组的大小作动态定义。 可以使用符号常量表示数组的大小。,int n; scanf(“%d” , ,#define SIZE 10 int aSIZE;,共 53 页 第 6 页,2. 一维数组的引用 数组元素的引用形式: 数组名 下标,下标指出在数组中第几个元素,(1)下标的值是数组元素的序号,可以是整型常量、整型变量或整型表达式。规定从0开始,直到n-1. w10数组的10个元素分别是:w0、w1、w9。,例:int a4,i=1; a0 = 2; /将数组a的第1个元素赋值为2 a1 = 4; /将数组a的第2个元素

4、赋值为4 a2 = a0 + a1; /2+4的值赋给第3个元素 a3=ai-1; /a0的值赋给第4个元素,共 53 页 第 7 页,(2)只能逐个引用数组元素,不能一次引用整个数组 例: int a10; scanf(“%d”,a); () printf (“%d”, a); () (3)数组元素引用时注意不要下标越界,编译程序不检查是否越界,下标越界将访问数组以外的空间。 (4) 数组必须先定义,后使用,注意区分数组的定义和数组元素的引用。,共 53 页 第 8 页,数组中的每个元素在功能上等价于一个一般的变量。 例如:输入100个学生成绩,并求出总成绩。,85,82,85,63,78,

5、90,63,85,85,148,82,7950,148,226,316,7950,优点:数据重用 数据有序,共 53 页 第 9 页,引用数组元素时,根据首地址和下标,自动计算出该元素的实际地址,取出该地址的内容进行操作。,如引用 mark2: (1)计算 2000+2*4=2008 (2)取出2008的内容,下标与地址的关系,float mark100; 为下标运算符, 数组名、数组元素是两种不同性质的数据。,数组名是数组的首地址,是一个地址常量。,数组元素则是数值。,共 53 页 第 10 页,7.2.2 一维数组的初始化和输入输出,1.数组的初始化: 在数组定义时为数组元素赋初值称为数组

6、初始化.,方法:将初值依次写在花括号 内。,如: int a5= 2 , 4 , 6 , 8 , 10 ;,存储形式:,存储单元1000,存储单元1004,共 53 页 第 11 页,(1)给数组中前边部分元素赋初值,其他元素按零 值处理。 如: int a9=1,2; /*a0= 1, a1= 2, a2a8值为0*/ int a5=0; /* 数组全部元素赋初值0 */ int a5= , ,1,2,3; 错误,(2) 对数组元素全部赋值可以不指定长度。 int a=0,1,2,3,5 ; 等价于:int a5=0,1,2,3,5 ;,(3)初值的个数不能超过数组总元素的个数。 int a

7、3= 1, 2,3, 4 ; /* 语法错! */,数组初始化说明:,2. 一维数组在程序中赋值,C语言除了在定义数组变量时用初值列表对数组整体赋值以外,无法再对数组变量进行整体赋值。,例 int a5; a = 1, 2, 3, 4, 5; a = 1, 2, 3, 4, 5; a5 = 1, 2, 3, 4, 5; ,使用赋值语句逐一赋值,例 int a4; a0 = 1; a1 = 2; a2 = 3; a3 = 4;,使用循环语句逐一赋值,例如,将数组a的各元素赋值成奇数序列。 int a10, i; for (i = 0; i 10; i+) ai = 2* i + 1;,例如,接受

8、用户键盘输入赋值给数组各元素。 int a10, i; for (i = 0; i 10; i+) scanf(%d, ,这种方法是在编程中普遍使用的一种方法,它适用于对某数组元素进行有规律的赋值或接受用户通过键盘输入对数组元素的赋值 。,使用循环语句输入数组元素,共 53 页 第 14 页,3.一维数组元素的输出,输出数组全部元素 main() int a5=1,2,3,4,5, i ; for(i=0; i5; i+) printf(%d,ai); . ,输出数组部分元素 main() int a5=1,2,3,4,5 ; printf(%d,%d,a1,a2); . ,如何使两个数组的值

9、相等?,main() int a4 = 1,2,3,4, b4; b = a; ,解决方法 方法1:逐个元素赋值 b0=a0; b1=a1; b2=a2; b3=a3; 方法2:通过循环赋值 int i; for (i=0;i4;i+) bi = ai; ,原因: 数组名b表示数组的首地址,即 b0的地址,其值不可改变,不能被赋值!,共 53 页 第 16 页,【例1】从键盘上输入6个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。,#include main() int a6,i,j,k,t; for(i=0 ; i6 ; i+) scanf(%d, ,算法分析:采用循环设计。 ai与

10、aj进行交换,其中i=0,1,n/2-1, j=n-i-1,7.2.3 一维数组应用举例,运行程序时如何输入数据?,3 4 1 5 6 2,【例2】 用数组求Fibonacci数列 前20个数。,#include int main( ) int i, f20 = 1, 1; for (i=2; i20; i+) fi= fi-2 + fi-1; for (i=0; i20; i+) if (i%5 = 0) printf (n); printf (%8d, fi); return 0; ,f数组的第1、2个元素被初始化为1.,max(i=0),max(i=2),max(i=3),【例3】 找最

11、大值算法,计算最大值算法分析:采用打擂台的方法,任意指定某数为擂主,然后擂主依次与其他数比较,若某数大于擂主,则替换擂主。循环结束,擂主变量中一定是最大的数。,找最大值程序,#include main() int a10,i,max; for(i=0 ; imax) max=ai; printf(max=%dn,max); ,输入10个数,找出其中最大值并输出。,如何找出最大值元素的位置?,【例4】用冒泡排序法将10个整数按照从小到大的顺序排序。,排序过程分析: (1) 比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第

12、一趟冒泡排序,结果最大的数被安置在最后一个元素位置上; (2) 对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置; (3) 重复上述过程,共经过n-1趟冒泡排序后,排序结束。,由以上可推知:6 个数要比较5趟 第一趟中要进行两两比较5次 第二趟中比较 4次 若 有n个数,则要进行n-1趟比较 第 i趟比较中要进行n-i次两两比较。,38,49,76,97,97,97,97,13,27,30,13,76,76,76,27,30,13,65,65,65,27,30,13,49,49,49,27,30,13,38,38,38,27,30,冒泡排序图示效果,冒泡排序N-S流程

13、图,#include #define NUM 10 void main ( ) int aNUM, i, j, t; printf (input %d numbers: n, NUM); for (i = 0; i aj) /*交换aj-1和aj */ t = aj-1; aj-1 = aj; aj = t; printf (the sorted numbers:n); for (i = 0; i NUM; i+) /*输出排好序的数据*/ printf (%d , ai); ,运行结果: input 10 numbers: 10 1 2 7 6 8 9 3 4 5 the sorted nu

14、mbers: 1 2 3 4 5 6 7 8 9 10,另一种方法: for (i=0; i aj+1) t= j; aj=aj+1; aj+1=t; ,【例5】用选择排序法将10个整数从小到大排序,排序过程: (1) 首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数交换第一趟选择排序,结果最小的数被安置在第一个元素位置上; (2) 再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换第二趟选择排序; (3) 重复上述过程,共经过n-1趟排序后,排序结束。,冒泡排序的缺陷:在比较交换的过程中,大的数不能一次到位,效率低。,选择排序法的基本思想: 以冒泡排

15、序法为基础,在两两比较后并不马上进行交换,而是在找到最小的数之后,记住最小数的位置(数组中的下标),待一轮比较完毕后,再将最小的数一次交换到位。,初始: 49 38 65 97 76 13 27 ,i = 1,13,49,一趟: 13 38 65 97 76 49 27 ,i = 2,27,38,二趟: 13 27 65 97 76 49 38 ,三趟: 13 27 38 97 76 49 65 ,四趟: 13 27 38 49 76 97 65 ,五趟: 13 27 38 49 65 97 76 ,六趟: 13 27 38 49 65 76 97 ,选择排序图示效果,选择法排序N-S流程图,

16、#include main( ) int a10, i, j, k, t; printf (Input 10 numbers: n); for (i = 0; i 10; i+) scanf (%d, ,共 53 页 第 28 页,例如 int a33,7.3 二维数组 7.3.1 二维数组的定义,行数,列数,二维数组用两个下标确定各元素在数组中的顺序,可用排 列成i行,j列的元素组来表示。,元素个数=行数*列数,共 53 页 第 29 页,说明:,二维数组除了维数比一维数组多一维外, 其它性质与一维数组全部类似。,下面写法是否正确?, int a03;,用于定义数组长度的常量表达式的值必须是大于0的正整数。, int i=3 , j=4 ; int aij ;,定义数组元素的个数必须使用常量表达式,而不能使用变量。,理解二维数组,二维数组a是由3个元素组成,每个元素ai由包含4个元素 的一维数组组成,共 53 页 第 31 页,7.3.2 二维数组的引用 二维数组的引用与引用一维数组元素一样,也用 下标法引用二维数组元素。 二维数组元素表示形式:数组名下标1下标2 下标1和下标2是整

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

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

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