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