《C(七)详细教案.doc》由会员分享,可在线阅读,更多相关《C(七)详细教案.doc(5页珍藏版)》请在金锄头文库上搜索。
1、课程名称:程序逻辑和C语言实现北大青鸟Aptech学术部C语言教案第七章 数组授课教师:陈锡伟课时:2小时l 本章主要目的n 1)理解为什么要使用数组n 2)理解C语言中的数组n 3)一维、二维数组的定义及使用n 4)熟悉用数组实现常用的算法l 本章重点n 如何使用一维数组和二维数组,并且使用数组解决实际问题l 本章难点n 数组的访问过程n 数组实现常用的算法知识点介绍:一 数组的必要性:老师提问:1、 在第二章讲到的char数据类型。只能存储单个字符。如果要保存一个人的名字要怎么办呢?如何去存储?2、 我们讲如果输入一个学生的成绩,就需要定义一个变量来保存。那么如果要保存全班30个人的成绩,
2、以方便查看,那是不是就要定义30个变量,才能保存这30个不同的值呢?可以用这个方式,但如果有1000人,那这样做就很没有效率,太麻烦。回答:如果要解决这种问题。把同类型的数据保存在一起。既方便存储,又方便读取和查找,这就是要介绍的C语言中要介绍到的数组这样一种存储数据的结构。二 C语言中的数组的定义1、 数组的定义:数组是在内存中可以连续存储多个元素的结构。可以看作是一组具有相同数据类型的变量的集合。系统会为数组分配一块连续的内存空间。2、 数组的特点:(结合数组的定义来讲解数组的特点和要注意的地方)1) 所有的数组元素都具有相同的数据类型。(如,都要保存的是成绩,或都是保存的是字符的名字)2
3、) 数组可以存储任意数量的元素,不论数组中有多少个元素,在数组中都只有一个名称。3) 数组元素在数组里顺序地编号,这个编号称为数组元素的下标或是索引。C语言规定下标从0开始,最大到最大长度减一。4) 数组的大小必须在声明数组时确定。使用数组名加上下标可以取得单个数组元素的值。3、 数组的类型:数组有两种类型,一维数组和多维数组。一维数组使用一个下标,根据数组的维数,多维数组就是使用多个下标。但我们通常指的是二维数组。下面就来看下数组在C语言中如何来定义的?三 一维数组的定义、初始化及应用(注意:在对数组操作时,是对整个数组的操作,还是对数组中的单个元素进行操作)1、 一维数组1) 声明:和普通
4、的变量声明相比较,只是多了个常量表达式。来表示数组的大小。Eg:int num30保存30个不同的成绩。是一组整型变量的集合。Char name20来表示存储的是相同的字符类型的一组值。是一些字符的集合。表示了这个数组变量是由30个整型的数组合而成的。在内存里存储一系连续的存储空间 。0123下标A0A1A2A3元素Int num30; / 表示的是数组标识数组长度数据类型数组名2) 在数组定义时,就必须规定一个数组的大小,一旦被声明,就不能改变大小。以下的几种声明方式的显示:正确错误1. 如int a5,2. int a4+1,3. #define n 4 int an4. Int aA1、
5、 Int I;int ai2、 Int a 3、 Int a04、 Int a1.53) 赋值:数组变量只能在定义时,给其赋初始值。a) 数组名下标=值:eg:int a5; a0=12 a1=20b) 声明时初始化数组:eg:a5=10,20,30,40,50 a =10,20,30,40,50注意:int a5;a5=90这是错误的。会造成数组溢出。规定了长度之后,就不能再改变数组的大小。但是要注意不能直接用:int a 这样声明数组。因为声明时必须要规定数组的大小在为数组赋了值后,访问数组中的元素可以随机访问,不需要每次都从0开始。注意:1. 在初始化赋值时,注意所给值的个数不能超过数组
6、的大小。(不能越界)比如讲在宾馆里预定了10间房子却有11个人住,那多出的那个人住在哪里呢?2. 可以在赋值时,给它少于定义个数的初值。3. 可以不指定数组元素的个数,直接通过对其初始化来让编译器得到它的实际个数。就好比去开个人,就开几间房。4. 不能使用赋值运算符将一个数组赋值给另一个数组。如果要将一个数组的值赋给另一个数组。那就必须通过循环为每个元素分别赋值。案例讲解:对数组赋值,并循环输出。分析:第一要定义一个数组来存放值,第二要循环输出就需要一个循环控制变量。定义好以后再对数组进行赋值,采用两种方式对比(一种是单个赋值,一种是采用循环赋值)从这题目主要是要了解数组可以通过循环为其赋值,
7、赋值的方式是采用数组名加上下标来给其赋值。int i,a5;/*a0=10;a1=20;a2=30;a3=40;a4=50;*/给数组中的元素单个赋值。/以下是对数组中的元素用输入的方式,循环赋值。for(i=0;i5;i+)scanf(%d,&ai);/可以在输出时采用&输出,来查看数组在内存中存储位置的排列,是相邻的。for(i=0;i5;i+)printf(%dn,&ai);案例讲解:输入几个数,计算它的和。(补充其案例)四 二维数组的定义、初始化及应用生活中有很多事务,是不能用仅仅使用一维数组。比如讲不止是保存一个人的姓名,要保存一个班的。比如讲要保存几个班的成绩。那要如何处理呢?1.
8、 定义:数组类型 数组名 eg. Char name20,20 /int a23 在这个数组中可以保存2*3=6个数据。2. 存储:首先画出示意图,来讲解数组在内存中是保存在一片连续的区域内。 保存时先写出每个元素的下标。如a00 a01 a02,让学员了解二维数组就像二维表格。的矩阵列。然后可以将其转化为表格,提示图形的打印输出时,用双重FOR循环。外循环来表示行,内循环表示的是每行中打印的列数。二维数组的打印输出方式是类似的。在实际的硬件存储器其实是连续编址的。提示注意数组在存储分配时,下标的变化。3. 赋值:1) a23=10,20,30,40,50,602) a23=1,2,3,4,5
9、,6以上这两种都可能给二维数组赋初始值,但也是有区别的。如果只给这两个数组赋4个值的时候。那么区别就会显现。4. 错误赋值方式:a2/a 错误原因是二维数组的行可以在初始时省略,但第二个值(列)是必须要指定的。可以不指定第一维的大小,但是必须要指定第二维的大小。但是int a3=1,2,3,4,5,6这样赋值是正确的。案例讲解:给二维数组赋值。(注意外循环是做行的,内循环是做每行的打印输出。)int i, j, num42;for (i = 0; i = 3; i+) for (j = 0; j =1 ; j+) scanf(%d,&numij); 五 字符类型的数组的定义及使用1. 一维字符类型:保存一个学生的名字。案例讲解:(补充案例)2. 二维字符类型(如果要保存一个班几十个学员的名字,这时候就可以用字符类型的数组来为其赋值。) (补充案例)案例讲解:int i;char name520;for(i=0;i5;i+)scanf(%s,namei);for(i=0;i5;i+)scanf(%s,namei);六 用数组实现常用的算法案例在同章的EXAMPLE文件夹中。(补充教学方法)本章总结 1. 扩展部分: 扩展部分1: 扩展部分2: 扩展部分3:2. 学员问题汇总: 学员问题1: 学员问题2:3. 作业: 习题1: 习题2: 习题3:1- -