您好,欢迎访问三七文档
学科:计算机科学与技术课程:C语言程序设计课题:一维数组授课对象:软件技术专业大一学生授课时数:45分钟教学目标:1、掌握一维数组的定义和引用2、掌握一维数组的初始化方法3、了解与一维数组有关的应用编程方法教学重点:一维数组的定义和引用、初始化方法教学难点:与一维数组有关的应用编程方法教学方法:理论讲授和示例训练相结合教学步骤:1、通过一个例子提出问题来引出本节课的知识点2、讲授一维数组的定义和引用、初始化方法3、示例训练4、进行本节课的总结及作业布置教具:黑板、粉笔使用教材:《C语言程序设计》李泽中,孙红艳主编清华大学出版社2008年6月第一版教学过程:一、导入:(3分钟)提问:保存一个班50位同学的一门功课的成绩,找出最高分和最低分,应如何实现?解题思路:定义50个变量,从键盘中输入值,然后再相互比较。处理起来很复杂,是否有更简便的方法?引出本节课的知识点-----数组。二、讲授:1、数组概述:(3分钟)·数组:是数目固定,类型相同的若干个变量的有序集合,用数组名标识。序:是数组元素之间的位置关系,不是元素值的大小顺序。数组名:是用于区别其它数组及变量的。·数组元素:集合中的变量,属同一数据类型,用数组名和下标确定。下标:是数组元素在数组中的位置。·数组的维数:数组名后所跟下标的个数。2、一维数组的定义(9分钟)一维数组是指由一个下标数组元素组成的数组。其定义形式为:存储类型数据类型数组名[常量表达式]例如:staticintscore[50];它表示定义了一个名为score的数组,该数组有50个元素,其存储类型为静态型,数据类型为整型。说明:(1)存储类型为任选项,可以是auto、static、extern存储类型,但是没有register型。详情请参见第7.3节。(2)数据类型是用来说明数组元素的类型:int,char,float。(3)数组名的命名应遵守标识符的命名规则,但是不能与其他变量同名。(4)数组名后是用方括号[]括起来的常量表达式。常量表达式表示的是数组元素的个数,即数组的长度。在上例中定义了数组score[50],第一个元素为score[0],最后一个为score[49]。(5)常量表达式中可以包括常量和符号常量,不能包含变量,因为C语言规定不允许对数组的大小作动态定义。(6)允许在同一个类型说明中,说明多个数组和多个变量,彼此间以逗号相隔。例如:inta,b,k1[10],k2[20];//定义了两个一维数组、两个整型变量判断下面的定义是否合法:intb,b[5];//不合法,数组名不能与变量名同名#definesize10intb[size];//合法,size已经在宏定义中说明,在程序中作为符号常量inta(6);//不合法,数组名后不能使用(),只能用[]intn=5;inta[n];//不合法,不能用变量定义数组元素的个数inta[n+2];//不合法,不能用变量表达式定义数组元素的个数一维数组的存储结构:C语言在编译时给数组分配一段连续的内存空间。内存字节数=数组元素个数*sizeof(元素数据类型)数组元素按下标递增的次序连续存放。数组名是数组所占内存区域的首地址,即数组第一个元素存放的地址。例inta[5];假设首地址是2000a[0]a[1]a[2]a[3]a[4]内存地址20002002200420062008占用字节数为:5*sizeof(int)=5*2=103、一维数组元素的引用(6分钟)数组元素是组成数组的基本单元。数组元素用数组名和下标确定。下标表示了元素在数组中的顺序号,C语言规定:数组必须先定义,后使用。一维数组的引用形式为:数组名[下标]其中下标可以是整型常量、整型变量或整型表达式。例如有定义:intt,a[10],i=2;则以下都是正确的表达式:t=a[6];a[0]=a[i]+a[i+1];引用说明:(1)必须像使用变量那样,先定义,再使用,如以下操作是错误的:intx=a[2];inta[10];(2)下标的最小值为0,最大值是数组大小减1。在前例中定义了数组score[50],使用的时候不能使用score[50],否则产生数组越界。C语言对数组不作越界检查,使用时要注意!(3)在C语言中只能对数组元素进行操作,不能一次对整个数组进行操作。例如要输出有10个元素的数组,则必须使用循环语句逐个输出各下标变量:for(i=0;i10;i++)printf(%d,a[i]);而不能用一个语句输出整个数组。下面的写法是错误的:printf(%d,a);例:输出5个学生的成绩#includestdio.hvoidmain(){inti,score[5]={82,79,65,91,86};for(i=0;i5;i++)printf(%d,score[i]);}4、一维数组的初始化(9分钟)数组的初始化就是给数组元素赋初始值。主要有两种方法:1.数组定义时初始化:就是在定义数组时给数组元素赋初值。其初始化的一般格式为:数据类型数组名[数组元素个数]={值1,值2,…,值n};(1)对数组全部元素赋初值例如inta[5]={2,4,6,8,10};其作用是在定义数组的同时将常量2、4、6、8、10分别置于数组元素a[0]、a[1]、a[2]、a[3]、a[4]中。(2)对数组部分元素赋初值,其它数组元素自动赋以0值例如:inta[4]={1,2};执行后各元素的初值为a[0]=1,a[1]=2,a[2]=0,a[3]=0(3)全部元素均初始化为0,可写成:inta[10]={0,0,0,0,0,0,0,0,0,0};或inta[10]={0};不能写成inta[10]={0*10};说明:(1)数组元素的值可以是数值型、字符常量或字符串。(2)数组元素的初值必须依次放在一对大括号{}内,各值之间用逗号隔开。(3)在进行数组的初始化时,{}中值的个数不能超过数组元素的个数。例如:inta[5]={1,2,3,4,5,6};是一种错误的数组初始化方式,所赋初值多于定义数组的元素个数。(4)在给数组所有元素赋初值时,可以不指定数组长度。例如:inta[]={1,2,3,4,5};则系统会自动定义数组a的长度为5。在定义时赋初值是一种简单而行之有效的方法,它适用于长度较小的数组或对长度较大的数组部分元素赋值,而且可对每个数组元素赋不同的值。2.在程序中初始化:主要使用循环语句进行逐一赋值例如:inti,score[50];for(i=0;i50;i++)score[i]=0;这种方法是在编程中普遍使用的一种方法,它适用于对某数组元素进行有规律的赋值或接受用户通过键盘输入对数组元素的赋值。三、举例:(10分钟)1.以引例为例,从键盘输入10个学生一门课的成绩,找出最高分和最低分并输出。步骤:(1)输入:用for循环输入10个学生的成绩(2)处理:(a)先令max=min=score[0](b)依次用score[i]和max,min比较(循环)若maxscore[i],令max=score[i]若minscore[i],令min=score[i](3)输出:max和min程序如下:#includestdio.hvoidmain(){inti;floatscore[10],max,min;printf(Enter10scores:\n);for(i=0;i10;i++)//输入10个浮点型的学生的成绩scanf(%f,&score[i]);max=min=score[0];for(i=1;i10;i++)//循环比较,找出最高分和最低分{if(maxscore[i])max=score[i];if(minscore[i])min=score[i];}printf(Maxscoreis%f\n,max);//输出最高分printf(Minscoreis%f\n,min);//输出最低分}2.以引例为例,从键盘输入10个学生一门课的成绩,用冒泡法从低到高排序并输出。分析:冒泡排序法的基本思想是将相邻两个数进行比较,将小的调到前面。排序过程:(1)比较第一个数与第二个数,若为逆序score[0]score[1],则交换;然后比较score[1]与score[2]比较;依次类推,直至score[8]与score[9]比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素score[9]位置上,此次共比较9次。(2)对前9个数进行第二趟冒泡排序,结果使次大的数被安置在倒数第二个元素score[8]位置,此次共比较8次。(3)重复上述过程,共经过9趟冒泡排序后,排序结束程序如下:#includestdio.hvoidmain(){inti,j;floatscore[10],t,max,min;printf(Enter10scores:\n);for(i=0;i10;i++)//输入10个浮点型学生的成绩scanf(%f,&score[i]);printf(\n);for(i=1;i10;i++)//趟数,共9趟{for(j=0;j10-i;j++)//实现一次冒泡操作if(score[j]score[j+1])//交换score[j]和score[j+1]{t=score[j];score[j]=score[j+1];score[j+1]=t;}}for(i=0;i10;i++)//输出排好序的成绩printf(%f,score[i]);printf(\n);}四、总结:(3分钟)这节课主要介绍了数组这一特殊的数据结构。数组的特点是大小必须是确定的,且数组中元素的类型必须相同。它的优点是表述简洁,可读性高,便于使用循环结构。一维数组的定义和使用:在使用时应遵循先定义、后使用的原则。不能整体引用,也不能越界使用数组元素,可以用循环结构很方便地访问数组元素。一维数组初始化的方法:定义时初始化的几种方式、在程序中用赋值语句初始化。五、作业要求:(2分钟)1.课后大家将课本上的例题和课后习题进行练习,以此提高对程序设计的更高程度的认识。2.输入50个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩。【问题分析】在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求学生的总分,进而求出平均分。但因为只有读入最后一个学生的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把50个学生的成绩都保留下来,然后逐个和平均分比较,把低于平均分的成绩打印出来。通过对数组的学习,我们就可以定义一个长度为50的数组score来保存这50个学生的成绩。然后用循环语句实现成绩的求和及比较。这样问题的程序可写为:tot:=0;{tot表示总分}fori:=0to49do{循环读入每一个学生的成绩,并累加它到总分}beginread(score[i]);tot:=tot+score[i];end;ave:=tot/50;{计算平均分}fori:=0to49doifa[i]avethenwriteln(‘No.’,i,’‘,score[i]);{如果第i个同学成绩小于平均分,则输出}源程序如下:#includestdio.hvoidmain(){inti,floattot,ave,score[50];tot=0.0;for(i=0;i50;i++)//循环读入每一个学生的成绩,并累加它到总分{scanf(%f,&score[i]);tot=tot+score[i];}ave=tot/50;//计算平均分for(i=0;i50;i++)//逐个和平均分比较,如果第i个同学成绩小于平均分,则输出{ifa[i]aveprintf(No:%dScore:%f\n,i,score[i]);}}
本文标题:C语言一维数组教案
链接地址:https://www.777doc.com/doc-4384494 .html