2022年《C语言程序设计》教案.docx
名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学习好资料 欢迎下载C 语言程序设计教案编号: C程序设计 6 制订日期: 2022-1-25 课程名称第 6 章 数组第 5、 6 周授课形式讲授授课班级2022 级软件工程授课时数6 学时授课日期2022.03.20-04.10 授课地点公 1#512、#513 教学目标与要求:1.明白什么是数组2.把握3.教学重点、难点:1.;2.;3.;4. 重点 教学预备:1采纳多媒体教学;2教学材料教材: C语言程序设计 第四版 谭浩强著 清华高校出版社参考资料 : C+语言程序设计与实践张思民著 清华高校出版社3制作多媒体课件,讲稿;教学过程与时间安排 备注授课内容 补充内容 随机函数1、 随机函数随机函数是数学库函数中描述随机数的一个常用函数;随机数是一种随机产生、 事先无法猜测的数值;随机数; C+ 在系统头文件 cstdlib在设计程序时, 有时候会需要用到 中内建了一个随机数产生器随机函数 rand ,这是用来产生随机数的函数;随机函数 rand 可以产生 032767 之间的一个伪随机整数;之所以用 “ 伪”字来形容它, 是由于产生的随机数依靠于一个特别的输入值,这个输入值称为“ 种子” ;有两个用于产生随机数种子的函数:和time ;srand 函数在 第 1 页,共 7 页 系统头文件 cstdlib中定义,由于头文件 cstdlib是系统默认的,因此可以省略; time 函数在系统头文件 ctime中定义, time 函数细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学习好资料 欢迎下载的返回值实际上是以秒为计数单位的运算机内部时钟的当前时间;由于每次执行的时候,时间的数值都不相同,因此产生的随机数不会重复;假如事先没有调用 srand 和 time 这两个函数,将产生同一序列的 随机数;2、产生随机数为了在运行程序时,每次都获得不同的随机数,需要rand 、srand 和 time 三个函数结合起来使用;例如:srandtime0; int n = rand; 就每次产生的随机数 n 都是不重复的;【补充例 1】产生三个每次运行都各不相同的随机数;源程序如下:1 #include <stdio.h> 2 #include <stdlib.h> rand 和 srand 需要用到此头文件3 #include <time.h> time 需要用到此头文件4 5 void main 6 7 int a, b, c; 8srandtime0; 用于产生每次运行程序获得不重复的随机数的种子 9 a = rand; 10b = rand; 产生三个随机数,如没有种子,每次会产生重复的数 11c = rand; 12 printf "a = %d t" , a; 13 printf "b = %d t" , b; 14 printf "c = %d n" , c; 15 在本程序中, 使用了产生种子的语句,每次运行程序所得到的三个 随机数都不是重复的;例如,第一次运行程序所得到的三个随机数为:a = 26921 b = 28173 c = 574 再运行一次程序,其运行结果为:有种子,产生的随机数不重复a = 27087 b = 19285 c = 26911 在程序中, 如没有产生种子的语句“ srandtime0;” ,就每次运行程序所得到的三个随机数都会重复;三个随机数为:a = 41 b = 18467 c = 6334 再运行一次程序,其运行结果仍是:a = 41 b = 18467 c = 6334 例如,第一次运行程序所得到的没有种子,产生的随机数是重复的细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学习好资料 欢迎下载实际编程中, 常常需要产生在一个指定的范畴内的随机数;为了控制随机数在一个指定的范畴内产生,需要用到取模运算符“%” ;例如 要获得一个 0 N-1 之间的随机整数,可以使用“ rand % N” 来 产生;【补充例 2】产生三个 100 以内的随机数;源程序如下:1 #include <stdio.h> 2 #include <stdlib.h> rand 和 srand 需要用到此头文件3 #include <time.h> time 需要用到此头文件4 5 void main 6 7 int a, b, c; 8int N = 100; 9srandtime0; 10 a = rand % N +1; 11b = rand % N +1; 由于产生随机数的范畴是0 99 ,故需要再加1 12 c = rand % N +1; 13 printf "a = %d t" , a; 14 printf "b = %d t" , b; 15 printf "c = %d n" , c; 16 程序运行结果为:a = 76 b = 94 c = 5 6.1.1 一维数组数组是具有相同类型变量的集合;在数组中,各个变量称之为元素;其中, 同一数组中的全部元素都有相同的名字,只是下标不同; 只有一 个下标的数组称之为一维数组,有多个下标的数组称之为多维数组;1. 一维数组的定义 一维数组定义的一般形式为:数据类型数组名常量表达式 ;说明:(1)数据类型表示数组元素的类型;(2)数组名的命名规章跟变量名一样;(3)方括号中的常量表达式是数组的容量,即包含元素的个 数;细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学习好资料 欢迎下载例如:定义数组int a10; 表示定义了一个整型的数组 型);其说明如图 6.1 所示;a,含有 10 个元素(每个元素都是整图 6.1 数组定义的说明 数组一旦定义,各数组元素名就确定了;数组元素的一般形式为:数组名 下标 数组的第一个元素的下标总是从0 开头的;对于上面所定义的数组a10, 其 元 素 依 次 为a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;其实,数组名代表的是数组的首地址,下标就是数组元素到数组开始的偏移量; 系统为数组在内存安排的是一片连续的储备的单元,如定义了“int a10;”,就它的 10 个元素在内存中的排列情形如图 6.2所示:图 6.2 一维数组元素在内存中的排列情形2. 一维数组的初始化数组初始化是指在数组定义时给数组元素给予初值;数组初始化是在编译阶段进行的;这样将削减运行时间,提高效率;数组初始化赋值的一般形式为:数据类型 数组名 常量表达式 = 值,值, ,值 ;其中在 中的各数据值依次为各元素的初值,各值之间用逗号间隔;例如: int a10 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ; 相当于 a0 = 0; a1 = 1; .; a9 = 9; 数组初始化赋值的几点说明:( 1)可以只给部分元素赋初值;当 数时,只给前面部分元素赋值;例如: int a10 = 0, 1, 2, 3, 4; 中数据值的个数少于元素个细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -表示只给学习好资料欢迎下载a0 a4 这 5 个元素赋值,而后5 个元素将被编译器自动赋 0 值;如图 6.3 所示;图 6.3 未赋值的元素自动被 0 填充(2)只能给元素逐个赋值,不能给数组整体赋值;例如:给十个 元素全部赋 1 值,只能写为: int a10 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; 而不能写为: int a10=1; (3)如在定义数组时给全部元素赋初值,就在数组定义的说明中,可以不显式的指出数组容量,系统会以给出的数值个数默认为数组容量;例如: int a5 = 1, 2, 3, 4, 5; 可写为: int a = 1, 2, 3, 4, 5; 留意,C+ 数组元素以0 开头而不是以1 开头, 常常会有初学者搞错;例如,声明白数组int a5; 这表示数组 a 有 5 个元素: a0 、a1 、a2 、a3 、a4 ;这个数组中没有 a5 这个元素;需要指出的是, 这时假如在程序中使用了 a5 ,运行程序时 C+ 系统并不会报错; C+ 不会检查拜访数组是否越界,系统会把紧接着 a4后面的储备单元中的值取出来当作a5 ,程序能够使用这个值连续运行,并得出结果,尽管这个结果是错误的;如图 6.4 所示;图 6.4 当使用数组中并没有的元素 a5 时,其取值情形(4)对于分布有规律、能用表达式表示元素的数组,常常采纳循细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学习好资料 欢迎下载环结构来给数组元素进行初始化,先声明一个数组, 然后在循环中使用赋值语句逐个初始化数组元素;例如:int a5; fori = 0; i < 5; i+ ai = i + 1; 通过循环,数组下标 i 从 0 逐个递增到 4 由于当 i=5 时,条件i<5 为假,不能进入循环体 ;【例 6-1 】随机产生 10 个 100 以内的整数,并找出其中的最大数;源程序如下:/ 随机产生 10 个 100 以内的整数,并找出其中的最大数; #include <stdio.h> #include <time.h> void main int i, max, a10; 声明数组a 有 10 个元素int N = 100; srandtime0; 循环变量 i 的取值从 0 到 9,与数组 a 的下标值相同fori = 0; i < 10; i+ ai = rand % N +1; 每循环一次,数组a 采纳循环, 产生 10 个 100以内的随机整数,为数组的下标值都会变化printf"a%d=%d n", i, ai; 赋值,并输出这10 个数 max = a0; fori = 1; i < 10; i+ 从 a1 到 a9 逐个与 max 比ifai > max max = ai; 较,较大者就赋值给 max,使 printf" 最大值 max = %d n" , max ; max总是元素值中的最大数; 三总结强调重要的学问点 娴熟把握数组的赋值与运算细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -学习好资料 欢迎下载四课后作业更 新 、 补 充 、 删节内容无教学反思1、2、授课老师:张思民细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 7 页 - - - - - - - - -