第6章数组梁教学文稿

上传人:yuzo****123 文档编号:139342937 上传时间:2020-07-21 格式:PPT 页数:32 大小:1.18MB
返回 下载 相关 举报
第6章数组梁教学文稿_第1页
第1页 / 共32页
第6章数组梁教学文稿_第2页
第2页 / 共32页
第6章数组梁教学文稿_第3页
第3页 / 共32页
第6章数组梁教学文稿_第4页
第4页 / 共32页
第6章数组梁教学文稿_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《第6章数组梁教学文稿》由会员分享,可在线阅读,更多相关《第6章数组梁教学文稿(32页珍藏版)》请在金锄头文库上搜索。

1、第6章 数组,2,教学目标,理解为什么要使用数组 理解 C 语言中数组 熟练掌握一维数组的使用 掌握二维数组的使用 熟悉用数组实现常用的算法 作业:书p139的6.3,6.8 实验p68的二题中的2,3,3,为什么要使用数组,如何处理 一个班学生的学习成绩? 一行文字怎样存储? 一个矩阵怎样存储 ?.,问题:,这些数据的特点:1.具有相同的数据类型 2.使用过程中需要保留原始数据 C语言为这些数据提供了一种构造数据类型:数组。,4,C 语言中的数组,3 2 1 0,Rate 4 ,数组名,下标标明了元素在数组中的位置 ,从0开始,数组元素,下标,数组大小,数组是可以在内存中连续存储多个元素的结

2、构 数组中的所有元素必须属于相同的数据类型,6,数组类型,一维数组,二维数组,三维数组,7,声明一维数组,datatype arrayNamesize;,类型说明符 int、char、float ,数组名,常量表达式: 数组大小,int num50; char list_of_initials20; double pressure_level6;,# define LIMIT 20 . . . int emp_codesLIMIT;,数组和变量一样,必须先声明后使用; 数组大小定义好后,将永远不变;,数组大小最好用宏来定义,以适应未来可能的变化,8,初始化一维数组,int emp_code5

3、= 1299,1499,1699,1899,2099;,emp_code,9,初始化一维数组,在定义数组时对数组元素赋以初值。 如果想使一个数组中全部元素值为0,可以写成 int a10=0,0,0,0,0,0,0,0,0,0; 或者写成 int a10=0*10; 在对全部数组元素赋初值时,可以不指定数组长度。 例如: int a5=1,2,3,4,5; 也可以写成int a=1,2,3,4,5; 在第二种写法中,花括号中有5个数,系统会据此自动定义a数组的长度为5。,其他的初始化情况: int arr10 = 10,9,8,7,6,5,4,3,2,1,0; /错误!越界了 int arr=

4、; /错误,到底是几个元素? int arr10 = 9,8,7,5; /正确,后面的6个元素未初始化,使用sizeof可以用来获得数组大小,10,为一维数组动态赋值,float price4; printf(“Enter prices of 4 booksn”); for (i = 0;i = 3; i+) scanf(“%f”, ,price,12.34,1002.10,17.5,11.12,11,只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i;,输入第i个数组元素:,scanf(%d,输入整个数组元素:,for (i=0;i10;i+) scanf(%d,输出

5、方法:,输出第i个数组元素:,printf(%d,ai);,输出整个数组元素:,for (i=0;i10;i+) printf(%d,ai);,一维数组的输入和输出,12,一维数组示例,# include int main(void) int i; float item_rate5,total=0; printf(n 请输入商品价格:); for(i=0;i5;i+) scanf(%f, ,循环执行 5 次,请输入商品价格:35.50 45.8 23 40.7 80,0,0,Item_rate,35.50,35.50,45.8,23,40.7,80,6,225.0,所有商品的合计费用:225.

6、000000,13,二维数组,datatype arrayNamerowsizecolsize;,int num42;,num,4 X 2 = 8,8*sizeof(int) 字节,14,二维数组,int books42 = 11, 1294,22,450, 33,4000, 44,79;,int arr 3 = 1,2,3, 4,5,6;,int arr2 = 1,2,3, 4,5,6;,15,int a23;,a10,a11,a12,a00,a01,a02,存放顺序:按行存放 先顺序存放第0行的元素 再存放第1行的元素,二维数组的存储结构,16,二维数组,int i, j, num42;

7、for (i = 0; i = 3; i+) for (j = 0; j =1 ; j+) scanf(%d, ,17,二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),int a23,i,j;,18,二维数组示例,int i,j,student32; for(i = 0;i 3;i+) printf(n 输入学号 %d 两个学期的成绩:,i+1); for(j = 0;j 2;j+) scanf(%d, ,内层循环执行 6 次,读入6个值,输出数组元素的值,输入学号 1 两个学期的成绩:65 56 输入学号 2 两个学期的成绩:78 80 输入学号 3 两个学

8、期的成绩:89 66 学员的学号及其两个学期的成绩为: 学号 第一学期 第二学期 1 65 56 2 78 80 3 89 66 Press any key to continue,19,数组下标越界,C语言不检查数组下标的超界。如定义数组 int intarray10; 合法的下标范围是09,但如果你引用intarray10,系统不会报错。如数组intarray 的起始地址是1000,则引用intarray10,则系统对1040号内存进行操作。而1040可能是另一个变量的地址 解决方法:由程序员自己控制。在对下标变量进行操作前,先检查下标的合法性。,20,问题描述: 求一组数中的最大值和最小

9、值 。,数组应用,max(i=0),max(i=2),max(i=3),21,数组应用,#include int main(void) int num5,max,min,i; printf(请输入5个数:n); for(i=0;inumi) min=numi; printf(n最大值为:%d,max); printf(n最小值为: %dn,min); return 0; ,读入5个值保存在数组中,求最大值和最小值,22,问题描述: 输入10个数,保存在一个数组中,在数组中查找某个数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!”。,#define

10、 N 10 for(i=0;iN;i+) scanf(%d, ,读入10个值保存在数组中,在数组中查找,一旦找到,通过break语句跳出循环,数组应用,23,问题描述: 编写C程序实现冒泡排序算法,按照降序排列一组数。,冒泡法排序,#define N 5 int gradeN,temp; for(i=0;iN;i+) scanf(%d, ,读入5个值保存在数组中,16,25,9,90,23,16,25,90,9,9,23,16,90,16,23,25,90,24,9 8 5 4 2 0,9 8 5 4 2 0,8 9,5 9,4 9,2 9,0 9,9,9,8 5 4 2 0 9,5 8,4

11、8,2 8,0 8,8,8,4 2 0 5 8 9,5,5,2 0 4 5 8 9,4,4,0 2 4 5 8 9,2,2,结果,开始,0 2 4 5 8 9,思路是:将相邻两个数比较,将小的调到前头。,比较次数:5 4 3 2 1,如果原序列为5、8、9、4、2、0,首先排在最后的还是 9 吗? 如果要求首先将最小的数排在最前面,该如何操作?,冒泡法排序,25,#include #define N 6 main ( ) int aN+1; int i , j, t ; printf (input %d numbers:n, N); for ( i = 1; i ai+1 ) t = ai;

12、ai = ai+1; ai+1 = t; printf (the sorted numbers:n); for ( i = 1; i = N; i+) printf (%d , ai ); printf (n); ,改为 N ?,注:本例中数组a的第一个元素a0没有被使用,请修改程序以便节省内存空间。,for ( i = 0; i N; i+) scanf (%d, ,复合语句?,试试看: 1、将顺序改为先大后小,如何用程序实现? 2、算法改为将较小的数先移到前边,程序如何改动?,冒泡法排序,26,问题描述: 如果一个数组中保存的元素是有序的(由大到小),向这个数组中插入一个数,使得插入后的数

13、组元素依然保持有序。,#define N 5 int numN+1=23,45,60,67,88,in; printf(n 请输入一个要插入的数:); scanf(%d, ,查找第一个大于要插入数的位置,为要插入的数留出位置,将要插入的数保存到该位置,数组应用,27,求 Fibonacci 数列问题,例7.3,用数组来处理 求 Fibonacci 数列问题,#include main ( ) int i; long f 40 = 1, 1; for ( i = 2; i 40; i+) f i = f i-2 + f i-1; for ( i = 0; i 40; i+) if ( i % 4

14、 = 0) printf (n); printf (%16ld, f i ); ,#include main ( ) int i; long int f1, f2; f1 = 1; f2 = 1; printf (%16ld%16ld, f1, f2 ); for ( i = 2; i = 20; i+) f1 = f1 + f2; f2 = f2 + f1; printf (%16ld%16ld, f1, f2 ); if ( i % 2 = 0 ) printf (n); ,Fibonacci 数列: F1 = 1n 1 F2 = 1n 2 Fn = Fn-1 + Fn-2n 3,算法复杂

15、 少占内存,算法简单 多占内存,28,矩阵转置,求矩阵A(23)的转置矩阵B(32)。,矩阵转置算法:在原来矩阵中的元素aij,应是转置后矩阵中的元素bji。,29,矩阵转置,#include main() static int a23 = 1, 2, 3, 4, 5, 6; int b32, i, j; printf (array a:n); for ( i = 0; i =1; i+) for ( j = 0; j = 2; j+) printf (%3d, aij ); bji = aij; printf (n); printf(array b:n); for ( i = 0; i = 2; i+) for ( j = 0; j = 1; j+) printf(%3d, bij ); printf(n); ,30,总结,数组是可以在内存中连续存储多个元素的结构数组中的所有元素必须属于相同的数据类型 数组必须先声明,然后才能使用。声明一个数组只是为该数组留出内存空间,并不会为其赋任何值 数组的元素通过数组下标访问 一维数组可用一个循环动态初始化,而二维数组可用嵌套循环动态初始化 二维数组可以看作是由一维数组的嵌套而构成的,31,数组应用,编写程序,计算两个矩阵差。,32,Thank you,Qu

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

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

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