算法与程序设计基础.ppt
《算法与程序设计基础.ppt》由会员分享,可在线阅读,更多相关《算法与程序设计基础.ppt(133页珍藏版)》请在课桌文档上搜索。
1、1,第3章 算法与程序设计基础,3.1 算法3.2 算法的常用表示方法3.3 结构化程序设计方法3.4 C语句概述补充:顺序结构程序设计3.5 选择结构程序设计3.6 循环程序设计3.7 综合程序应用举例,目录,实验三,实验四,2,3.1 算法,3.1.1 算法的概念3.1.2 算法的特性,本章,3,3.1.1 算法的概念 当我们要编写一个程序的时候,我们总要首先想好程序是干什么的?应该如何实现这些目标?(应该先进行什么处理、后进行什么处理?)所处理的数据的格式是什么?遇到一些复杂的问题,我们可能还需要考虑采用什么数学方法。这一切都涉及一个专业名词“算法”。算法为解决一个实际问题而采取的方法和
2、步骤 很多时候,程序设计者所面临的问题就是寻找一个合适的算法。例如,一个熟练的程序员,要设计一个下“五子棋”的游戏程序,对他而言,C语言的编程规则已经清楚。他所面对的核心问题是寻找一种可以模拟人下棋的算法。因此,算法在软件设计中具有重要的地位。正如著名的计算机科学家沃思(Nikiklaus Wirth)所指出的如下公式:,程序=数据结构+算法,4,【例3.1】求1+2+3+4+100=?算法1 步骤1:1+2=3 步骤2:3+3=6 步骤3:6+4=10 步骤99:4950+100=5050算法2 步骤1:0+100=100 步骤2:1+99=100 步骤3:2+98=100 步骤50:49+
3、51=100 步骤51:100*50=5000 步骤52:5000+50=5050算法3 步骤1:k=1,s=0 步骤2:如果k100,则算法结束,s即为所求的和,输出s;否则转向步骤3 步骤3:s=s+k,k=k+1 步骤4:转向步骤2,本节,5,3.1.2 算法的特性 一个方法要成为我们可以在程序设计中所使用的算法,需要具备如下特征:1.有穷性 一个算法要在有限的步骤内解决问题(这里所说的步骤是指计算机执行步骤)。计算机程序不能无限地运行下去(甚至不能长时间地运行下去),所以一个无限执行的方法不能成为程序设计中的“算法”。例如,求某一自然数N的阶乘:n!=1*2*3*n 这是一个算法。因为
4、对任何一个自然数而言,无论这个数多大,总是有限的。用这个公式计算n!总是需要有限的步骤。但是,以下计算公式则不能作为算法,因为其计算步骤是无限的:sum=1+1/1+1/2+1/3+1/n+,6,2.确定性 算法中操作步骤的顺序和每一个步骤的内容都应当是确定的,不应当是含糊不清的。它也不能有不同的解释存在,即不能具有“二义性”,不应当产生两种或多种以上的含义。3.可行性 每一个算法是可行的,即算法中的每一个步骤都可以有效地执行,并得到确定的结果。(例如:b=0,执行a/b)4.有零个或多个输入 输入就是从外界取得必要的信息。一个算法可以有零个或多个输入,例如:输入一个年份,判断其是否是闰年。同
5、时一个算法可以没有输入,例如:计算出5!是多少。5.有一个或多个输出 算法的目的就求解,“解”就是我们想要得到的最终结果。输出是同输入有着某些特定关系的量。一个算法得到的最终结果就是输出。没有输出的算法是没有意义的。,本节,7,3.2 算法的常用表示方法,3.2.1 自然语言表示法3.2.2 流程图3.2.3 N-S结构流程图3.2.4 伪代码表示法3.2.5 用计算机语言表示算法,本章,8,3.2.1 自然语言表示法 自然语言是指人们在日常生活中使用的语言,如汉语、英语等。比如对于以下这句话:如果A大于B,就给它加1。在理解时就可能出现歧义,是给A加1?还是给B加1。对于以上的一段话,如果我
6、们用C语言进行编程则为:if(AB)A=A+1;对于某些程序员来说,自然语言通俗易懂。缺点是:很冗长,不直观,而且容易发生歧义。【例3.2】求m!如果m=6,即求123456。我们先设s代表累乘之积,以t代表乘数,自然语言表示m!的算法为:使s=1,t=1。使st,得到的积仍放在s中。使t的值加1。如果tm,返回第步重新执行。如果tm,则不再返回,而停止循环,此时s中的值就是m!,输出s。,本节,9,3.2.2 流程图 流程图表示法就是用各种图框表示各种操作。这种表示法的优点是直观易于理解。流程图表示法是美国国家标准化协会ANSI(Amreican National Standard Inst
7、itute)规定的。一些常用的流程图符号在Word中都可以通过“绘图”命令来绘制。结构化程序设计中采用三种基本结构,即顺序结构、选择结构和循环结构,这三种基本结构有以下共同特点:只有一个入口;只有一个出口;结构内的每一部分都有机会被执行到;结构内不存在“死循环”(无终止的循环)。,10,顺序结构 A和B两个框是顺序执行的。选择结构 选择结构或称分支结构,条件结构。此结构中必包含一个判断框,根据给定的条件P是否成立来进行选择。若P成立,则执行A框中的操作,否则,执行B框中的操作。循环结构 循环结构又称重复结构,有两种:当型循环、直到型循环。,11,用流程图表示例3.2:,本节,12,3.2.3
8、N-S结构流程图 1973年美国学者I.Nassi 和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法都是在一个矩形框内,在该框内还包含其它的从属于它的框。或者说由一些基本的框组成一个大框。这种方法就以这两位学者的名字缩写而成,被称为“N-S图”。N-S图可以表示的三种典型结构:,13,用N-S结构流程图表示例3.2:,本节,14,3.2.4 伪代码表示法伪代码是用介于自然语言和计算机语言之间的文字和符号来表示算法,即计算机程序设计语言中具有的语句关键字用英文表示,其他的可用汉字,也可用英文,只要便于书写和阅读就可。用伪代码表示算法并无固定
9、的、严格的语法规则,只要求把意思表达清楚,并且书写的格式清晰易懂即可。【例3.3】求m!,用伪代码表示的算法如下:开始 从键盘输入一个正整数给m 置s的初值为1 置t的初值为1 当t=m,执行下面操作:使s=st 使t=t+1(循环体到此结束)输出s的值 结束,本节,15,3.2.5 用计算机语言表示算法 用流程图或其他方法表示了算法,还要用计算机实现算法借助计算机语言编写程序,被计算机执行。用计算机解决一个问题,包括设计算法和实现算法两个部分。计算机语言描述算法必须严格遵循所用语言的语法规则。【例3.4】将求m!的算法用C语言表示。#include void main()int t,s,m;
10、printf(n Please input a integer to m:);scanf(%d,本节,16,3.3 结构化程序设计方法,要解决实际问题,编写程序的步骤是:从目前的编程实践看,结构化程序设计的思路已经被绝大多数程序员所接受。人们普遍认为,必须采用结构化的程序设计方法。因为结构化程序具有结构清晰、便于阅读、便于修改和便于维护的优点。结构化程序设计的基本思路是:把一个复杂的问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解的范围之内。,17,保证结构化程序采取的方法:自顶向下 逐步细化(求精)模块化设计 结构化编码 模块化:将一个大任务分成若干个较小的任务,较小的任务又
11、细分为更小的任务,直到只能解决功能单一的任务为止模块(由函数来实现)。例如,工资管理系统,18,【例3.5】输入10个整数(每个数都3),打印出其中的素数。,19,本章,20,3.4 C语句概述,一个C语言程序的执行部分由语句组成。程序的各种功能(如输入、输出、计算、打印等)也由语句实现的。C语言的语句可分为声明语句、函数调用语句、表达式语句、复合语句、控制语句以及不执行任何操作的空语句。声明语句 说明语句用来定义变量的数据类型。如:int s,i;函数调用语句 函数调用语句由函数名、实际参数加上分号组成。其一般形式为:函数名(实际参数表);执行函数语句就是调用函数体并把实际参数赋予函数定义中
12、的形式参数,然后执行被调函数体中的语句,可以返回也可以不返回函数值。它相当于其他语言中的调用子程序。例:printf(ns=%d,s);,21,表达式语句 表达式语句由表达式加上分号(;)组成。其一般形式为:表达式;如:a=b+c;y+;x*y;执行表达式语句就是计算表达式的值。注意:赋值语句和赋值表达式的区别。空语句 空语句就是什么也没有的语句,也就是只有分号的语句。空语句不执行任何操作,但仍然有一定的用途。比如,预留位置或用来作空循环体。例:while(getchar()!=n);这段程序的作用是:等待键盘输入,若输入非则继续等待重新输入,只有输入才结束。循环体只有一个空语句。如果没有这一
13、个空语句,则会出现错误。,22,复合语句 把多个语句用大括号“”括起来组成的一个语句称复合语句。C语言的编译系统把复合语句作为是单条语句对待。例:b=c+d;a=e-f;printf(%d%d,b,a);复合语句中的各条语句都以分号“;”结尾。注意,在大括号“”之后不要加分号。控制语句 控制语句用于控制程序的流程,以实现程序的顺序、分支、循环等各种结构方式。控制语句分为三类共九种:1.条件判断语句:if、switch语句 2.循环执行语句:dowhile、while和for语句 3.转向语句:break、goto、continue和return语句,本章,23,补充:顺序结构程序设计,顺序结构
14、的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三部曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s=3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如选择结构中的复合语句、循环结构中的循环体等。,24,【实验】以下的程序用于计算一个矩形的周长和面积。程序运行时提示输入长和宽的值,然后计算并输出该矩形的周长和面积。请将程序补充完整。#include void main()f
15、loat length;float width;float perimeter;/*周长*/float area;/*面积*/,25,【补充例1】从键盘输入一个大写字母,要求改用小写字母输出。#include void main()char c1,c2;c1=getchar();printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);运行情况:,AA,65a,97,26,【补充例2】输入三角形的三边长,求三角形面积。,假设:三边长a,b,c能构成三角形。已知面积公式:其中:s=(a+b+c)/2,27,#include#include void m
16、ain()float a,b,c,s,area;scanf(%f,%f,%f,本章,运行情况:,28,3.5 选择结构程序设计,3.5.1 关系运算符和关系表达式3.5.2 逻辑运算符和逻辑表达式3.5.3 if语句3.5.4 if语句的嵌套3.5.5 条件运算符和条件表达式3.5.6 switch语句3.5.7 选择结构程序设计举例,本章,29,3.5.1 关系运算符和关系表达式 C语言提供6种关系运算符:大于=大于或等于=等于!=不等于 用关系运算符将两个表达式连接起来的式子,称关系表达式。如:ab,a+bb+c,(a=3)(b=5),ab)(bb值为1(ab)=c值为1 d=abd的值为
17、1 f=abcf的值为0,本节,优先级相同(高),优先级相同(低),30,3.5.2 逻辑运算符和逻辑表达式 C语言提供3种逻辑运算符:!逻辑非&逻辑与|逻辑或,逻辑运算的真值表,31,算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级:如:(ab)&(xy)ab&xy(a=b)|(x=y)a=b|x=y(!a)|(ab)!a|ab 用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。逻辑表达式的值是一个逻辑“真”或“假”。C语言编译系统在给出逻辑运算结果时,以数值1代表“真”,以数值0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。例:若a=4,则!
18、a的值为0。若a=4,b=5,则a&b的值为1,a|b的值为1,!a|b的值为1。例:将数学关系式:0 x100,表达成逻辑式:x=0&x=100 逻辑运算符两侧的运算对象还可以是任何类型的数据。如:c&d,32,在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。如:a 逻辑表达式(m=ab)&(n=cd)使m=0,而n=1,33,例:要判断某一年是否是闰年。闰年的条件是符合下面二者之一:能被4整除,但不能被100整除;或能被400整除。C语言的表达式:(year%4=0&year%100!=0)|year%400=0,本节
19、,34,3.5.3 if语句 选择结构往往依赖于所给出的条件,决定从给出的操作中选择一组去执行。格式1:if(表达式)语句;功能:如果表达式的值为真,做语句的内容;否则什么都不做。,任何类型,35,【例3.7】输入一个字符c,若c是字母,则输出“Yes!”。#include void main()char c;c=getchar();if(c=a 运行情况:,x Yes!,思考题:完善【补充例1】。,36,例:#include void main()int s;printf(nInput your score:);/*输入提示信息*/scanf(%d,/*如果s=60,输出pass!*/运行结
20、果:,Input your score:70 your score=70,pass!,37,【补充例3】已知两个变量x和y,比较它们的大小,使得x中的值大于y。#include void main()int x,y,t;printf(x=);scanf(%d,x,y,两个数交换过程,思考题:从键盘输入3个整数a、b和c,编写程序将它们按从大到小排序。,38,【补充例】从键盘输入3个整数a、b和c,编写程序将它们按从大到小排序。#include void main()int a,b,c,temp;printf(Please input three numbers:);scanf(%d,%d,%d
21、,39,格式2:if(表达式)语句1;else 语句2;其意义为:若表达式的值为真,则执行“语句1”,否则执行“语句2”。若“语句1”或“语句2”为一条语句时,则可以去掉相应的。例:if(h1.1)price=0;else price=50;或:if(h1.1)price=0;else price=50;,任何类型,40,【例3.9】输入两个数并判断两数是否相等。#include void main()int a,b;printf(Enter integer a:);scanf(%d,Enter integer a:5 Enter integer b:7 a!=b,Enter integer
22、a:10 Enter integer b:10 a=b,运行结果:,41,【补充例4】判断一个年份是否是闰年,并把结果输出。#include void main()int year;printf(请输入一个年份:);scanf(%d,思考题:判断一个整数是奇数还是偶数,并把结果显示出来。,42,【补充例】判断一个数是奇数还是偶数,并把结果显示出来。#includevoid main()int x;printf(nPlease input a integer to x:);scanf(%d,43,【补充例5】从键盘输入3个整数a、b和c,编写程序找出其中的最大数,输出结果。#include vo
23、id main()int a,b,c,max;printf(Please input three numbers:);scanf(%d%d%d,44,【例3.10】输入一个整数,若该数不为零,则输出。#include void main()int x;scanf(%d,运行结果:,-5 x=-5,45,if语句中应注意的问题 分支语句的复杂性关键在于表达式,表达式通常是逻辑表达式或关系表达式,但是也可以是其它表达式,甚至也可以是一个变量。例如:if(a=8);if(x);只要表达式的值为非0,即为“真”,就执行其后的语句 在if语句中的表达式必须用括号括起来 如果要想在if语句中满足条件时执行
24、一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。注意复合语句的之后不能加分号,本节,46,3.5.4 if语句的嵌套 前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式如下:if(表达式1)if(表达式2)语句1;else 语句2;else if(表达式3)语句3;else 语句4;,47,【例3.11】编写程序,求下列分段函数的值。-1(x0)#include#include void main()float x;double z;printf(nx=);scanf(%f,if语句嵌套包含在else的后面,48,改写【例
25、3.11】,将if语句的嵌套包含在if的后面。#include#include void main()float x;double z;printf(nx=);scanf(%f,if语句嵌套包含在if的后面,49,if(表达式1)if(表达式2)语句1;else if(表达式3)语句2;else 语句3;上面的语句中的第1个else是与第2个if配对的,如果要改变这种默认的配对关系,可以在相应if条件选择语句上加上左、右花括号来确定新的配对关系。如:if(表达式1)if(表达式2)语句1;else if(表达式3)语句2;else 语句3;,else总是与它上面最近的且又没有配对的if语句进行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 程序设计 基础
![提示](https://www.desk33.com/images/bang_tan.gif)
链接地址:https://www.desk33.com/p-259789.html