第5章第一讲-一维数组及冒泡排序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章数组5.1数组5.1.1一维数组1、数组概念的引入(必要性)如用以解决从键盘输入任意100个数,输出这些的半值这样的问题。概念:数组由若干个类型相同的元素组成,每个元素就是一个变量,每个数组都有一个名称,称为数组名。第5章数组2、一维数组的定义一维数组是指数组元素只有一个下标的数组。定义一维数组的一般格式如:类型名数组名[整型常量表达式],…如:inta[5];该语句(1)定义了一个名为a的一维数组。(2)方括号中的5规定该数组最多容纳5个元素。(3)类型名int规定了这5个元素均为整型变量。(4)C语言规定数组第一个元素的下标(数组下标的下界)为0;因此最后一个元素的下标(数组下标的上界)为数组元素个数减1a[0]a[1]a[2]a[3]a[4]第5章数组3、一维数组元素的使用数组定义后,就可以在程序中使用数组元素。格式如下:数组名[下标表达式]如:inta[10];a[0]=0;a[1]=1;a[2]=a[0]+a[1];第5章数组使用数组元素应注意:(1)系统在内存中为数组分配一块连续的存储单元,最低的地址对应于第一个数组元素,最高的地址对应于最后一个数组元素。每个数组元素等同于一个变量。(2)C语言中,不能对一个数组整体赋值。如:inta[10],b[10],k;for(k=0;k10;k++)b=a;/*error*/for(k=0;k10;k++)b[k]=a[k];对数组元素输入值,并倒序输出voidmain(){inta[10],k;for(k=0;k10;k++)scanf(“%d”,&a[k]);for(k=9;k=0;k--)printf(“=”,a[k]);printf(“\n”);}第5章数组(3)在使用数组元素时,数组元素中的下标表达式的值必须是整型。下标表达式值的下限为0,值的上限为该数组元素的个数减1。使用数组时注意其下标不要越界。如果下标越界,程序无法得到正确的结果。第5章数组4、数组元素的初始化(1)定义数组时不对数组元素赋初值。a、动态数组未加说明定义的数组均为动态数组,定义动态数组时不对元素赋初值,则数组元素的值为不确定值。第5章数组B、静态数组定义时加static说明。定义数组时不对元素赋初值,则所有元素初值为0。如:staticintb[10];这样,数组b中各元素(b[0]~b[9])值均为0。第5章数组2)定义数组时对元素赋初值。一般形式为:[static]类型名数组名[整型常量表达式]={常量1,常量2,…}例:inta[10]={1,2,3,4,5,6,7,8,9,10};该语句定义了一个动态数组,并对该动态数组进行了初始化。注意:1、所赋初值的类型必须与说明的类型一致。2、在指定初值时,第一个值赋给下标为0的元素。3、不可能跳过前面的元素给后面的元素赋初值。第5章数组注意:1、如果初值的数据个数比数组元素少,则系统自动给后面的元素补赋初值0。2、如果初值的数据个数比数组元素多,则在编译时提示出错信息:toomanyinitializers.3、初始化时不指定数组长度。C语言中,可以在初始化时,不指定数组长度的个数。例:inta[]={1,2,3,4,5};这里,花括号里列出了5个初始化数据,它隐含地定义了该数组共有5个元素。等价于:inta[5]={1,2,3,4,5};6、一维数组应用举例。例5.6在一个无序且不重复的数据中查找一个数,有则显示所在位置,无则显示“NotExist!”#includestdio.hvoidmain(){inta[15]={21,13,52,0,-25,6,18,1,36,2,-20,17,9,33,8};inti,x,f_at,flag=0;/*flag用于做是否找到的标记*/printf(Inputanumbertobesearched:);scanf(%d,&x);for(i=0;i15;i++)if(a[i]==x){flag=1;f_at=i;break;}if(flag==1)printf(Misfound,it'satM.\n,x,f_at);elseprintf(NotExist!);}例子5.7折半查找:在一个升序且不重复的数据中查找一个数,有则显示所在位置,无则显示“NotExist!”voidmain(){inta[10]={7,9,12,18,21,25,33,39,45,60};intx,left=0,mid,right=9,flag=0;/*flag用于做是否找到的标记*/printf(Inputanumbertobesearched:);scanf(%d,&x);if(x=a[left]&&x=a[right])while(!flag&&left=right){mid=(left+right)/2;if(a[mid]==x)flag=1;elseif(xa[mid])left=mid+1;elseright=mid-1;}if(flag==1)printf(Misfound,it'satM.\n,x,mid);elseprintf(NotExist!);}第5章数组6、一维数组应用举例3。经典算法介绍:排序问题是程序设计中的典型问题之一,所谓排序就是将数组中的各元素的值按从小到大的顺序或按从大到小的顺序重新排列。排序过程一般都要进行元素值的比较和元素值的交换。分析:冒泡排序法的基本思想是:假设有N个数据放在数组a中,现要把这N个数从小到大排序.第一:在a[0]到a[N-1]的范围内,依次比较两个相邻元素的值,若a[J]a[J+1],则交换a[J]与a[J+1],J的值取0,1,2,……,N-2;经过这样一趟冒泡,就把这N个数中最大的数放到a[N-1]中.第5章数组第二:再在a[0]到a[N-2]的范围内再进行一趟冒泡,又将该范围内的最大值换到了a[N-2]中.第三:依次进行下去,最多只要进行N-1趟冒泡,就可完成排序.例1:用冒泡排序法对8个整数{6,8,5,4,6,9,3,2}进行从小到大排序.第四:如果在某趟冒泡过程中没有交换相邻的值,则说明排序已完成,可以提前结束处理.第5章数组之冒泡法排序65468329?第二讲冒泡法排序与选择法排序冒泡法排序:现假设有8个随机数已经在数组中,开始排序初始状态:数组aa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]第一趟排序:两两相邻比较:一趟最后结果:6854693268546932?第二趟冒泡排序:此时的待排序元素a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]同样对待排序元素两两比较后结果为:这是第三趟冒泡的待排序元素再来第三趟冒泡排序:结果为:第5章数组之冒泡法排序654683295466328945632689第5章数组之冒泡法排序?同样第四趟结果为:?第五趟结果为:?第六趟结果为:?第七趟结果(最终)为:23456689453266893245668943256689冒泡法程序main(){inti,j,a[8],temp,swap;clrscr();for(i=0;i8;i++)scanf(%d,&a[i]);for(i=0;i8;i++)printf(%d,,a[i]);printf(\);}for(i=0;i8-1;i++){for(j=0;j8-i-1;j++)if(a[j]a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}注:对n个元素冒泡排序第i趟排序的待排序元素是a[0]到a[n-i]swap=0;swap=1;if(!swap)break;第5章数组之冒泡法排序?swap变量的作用如果在某趟冒泡过程中没有交换相邻的值,则说明排序已完成,可以提前结束处理.比如:为原始数列:8、15、27、96、32、65、78、79这个序列用冒泡法排序,一趟之后就得到升序结果,而之后的六趟都可以不要进行。所以,swap变量就是用来标识如果某趟排序之后已经得到最终结果,则多余的次数就无须进行。11醉翁亭记1.反复朗读并背诵课文,培养文言语感。2.结合注释疏通文义,了解文本内容,掌握文本写作思路。3.把握文章的艺术特色,理解虚词在文中的作用。4.体会作者的思想感情,理解作者的政治理想。一、导入新课范仲淹因参与改革被贬,于庆历六年写下《岳阳楼记》,寄托自己“先天下之忧而忧,后天下之乐而乐”的政治理想。实际上,这次改革,受到贬谪的除了范仲淹和滕子京之外,还有范仲淹改革的另一位支持者——北宋大文学家、史学家欧阳修。他于庆历五年被贬谪到滁州,也就是今天的安徽省滁州市。也是在此期间,欧阳修在滁州留下了不逊于《岳阳楼记》的千古名篇——《醉翁亭记》。接下来就让我们一起来学习这篇课文吧!【教学提示】结合前文教学,有利于学生把握本文写作背景,进而加深学生对作品含义的理解。二、教学新课目标导学一:认识作者,了解作品背景作者简介:欧阳修(1007—1072),字永叔,自号醉翁,晚年又号“六一居士”。吉州永丰(今属江西)人,因吉州原属庐陵郡,因此他又以“庐陵欧阳修”自居。谥号文忠,世称欧阳文忠公。北宋政治家、文学家、史学家,与韩愈、柳宗元、王安石、苏洵、苏轼、苏辙、曾巩合称“唐宋八大家”。后人又将其与韩愈、柳宗元和苏轼合称“千古文章四大家”。关于“醉翁”与“六一居士”:初谪滁山,自号醉翁。既老而衰且病,将退休于颍水之上,则又更号六一居士。客有问曰:“六一何谓也?”居士曰:“吾家藏书一万卷,集录三代以来金石遗文一千卷,有琴一张,有棋一局,而常置酒一壶。”客曰:“是为五一尔,奈何?”居士曰:“以吾一翁,老于此五物之间,岂不为六一乎?”写作背景:宋仁宗庆历五年(1045年),参知政事范仲淹等人遭谗离职,欧阳修上书替他们分辩,被贬到滁州做了两年知州。到任以后,他内心抑郁,但还能发挥“宽简而不扰”的作风,取得了某些政绩。《醉翁亭记》就是在这个时期写就的。目标导学二:朗读文章,通文顺字1.初读文章,结合工具书梳理文章字词。2.朗读文章,划分文章节奏,标出节奏划分有疑难的语句。节奏划分示例环滁/皆山也。其/西南诸峰,林壑/尤美,望之/蔚然而深秀者,琅琊也。山行/六七里,渐闻/水声潺潺,而泻出于/两峰之间者,酿泉也。峰回/路转,有亭/翼然临于泉上者,醉翁亭也。作亭者/谁?山之僧/曰/智仙也。名之者/谁?太守/自谓也。太守与客来饮/于此,饮少/辄醉,而/年又最高,故/自号曰/醉翁也。醉翁之意/不在酒,在乎/山水之间也。山水之乐,得之心/而寓之酒也。节奏划分思考“山行/六七里”为什么不能划分为“山/行六七里”?明确:“山行”意指“沿着山路走”,“山行”是个状中短语,不能将其割裂。“望之/蔚然而深秀者”为什么不能划分为“望之蔚然/而深秀者”?明确:“蔚然而深秀”是两个并列的词,不宜割裂,“望之”是总起词语,故应从其后断句。【教学提示】引导学生在反复朗读的过程中划分朗读节奏,在划分节奏的过程中感知文意。对于部分结构复杂的句子,教师可做适当的讲解引导。目标导学三:结合注释,翻译训练1.学生结合课下注释和工具书自行疏通文义,并画出不解之处。【教学提示】节奏划分与明确文意相辅相成,若能以节奏划分引导学生明确文意最好;若学生理解有限,亦可在解读文意后把握节奏划分。2.以四人小组为单位,组内互助解疑,并尝试用“直译”与“意译”两种方法译读文章。3.教师选择疑难句或值得翻译的句子,请学生用两种翻译方法进行翻译。翻译示例:若夫日出而林霏开,云归而岩穴暝,晦明变化者,山间之朝暮也。野芳发而幽香,佳木秀而繁阴,风霜高洁,水落而石出者,山间之四时也。直译法:那太阳一出来,树林里的雾气散开,云雾聚拢,山谷就显得昏暗了,朝则自暗而明,暮则自明而暗,或暗或明,变化不一,这是山间早晚的景色。野花开放,有一股清幽的香味,好的树木枝叶繁茂,形成浓郁的绿荫。天高气爽,霜色洁白,泉水浅了,石底露出水面,这是山中四季的景色。意译法:太阳升起,山林里雾气开始消散,烟云聚拢,山谷又开始显得昏暗,清晨自暗而明,薄暮又自明而暗,如此

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功