




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章算法,学习要求:,理解算法的概念和分类掌握算法的特性熟悉算法的表示理解用计算机求解问题的一般过程,2.1算法的概念,1、著名的计算机科学家沃思提出:数据结构+算法=程序其中:数据结构是对操作对象的描述,在程序中表现为数据类型算法是对操作的描述,在程序中表现为程序代码2、算法的定义为解决一个具体问题而采取的方法和步骤的描述即为“算法”,3、算法的分类数值运算算法:目的是求数值解,研究比较深入,一般有现成的模型供直接使用非数值运算算法:常见的应用是在事务管理领域,只有典型的算法有较深入的研究,例2.1求1+2+3+4+5所得的数值。,算法1,步骤1:先求1+2得到结果3;步骤2:将步骤1得到的结果3再加3,得到结果6;步骤3:将6再加4,得到结果10;步骤4:将10再加5,得到结果15,这就是最终的结果,输出。,算法2,步骤1:m1步骤2:i2步骤3:将m+i的值存放在m中,可简单表示为m=m+i步骤4:将i的值加1,可表示为i=i1步骤5:判断i是否大于5,如果不大于5返回重新执行步骤3、4、5;否则输出m,算法结束,最后m中保存的值就是1到5的和。,2.2利用计算机求解问题的一般过程,利用计算机求解问题过程大致分为以下几个阶段:通过问题分析建立数学模型阶段、数据结构设计阶段、算法设计阶段、编写和调试程序阶段,设计一个算法时应具备以下五个特性:,(1)有穷性(2)确定性(3)有零个或多个输入(4)有一个或多个输出(5)有效性,2.3算法的描述,常用的有自然语言、流程图、N-S图、伪代码、计算机语言等。,一、用自然语言描述算法,二、用流程图描述算法,流程图表示方法是用标准的图形符号描述算法的操作过程,直观形象,容易理解,也避免了人们对非形式化语言的理解差异。ANSI规定的常用流程图符号见P30表2-1。,为了提高算法质量,使算法的设计和阅读方便,需要规定流程只能顺序执行。1966年,Bohra和Jacopini提出了以下三种基本结构。,1顺序结构,2分支结构,3循环结构,循环结构是反复执行某一部分的操作,有两类循环结构:(1)当型循环如图2-3所示(2)直到型循环如图2-4所示。例2.2用流程图描述计算5!的过程。5!的流程图,如图2-5所示。,三、用N-S流程图描述算法,N-S流程图用以下基本图形表示:,例2.3用N-S描述计算5!的过程。5!的N-S图,如图2-6所示。,四、用伪代码描述算法,伪代码通常用介于自然语言和计算机语言之间的文字、数学公式和符号来描述算法,一般在算法设计过程未最终确定的时候表示。,五、用计算机语言描述算法,只有用计算机语言编写的程序才能被计算机执行。用计算机语言表示算法必须严格遵循所用语言的语法规则。,2.4算法举例,用C语言表示算法的一般过程:,文件包含(如:#include)voidmain()定义变量;提供已知数据;数据运算;输出结果;,#include#includevoidmain()floata,b,c,l,s;/定义变量printf(“请输入三角形的三边长:”);/提示输入三边边长doscanf(“%f,%f,%f”,/输出面积值,例2.6利用三角形的三条边长求三角形的面积。,2.5本章小结,算法的概念和分类算法的五大特性算法的表示,第3章C程序的控制结构,学习要求:,1.掌握关系运算符和逻辑运算符的使用2.掌握if语句和switch语句的语法及应用3.掌握while语句、dowhile语句和for语句的语法及应用4.掌握break,continue语句的应用5.熟悉循环语句的嵌套应用,分支结构又称选择结构,是结构化程序设计的三种基本结构之一。在程序设计时,如果需要根据某些条件作出判断,决定不同的处理方式,则要用到分支结构。分支结构能根据条件是否成立自动选择要执行的程序段。,3.1分支结构,3.1.1关系表达式和逻辑表达式,分支结构程序设计的关键是对选择条件的判断,选择条件的描述主要采用关系表达式和逻辑表达式。,一关系运算符与关系表达式,1.关系运算符(见表3-1):,表3-1关系运算符及其功能,2.关系表达式:适用于对两个对象的简单比较,4.关系表达式取值:逻辑值(非“真”即“假”)关系成立为“真”,关系不成立为“假”。在C语言中,规定用数值1代表“真”,用数值0代表“假”。例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值=0。(2)(num1num2)!=num3的值=1。(3)num1num2y)max=x;elsemax=y;,形式三(多分支选择):格式:,if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3.else语句n,执行过程:,例:if(xy)”错误地添加分号,写成“if(xy);”,这会导致程序错误。(2)在if语句中,条件判断表达式必须用括号括起来。(3)if后的表达式一般为关系表达式或逻辑表达式,但也可以是其他表达式,用0和非0取其逻辑值。(4)if和else嵌套可组成多分支选择结构,但要注意if和else的配对关系,其原则是:else总是和上面最近的未曾配对的if配对。,经验交流,【案例3.2】输入三个数a,b,c,要求按由小到大的顺序输出。,【目的】掌握少量数据的简单排序算法及交换算法,【算法分析】(1)将三个数分别存入a,b,c变量中(2)if(ab)将a和b对换(a是a,b中的较小者)(3)if(ac)将a和c对换(a是a,c中的较小者,因此a是三个数中的最小者)(4)if(bc)将b和c对换(b是b,c中的较小者,也是三个数中的次小者)(5)顺序输出a,b,c中的值,【程序祥解】/*ex3-2.c三个数排序*/#includevoidmain()inta,b,c,t;printf(请输入三个整数:);scanf(%d%d%d,【思考】4个数/5个数的排序如何实现?,【案例3.3】计算以下分段函数的值。,【目的】掌握ifelse构造多分支选择结构的算法,【程序祥解】/*ex3-3.c求解分段函数*/#includevoidmain()floatx,y;printf(请输入x:);scanf(%f,【思考】程序中虚线部分有没有其他的写法?,3.1.3条件表达式,条件运算符由“?”和“:”组成,是一个三目运算符,即有三个参与运算的量。条件表达式的一般形式为:表达式1?表达式2:表达式3条件表达式的求值规则为:先计算表达式1的值,若为真,则计算表达式2的值并将其作为条件表达式的值,否则计算表达式3的值并将其作为条件表达式的值。,【案例3.4】输入一个字符,判断它是否是大写字母,如果是,将它转换成小字母,如果不是则不转换,然后输出最后得到的字符。,【程序详解】/*ex3-4.c大、小写字母的转换*/#includevoidmain()charch;printf(请输入一个字符:);scanf(%c,经验交流,【目的】掌握英文字母大小写的转换方法,并练习条件运算符的使用,【思考】如果输入是的小写字母,要求转换为对应的大写字母,如何实现?,3.1.4switch语句,C语言提供了一种用于多分支结构的选择语句switch语句,其一般形式为:switch()case:语句序列1;case:语句序列2;case:语句序列n;default:语句序列n+1;,其语法规则是:见书P42最后一段话,【案例3.5】根据考试成绩的等级输出相应的百分制分数段,用switch语句实现的程序段如下:,【任务要求】掌握switch语句的使用方法。,【程序详解】/*ex3-5.c根据等级输出分数段*/#includevoidmain()chargrade;printf(“请输入成绩等级:);scanf(%c,【思考】如果输入的是百分制成绩,如何用switch语句实现输出其对应的等级?,【归纳总结】,(1)switch后的计算结果必须为整型或字符型,case后的必须是整型常量或字符型常量。(2)每个case后的常量表达式的值必须互不相等,否则就会出现互相矛盾的现象。(3)在case后,允许有多个语句,可以不用括起来;(4)default子句可以省略不用。(5)多条case语句可以共用一组执行语句。,3.2循环结构,在解决实际问题时,常常遇到许多有规律的重复执行的操作过程,利用计算机运算速度快的特点,可以将这些过程写成循环结构,使计算机反复执行这些操作。所谓循环就是在给定条件成立时反复执行某一程序段的现象,被反复执行的程序段称为循环体。C语言提供三类语句来实现循环:while语句、dowhile语句和for语句。,3.2.1while语句,while语句的语法形式为:while()循环体;,其算法描述如图3-9所示:,图3-9while语句的算法描述,【案例3.6】求1+2+3+100的值。,#includevoidmain()inti,sum=0;i=1;while(i0)x+;(3)在进入循环之前,应当对有关变量初始化。,3.2.1dowhile语句,dowhile语句的语法形式为:do循环体;while();其算法描述如图3-12所示。,图3-12do-while语句执行流程图,【案例3.7】统计从键盘输入一行字符的个数(以回车键作为输入结束标记)。,【程序详解】/*ex3-7.c统计字符个数*/#includevoidmain()charch;intnum=0;/字符计数器doch=getchar();/一次接收一个字符num+;/每接收一个字符,字符计数变量加1while(ch!=n);/回车为输入结束符printf(您输入了%d个字符n,num-1);/输出计数结果,【思考】用while语句改写该程序,或用dowhile改写1+2+100如何实现?,【归纳总结】,(1)while语句先判断条件后执行循环体语句,有可能一次也不执行循环体;而dowhile语句先执行循环体,后判断循环条件,至少会执行一次循环体。(2)注意在do-while循环中,while();这里的分号必须有,否则有语法错误。(3)while和dowhile语句在第一次循环条件就为真的情况下,可以相互改写而结果不变。,3.2.3for语句,在C语言中,for语句使用灵活,功能强大,是使用最多的一类循环控制语句,其语法形式为:for(表达式1;表达式2;表达式3)循环体;for循环的执行过程如下:(1)求解表达式1。(2)求解表达式2,若其值为真,则执行循环体内的语句,转第3步;若其值为假,则结束循环。(3)求解表达式3,转第2步。(4)循环结束,执行for循环外的下一条语句。,for循环的算法描述如图3-15所示。,图3-15for循环的算法描述,【案例3.8】如果能将一张厚度为0.05mm的报纸对折,再对折,再对折对折50次后,报纸的厚度是多少?,【程序详解】/*ex3-8.c报纸的对折问题*/#includestdio.hvoidmain()doublea=0.0005;/a表示纸的厚度,初始为0.0005米inti;for(i=1;i=50;i+)/对折50次a=a*2;/每对折一次厚度是原来的2倍printf(这张纸对折50次后厚度为%.2f米n,a);/保留两位小数输出,【案例3.9】求具有,性质的四位数。,程序的算法描述如图3-17所示。,【归纳总结】,for循环中的“表达式1”、“表达式2”和“表达式3”都是可选项,即可以缺省,但“;”不能缺省。(1)“表达式1”一般用于为进入for循环的有关变量赋初值,可以是赋值表达式、逗号表达式等。(2)“表达式2”是循环执行条件,每次执行循环体语句前,都要判断条件是否成立,只要其值非0就执行循环体。(3)在循环体语句执行后,立即执行“表达式3”,“表达式3”一般用于改变有关变量的值,特别是常用于改变与循环条件有关的变量值。,for循环语句可以转换成while循环语句,以下for语句和while语句等价,for(i=1;i=100;i+)sum=sum+i;,i=1;while(i=100)sum=sum+i;i+;,经验交流,i=1;dosum=sum+i;while(i=100);,3.2.4break语句和continue语句,1break语句break语句只能用在switch语句和循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的语句。,break、continue的流程图,【案例3.10】把316表示为两数之和,其中一个是13的倍数,另一个是11的倍数,【程序详解】/*ex3-10.c316分解问题算法*/#includemain()intm;for(m=1;+m)if(316-13*m)%11=0)break;/跳出本层循环printf(316=%d+%dn,13*m,316-13*m);,【案例3.11】输入一个自然数,判断该数是否为素数,如果是素数,输出“YES”,否则输出“NO”。,【程序详解】/*ex3-11.c判断素数*/#include#includemain()intn,i,flag=1;printf(“请输入任意一个整数:”);scanf(“%d”,思考:输出100400间的素数?【例3.13】,【归纳总结】使用break语句在一些场合下使编程更加灵活、方便.,2.continue语句continue语句可以结束本层本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断。,与break区别:continue语句只结束本层本次的循环,并不跳出循环。,【案例3.12】输出100以内能被9整除的数,按照每行5个数的格式输出。,/*ex3-12.c【穷举法】*/#includemain()intn,count=0;for(n=9;n=100;n+)if(n%9!=0)continue;printf(“%dt”,n);count+;if(count%5=0)printf(“n”);printf(“n”);,3.2.5循环的嵌套,循环的嵌套也称多重循环,即在一个循环语句的循环体中,可以嵌套另一个循环语句。执行顺序是:外循环执行一次,内循环执行一遍。,三种循环都可以互相嵌套:1、whilewhile2、do-while-dowhilewhile()dowhile()do.while();while();,3、forfor4、forwhilefor(;)for(;)for(;)while()5、whiledo-while6、do-whileforwhile()dodofor(;)while();while();,举例书p55【例3.13】,ppt45,例:打印如右图图形。,*,main()inti,j,k;for(i=1;i=3;i+)for(j=1;j=3-i;j+)print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泸州市重点中学2026届高三化学第一学期期末达标检测试题含解析
- 情景交际公开课课件
- 人教版 2024 版历史八年级上册第二单元《早期现代化的初步探索和民族危机加剧》测试卷(附答案)
- 学校常态化疫情防控方案
- 恒丰银行反洗钱培训课件
- 小学语文第一单元的复习方案
- 2026届安徽省滁州西城区中学高一化学第一学期期末经典试题含解析
- 宣化叉车实操考试试题及答案
- 新安化工考试试题及答案
- 无领导面试题及答案
- 北师大版八年级数学下册全册教学课件
- 黄田坝泥石流工程地质勘查报告
- 惠州2024年广东惠州城市职业学院第一批合同制教职工招聘37人笔试上岸历年典型考题与考点剖析附带答案详解
- 学习强安应急第一响应人理论考试答案
- 情绪管理游戏方案
- 消防主题毕业答辩
- 重庆第二外国语学校数学新初一分班试卷含答案
- 06黄伯荣、廖序东《现代汉语》增订6版课件-第2章-语音-第七、八、九节
- 孕产妇营养指导与咨询制度
- 70周岁换证三力测试题,老人反应能力驾考模拟测试题
- 美容注射操作规范培训课件
评论
0/150
提交评论