算法与程序设计基础课件.ppt
《算法与程序设计基础课件.ppt》由会员分享,可在线阅读,更多相关《算法与程序设计基础课件.ppt(138页珍藏版)》请在三一办公上搜索。
1、C语言程序设计(第3版),中国铁道出版社China Railway Publishing House,普通高等教育“十一五”国家级规划教材,主 教 材:C语言程序设计(第三版)书 号:ISBN 978-7-113-09512-3 中国铁道出版社 2009年2月 第3版配套教材:C语言程序设计实验教程书 号:ISBN 978-7-113-09513-0 中国铁道出版社 2009年2月 第1版作者电子邮箱:L,3.1 算法概述,3.3 结构化程序设计方法,3.2 算法的常用表示方法,3.4 C语句概述,3.6 循环结构程序设计,3.7 综合程序应用举例,3.5 选择结构程序设计,第3章 算法与程序
2、设计基础,结束放映,3.1 算法概述,程序(program)是计算机可以执行的指令或语句序列。它是用计算机解决现实生活中的一个实际问题而编制的。设计、编制、调试程序的过程称为程序设计。编写程序所用的语言即为程序设计语言,它为程序设计提供了一定的语法和语义,所编写出的程序必须严格遵守它的语法规则,这样编写出来的程序才能被计算机所接受、运行,并产生预期的结果。,3.1.1 算法的概念,解决一个实际问题而采取的方法和步骤,称之为“算法”。对于同一个问题,可能有不同的方法和步骤,即有不同的算法。【例3.1】求1+2+3+4+100=?,算法1步骤1:1+2=3步骤2:3+3=6步骤3:6+4=10步骤
3、99:4950+100=5 050,算法2步骤1:0+100=100步骤2:1+99=100步骤3:2+98=100步骤50:49+51=100步骤51:100*50=5 000步骤52:5 000+50=5 050,算法3步骤1:k=1,s=0步骤2:如果k100,则算法结束,s即为所求的和,输出s;否则转向步骤3步骤3:s=s+k,k=k+1步骤4:转向步骤2,当然,算法也有优劣之分,有的算法较简练,而有的算法较烦琐。上面三个算法中,算法2比算法1步骤少,算法3比算法2步骤少,算法3的质量最优。一般地说,希望采用方法简单、运算步骤少的方法。,3.1.2 算法的特性,一个算法应具有如下五个特
4、点:1有穷性2确定性3可行性 4有零个或多个输入 5有一个或多个输出,3.2 算法的常用表示方法,3.2.1 自然语言表示法 所谓自然语言,就是人们日常使用的语言,可以是汉语、英语或其他语言。,3.2.2 流程图,流程图是用图形的方式来表示算法,用一些几何图形来代表各种不同性质的操作。ANSI(美国国家标准化协会)规定的一些常用流程图符号(见图3-1)已被大多数国家接受。,1顺序结构 顺序结构的程序是按语句的书写顺序执行的,用图3-2表示2选择结构 选择结构或称分支结构、条件结构,用图3-3表示,3循环结构 循环结构又称重复结构,有两种方式:一种是先判断条件,若条件成立再进入循环体,可用图3-
5、4表示;另一种是先进入循环体执行,再判断条件是否成立。可用图3-5表示。,3.2.3 N-S结构流程图,1973年美国的计算机科学家INassi和BShneiderman提出了一种新的流程图形式。在这种流程图中把流程线完全去掉了,全部算法写在一个矩形框内,在框内还可以包含其他框,即由一些基本的框组成一个较大的框。这种流程图称为N-S结构流程图(以两人名字的头一个字母组成)。,3.2.4 伪代码表示法,伪代码(pseudo code)是用介于自然语言和计算机语言之间的文字和符号来表示算法,即计算机程序设计语言中具有的语句关键字用英文表示,其他的可用汉字,也可用英文,只要便于书写和阅读就可。,3.
6、2.5 用计算机语言表示算法,用计算机语言描述算法必须严格遵循所用语言的语法规则,#includevoid main()int sign,i,n;float sum;printf(n Please input an integer to n:);scanf(%d,程序运行结果如下:Please input an integer to n:5sum=0.738889,3.3 结构化程序设计方法,在拿到一个需要求解的实际问题之后,怎样才能编写出程序呢?以数值计算问题为例,一般应按图3-12所示的步骤进行。要设计出结构化的程序,可采取以下的方法:自顶向下逐步细化模块化结构化编码,【例3.5】输入10
7、个整数(每个数都3),打印出其中的素数。分析:素数又称质数,是指只能被1和它本身整除的整数。本题采用自顶向下、逐步细化方法来处理这个问题。先把这个问题分为三部分(如图3-14所示):输入10个数给x1x10;把其中的素数找出来(或者把非素数除去)打印出全部素数。,对【例3.5】求解步骤进行细化后得到的分步骤流程图。,【例3.5】的完整流程图,3.4 C语句概述,1说明语句说明语句用来定义变量的数据类型。例如:int sign,i,n;/*说明sign,i,n是整型变量*/,2函数调用语句由一个函数调用加一个分号构成函数调用语句。如上例中的:printf(n Please input an in
8、teger to n:);scanf(%d,3表达式语句在C语言中,由一个表达式加上一个分号就构成了一条表达式语句。最典型的是,由赋值表达式加上分号构成赋值语句。例如:sign=1;sum=1;i=1;sign=(-1)*sign;sum=sum+sign/(3.0*i);i=i+1;,表达式能构成语句是C语言的一重要特色。其实函数调用语句也是表达式语句,因为函数调用也属于表达式的一种。,4空语句 仅由一个分号构成的语句就是空语句。例如:;,5复合语句复合语句是由大括号括起来的,在逻辑上相关的一组语句。如上例中的:sign=(-1)*sign;sum=sum+sign/(3.0*i);i=i+
9、1;,6控制语句控制语句用来规定语句执行的顺序,C语言共有9种控制语句。(1)if(条件)else(条件语句)(2)for(条件)(循环语句)(3)while(条件)(循环语句)(4)do while(条件);(循环语句)(5)continue;(结束本次循环语句)(6)break;(结束循环语句或结束switch语句)(7)switch(表达式)(多分支选择语句)(8)goto 标号;(转向语句)(9)return(表达式);(从函数返回语句),3.5 选择结构程序设计,3.5.1 关系运算符和关系表达式,关系表达式 用关系运算符连接起来的表达式称为关系表达式,关系表达式的结果为逻辑值真(用
10、“1”表示)或假(用“0”表示)。例如:ca+b 若a=3,b=4,c=9 则结果为1 a=bc 若b=4,c=9 则a的值为0 两个数值进行比较,是比较其数值的大小,两个字符进行比较,是比较其ASCII码值的大小。,3.5.2 逻辑运算符和逻辑表达式,1逻辑运算符及优先次序,逻辑运算符与其他运算符的运算优先顺序如下图所示:例如:原式 可写为(ab)&(xy)ab&xy(a=b)|(x=y)a=b|x=y(!a)|(ab)!a|ab,2逻辑表达式用逻辑运算符将关系表达式或逻辑表达式连接起来的式子称逻辑表达式。例如,若a=4,b=2,x=6,y=7,则:ab&xy 表达式的结果为0a=b|x=y
11、 表达式的结果为0!a|ab 表达式的结果为1,注意:(1)在C语言中规定:非零为“真”,“真”用1表示;零为“假”,“假”用0表示。例如:a&b 其结果为1!5.34 其结果为0(2)对逻辑表达式的求解,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,【例3.6】运行下面的程序四次,若分别输入0 0 0,1 0 1,1 2 3,1 0 0,分别写出其对应的输出结果。#include void main()int a,b,c;scanf(%d%d%d,在Visual C+6.0环境下运行,若输入0 0 0 其输出为:e=0,a=1,b=-1
12、,c=0a=2,b=-2,c=1,e=1,a=2,b=-2,c=1e=1,a=2,b=-3,c=0a=2,b=-3,c=-1,e=1在Turbo C2.0环境下运行,若输入0 0 0 其输出为:e=0,a=0,b=0,c=0a=2,b=-2,c=1,e=1,a=2,b=-2,c=1e=1,a=2,b=-2,c=1a=2,b=-3,c=-1,e=1,3.5.3 if语句,C语言提供了两种格式:格式1:if(表达式)语句;该语句的功能是:首先计算表达式的值,然后判断表达式的值是否为非零(真),若为非零(真),则执行语句。其执行过程见图3-22所示,【例3.7】输入一个字符c,若c是字母,则输出“Y
13、es!”。#include void main()char c;c=getchar();if(c=a运行情况如下:xYes!,程序如下:#include#include void main()float x;double z;printf(nx=);scanf(%f,格式2:if(表达式)语句1;else 语句2;该语句的功能是:首先计算表达式的值,然后判断表达式的值是否为非零(真),若非零(真),则执行语句1,否则执行语句2。其执行过程下图,【例3.9】输入两个数并判断两数是否相等。,程序清单如下:#include void main()int a,b;printf(Enter intege
14、r a:);scanf(%d,【例3.10】输入一个整数,若该数不为零,则输出。#include void main()int x;scanf(%d,程序运行结果如下:-5 输入x=-5输出说明:if后面的表达式可以为任何类型的表达式,只要表达式的结果为非零,则表示条件成立,否则表示条件不成立。,总结:1.if后面的表达式可以为任何类型的表达式,只要表达式的结果为非零,则表示条件成立,否则表示条件不成立。2if语句中的语句1,语句2可以是一条语句,也可以是由构成的一个复合语句,如果在该语句处需要写多条语句才能完成所必要的功能时,就使用复合语句的形式。3在格式2中的else前面的语句必须要有一个
15、分号,整个语句结束处有一个分号。如例3.9中的if语句。,3.5.4 if语句的嵌套,在一个if语句中,如果又完全包含了另一个(或者多个)if语句,则称为if语句的嵌套。if嵌套的一般形式如下:if(表达式1)if(表达式2)语句1;else 语句2;else if(表达式3)语句3;else 语句4;if语句的嵌套既可以嵌套在if后面,也可以嵌套在else后面,具体嵌套的位置要根据实际需要而定。,【例3.11】编写程序,求下列分段函数的值。,【例3.11】的程序清单如下:#include#include void main()float x;double z;printf(nx=);scan
16、f(%f,对【例3.11】程序的另一种修改:#include#include void main()float x;double z;printf(nx=);scanf(%f,else的最近配对原则:C语言规定:else总是与它上面最近的且又没有配对的if语句进行配对。,在下面这条嵌套的if语句中 if(表达式1)if(表达式2)语句1;else 语句2;else if(表达式3)语句3;else 语句4;若把else 语句2去掉,变成:if(表达式1)if(表达式2)语句1;else if(表达式3)语句3;else 语句4;第一个else将和哪个if配对?根据else的最近配对原则,第一个
17、else将与第2个if(表达式2)语句1;配对,如图3-27所示。,在下面的if嵌套语句中if(表达式1)if(表达式2)语句1;else if(表达式3)语句3;else 语句4;如果用户希望else只能和if(表达式1)配对,而不是与现在的if(表达式2)语句1;配对,则应该在if(表达式2)语句1;的两端加上花括号,从而确定了新的配对关系,修改后的结果:if(表达式1)if(表达式2)语句1;else if(表达式3)语句3;else 语句4;,【例3.12】写出下面程序的运行结果。#include void main()int a,b,c;a=5;b=3;c=0;if(c)if(ab)
18、printf(n max=%d,a);else printf(n max=%d,b);else printf(n c=%d,c);运行结果如下:c=0,3.5.5 条件运算符和条件表达式,条件运算符(?:)是C语言中唯一的一个三目运算符,其格式如下:表达式1?表达式2:表达式3功能:如果表达式1的值为真,则该条件表达式的结果取表达式2的值,否则取表达式3的值。例如:下述的if语句 if(ab)max=a;else max=b;可以用条件表达式来改写:max=ab?a:b;,条件表达式说明:1.条件表达式的执行顺序:先计算表达式1的值,若表达式1的值为真,则计算表达式2的值,并把该值作为整个条件
19、表达式的结果,表达式3不会计算;否则计算表达式3的值,并把表达式3的值作为整个条件表达式的结果,此时表达式2不会计算。2运算优先级:高于赋值运算符,低于算术运算符和关系运算符。例:max=(ab)?a:b 相当于 max=(ab)?a:b)ab?a:b+1 相当于 ab?a:(b+1)3.条件运算符的结合方向为“自右至左”。如:ab?a:cd?c:d 相当于 ab?a:(cd?c:d),【例3.13】阅读下面的程序,若输入为59,则输出结果是什么?#include void main()int score;char grade;printf(please input a score:n);sc
20、anf(%d,运行结果如下:please input a score:59 59 belongs to C,3.5.6 switch 语句,switch语句属于多分支结构语句,通常用于描述有多种情况的选择,其格式如下:switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句(n+1);,上式中的default:和语句(n+1);可以省略不写。switch语句的执行过程如下:首先计算表达式的值,然后用此值来查找各个case后面的常量表达式,直到找到一个等于表达式值的常量表达式,则转向该case后面的语句去执行;若表
21、达式的值与下面任何一个case常量表达式的值都不相等,则自动转去执行default部分的语句;如果没有default部分,退出该switch语句,执行switch语句后面的那条语句。,【例3.14】编写一个程序,要求输入学生的分数,输出其成绩的分数段,用A、B、C、D、E分别表示90分以上、8089分、7079分、6069分和不及格(059分)5个分数段。,【例3.14】的程序清单。,#include void main()int score,grade;printf(nInput a score(0100):);scanf(%d,【例3.14】程序的运行结果:Input a score(01
22、00):50 输入分数grade=E!输出结果再运行一次:Input a score(0100):90 grade=A!输出结果switch语句的补充说明:(1)switch 后的表达式,可以是整型或字符型,也可以是枚举类型,不能是除这三种类型以外的其它类型;,(2)每个case后的常量表达式只能是常量组成的表达式,当switch后的表达式的值与某一个常量表达式的值一致时,程序就转到此case后的语句开始执行;如果没有一个常量表达式的值与switch后的值一致,就执行default部分的语句;(3)每个case后的常量表达式的值必须互不相同,否则程序就无法判断应该执行哪个语句;,(4)case
23、的摆放顺序并不影响执行结果,但通常情况下是将出现频率较高(即较常使用的case部分,尽量往前摆放;另外,default部分也不一定非要放在最后;(5)在执行完一个case后面的语句后,程序流程转到下一个case后的语句开始执行,直至整个switch语句结束,别误解为执行完一个case语句之后,程序就会转到switch后的语句去执行。,(6)如果希望在执行完某个case语句之后,转到执行switch下面的那条语句,则应该在该case语句的最后补上break语句(即跳转语句)。在执行完break语句之后,会跳出switch语句,转去执行switch后面的语句。,【例3.21】从键盘输入一个日期,判
24、断这一天是这一年的第几天?#include void main()int day,month,year,sum,leap;printf(n Please input year,month,dayn);scanf(%d,%d,%d,case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf(data error);sum+=day;/*总天数再加上输入的几号*/if(year%400=0|(year%4=0,【例
25、3.15】程序分析:以2008年7月19日为例,首先应该把7月份之前共六个月的总天数加起来,然后再加上本月的19天就得到本年度的第几天。特殊情况下,若该年是闰年且输入月份值大于二月份时,需要考虑多加一天。程序运行结果如下:Please input year,month,day 2008,7,19 输入年月日It is the 201th day.输出,3.5.7 选择结构程序设计举例,【例3.16】求一元二次方程ax2+bx+c=0的实数解,并显示结果,这里假设a0。,图3-29 用嵌套的if语句求一元二次方程的解,#include#include void main()float a,b,c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 程序设计 基础 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-3968139.html