您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《C语言程序设计》教案6-1
第1页共7页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、随机函数随机函数是数学库函数中描述随机数的一个常用函数。随机数是一种随机产生、事先无法预测的数值。在设计程序时,有时候会需要用到随机数。C++在系统头文件cstdlib中内建了一个随机数产生器――随机函数rand(),这是用来产生随机数的函数。随机函数rand()可以产生0~32767之间的一个伪随机整数。之所以用“伪”字来形容它,是因为产生的随机数依赖于一个特殊的输入值,这个输入值称为“种子”。有两个用于产生随机数种子的函数:和time()。srand()函数在第2页共7页系统头文件cstdlib中定义,由于头文件cstdlib是系统默认的,因此可以省略。time()函数在系统头文件ctime中定义,time()函数的返回值实际上是以秒为计数单位的计算机内部时钟的当前时间。由于每次执行的时候,时间的数值都不相同,因此产生的随机数不会重复。如果事先没有调用srand()和time()这两个函数,将产生同一序列的随机数。2、产生随机数为了在运行程序时,每次都获得不同的随机数,需要rand()、srand()和time()三个函数结合起来使用。例如:srand(time(0));intn=rand();则每次产生的随机数n都是不重复的。【补充例1】产生三个每次运行都各不相同的随机数。源程序如下:1#includestdio.h2#includestdlib.h3#includetime.h45voidmain()6{7inta,b,c;8srand(time(0));9a=rand();10b=rand();11c=rand();12printf(a=%d\t,a);13printf(b=%d\t,b);14printf(c=%d\n,c);15}在本程序中,使用了产生种子的语句,每次运行程序所得到的三个随机数都不是重复的。例如,第一次运行程序所得到的三个随机数为:a=26921b=28173c=574再运行一次程序,其运行结果为:a=27087b=19285c=26911在程序中,若没有产生种子的语句“srand(time(0));”,则每次运行程序所得到的三个随机数都会重复。例如,第一次运行程序所得到的三个随机数为:a=41b=18467c=6334再运行一次程序,其运行结果仍是:rand()和srand()需要用到此头文件time()需要用到此头文件用于产生每次运行程序获得不重复的随机数的种子产生三个随机数,若没有种子,每次会产生重复的数没有种子,产生的随机数是重复的有种子,产生的随机数不重复第3页共7页a=41b=18467c=6334实际编程中,经常需要产生在一个指定的范围内的随机数。为了控制随机数在一个指定的范围内产生,需要用到取模运算符“%”。例如要获得一个0~N-1之间的随机整数,可以使用“rand()%N”来产生。【补充例2】产生三个100以内的随机数。源程序如下:1#includestdio.h2#includestdlib.h3#includetime.h45voidmain()6{7inta,b,c;8intN=100;9srand(time(0));10a=rand()%N+1;11b=rand()%N+1;12c=rand()%N+1;13printf(a=%d\t,a);14printf(b=%d\t,b);15printf(c=%d\n,c);16}程序运行结果为:a=76b=94c=56.1.1一维数组数组是具有相同类型变量的集合。在数组中,各个变量称之为元素。其中,同一数组中的所有元素都有相同的名字,只是下标不同。只有一个下标的数组称之为一维数组,有多个下标的数组称之为多维数组。1.一维数组的定义一维数组定义的一般形式为:说明:(1)数据类型表示数组元素的类型。(2)数组名的命名规则跟变量名一样。(3)方括号中的常量表达式是数组的容量,即包含元素的个数据类型数组名[常量表达式];由于产生随机数的范围是0~99,故需要再加1rand()和srand()需要用到此头文件time()需要用到此头文件第4页共7页数。例如:定义数组inta[10];表示定义了一个整型的数组a,含有10个元素(每个元素都是整型)。其说明如图6.1所示。图6.1数组定义的说明数组一旦定义,各数组元素名就确定了。数组元素的一般形式为:数组的第一个元素的下标总是从0开始的。对于上面所定义的数组a[10],其元素依次为a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。其实,数组名代表的是数组的首地址,下标则是数组元素到数组开始的偏移量。系统为数组在内存分配的是一片连续的存储的单元,如定义了“inta[10];”,则它的10个元素在内存中的排列情况如图6.2所示:图6.2一维数组元素在内存中的排列情况2.一维数组的初始化数组初始化是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。数组初始化赋值的一般形式为:其中在{}中的各数据值依次为各元素的初值,各值之间用逗号间隔。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};相当于a[0]=0;a[1]=1;...;a[9]=9;数组初始化赋值的几点说明:(1)可以只给部分元素赋初值。当{}中数据值的个数少于元素个数组名[下标]数据类型数组名[常量表达式]={值,值,……,值};第5页共7页数时,只给前面部分元素赋值。例如:inta[10]={0,1,2,3,4};表示只给a[0]~a[4]这5个元素赋值,而后5个元素将被编译器自动赋0值。如图6.3所示。图6.3未赋值的元素自动被0填充(2)只能给元素逐个赋值,不能给数组整体赋值。例如:给十个元素全部赋1值,只能写为:inta[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:inta[10]=1;(3)如在定义数组时给全部元素赋初值,则在数组定义的说明中,可以不显式的指出数组容量,系统会以给出的数值个数默认为数组容量。例如:inta[5]={1,2,3,4,5};可写为:inta[]={1,2,3,4,5};注意,C++数组元素以0开头而不是以1开头,经常会有初学者搞错。例如,声明了数组inta[5];这表示数组a[]有5个元素:a[0]、a[1]、a[2]、a[3]、a[4]。这个数组中没有a[5]这个元素。需要指出的是,这时如果在程序中使用了a[5],运行程序时C++系统并不会报错。C++不会检查访问数组是否越界,系统会把紧接着a[4]后面的存储单元中的值取出来当作a[5],程序能够使用这个值继续运行,并得出结果,尽管这个结果是错误的。如图6.4所示。图6.4当使用数组中并没有的元素a[5]时,其取值情况第6页共7页(4)对于分布有规律、能用表达式表示元素的数组,经常采用循环结构来给数组元素进行初始化,先声明一个数组,然后在循环中使用赋值语句逐个初始化数组元素。例如:inta[5];for(i=0;i5;i++){a[i]=i+1;}通过循环,数组下标i从0逐个递增到4(因为当i=5时,条件i5为假,不能进入循环体)。【例6-1】随机产生10个100以内的整数,并找出其中的最大数。源程序如下://随机产生10个100以内的整数,并找出其中的最大数。#includestdio.h#includetime.hvoidmain(){inti,max,a[10];intN=100;srand(time(0));for(i=0;i10;i++){a[i]=rand()%N+1;printf(a[%d]=%d\n,i,a[i]);}max=a[0];for(i=1;i10;i++)if(a[i]max)max=a[i];printf(最大值max=%d\n,max);}三.总结强调重要的知识点采用循环,产生10个100以内的随机整数,为数组赋值,并输出这10个数声明数组a[]有10个元素从a[1]到a[9]逐个与max比较,较大者就赋值给max,使max总是元素值中的最大数。循环变量i的取值从0到9,与数组a[]的下标值相同每循环一次,数组a[]的下标值都会变化第7页共7页熟练掌握数组的赋值与运算四.课后作业更新、补充、删节内容无教学反思1、2、授课教师:张思民
本文标题:《C语言程序设计》教案6-1
链接地址:https://www.777doc.com/doc-2864731 .html