c语言电子教案
- 格式:doc
- 大小:61.00 KB
- 文档页数:77
第三章第三章第三章第三章 CCCC程序流程设计程序流程设计程序流程设计程序流程设计教学目的教学目的教学目的教学目的::::C流程设计是编写程序的主要内容,通过这一章的学习,使学生掌握结构化程序设计的三种结构(顺序、选择、循环),能把实际问题通过数字化,设计算法,用C语言程序中的语句描述出来,从而解决具体问题。
重点难点重点难点重点难点重点难点::::选择语句和嵌套的选择语句的执行过程分析;循环语句和嵌套循环语句的执行过程分析。
C程序设计中的常用算法应用。
3.13.13.13.1算法算法算法算法计算机尽管可完成许多极其复杂的工作但实质上这些工作都是按照人事先编好的程序的规定进行的,所以常把程序称为计算机的灵魂。
经过对程序设计方法的探讨得出如下公式:算法算法算法算法++++数据结构数据结构数据结构数据结构====程序程序程序程序程序就是在数据的某些特定表示方式和结构的基础上对抽象算法的具体表述。
数据结构是程序处理的对象,而处理的方法就是算法。
3.1.13.1.1 3.1.13.1.1 算法的性质与组成要素算法的性质与组成要素算法的性质与组成要素算法的性质与组成要素㈠算法的性质算法就是进行操作的方法和操作步骤。
计算机程序是用某种程序设计语言描述的解题算法。
通常有以下性质:⑴解题算法是一有穷动作序列。
⑵此动作序列只有一个初始动作。
⑶序列中的每一个动作只有一个后继动作。
⑷序列终止表示问题得到解答或没有解答。
㈡算法的组成要素算法含有两大组成要素:一是操作:高级语言中所描述的操作主要包括:算术运算、逻辑运算、关系运算、函数运算、I/O操作等。
二是控制结构:算法由一系列操作组成。
同一序列按不同的顺序执行,就会得出不同的结果。
控制结构即如何控制组成算法的各操作的执行顺序。
三种结构是:⑴顺序结构执行顺序与程序的书写顺序相同。
⑵选择结构在执行到某一语句时,要进行判断,从中选择执行路径。
⑶循环结构一条或多条语句重复执行若干遍。
3.1.23.1.23.1.23.1.2算法的描述算法的描述算法的描述算法的描述㈠流程图与算法的结构化三种结构的流程图:1顺序分支循环语句1语句2 语句3 条件成立语句1 语句2条件 0用辗转相除法求两个数的最大公约数的流程图描述:用流程图表示算法灵活、自由、形象直观,可以表示任何算法。
但流程图中的转移会使程序难以阅读和维护。
称为BS程序(一碗面条)㈡用N-S图描述算法N-S图的每一种基本都是一个矩形,整个算法可像堆集木一样堆成。
㈢用PAD图描述算法PAD图即问题分析图。
㈣伪代码与逐步细化程序设计方法流程图、N-S图、PAD图是在种描述算法的三种图形工具。
还可用伪代码来描述,伪代码是用介于自然语言和计算机语言之间的的文字符号算法描述工具,无固定格式和语法规则,通常是借用某种高级的控制结构,中间操作用自然语言,也可程序设计语言。
数据结构中常用这种形式的语言描述。
按自顶向下的方法,从全局出发,抽象和概括算法,主要描述“做什么”,把问题分为几个子问题。
逐步细化,对“如何做”作出考虑,算法中程序设计语言的成份越来越来多。
3.23.23.23.2C语句描述算法语句描述算法语句描述算法语句描述算法程序就是对计算机要执行的一组操作序列的描述。
组成源程序的基本单位是语句:一类是操作;一类是控制。
3.2.1表达式语句表达式语句表达式语句表达式语句C语言是一种表达式语言,所有操作运算都通过表达式来实现。
表达式语句可分为以下三种基本类型:⑴赋值语句x=1; y=sin(x);⑵函数调用语句printf("This is a C program.\n");⑶空语句,只有一个;没有表达式的语句Input a,bR=a%b R<>0A=b;b=r;R=a%b;Out b END如: for(x=1;x<100;x++); 为空循环。
3.2.23.2.23.2.23.2.2形成流程控制结构的语句形成流程控制结构的语句形成流程控制结构的语句形成流程控制结构的语句设计程序时不仅要设计合适的操作还需设计适当的流程。
高级语言一般有两种流程控制:⑴形成流程控制结构(如if 、while、 for等语句)⑵简单流程转向(如:goto break continue 语句)顺序、选择和循环是结构化程序的三种基本结构,因顺序是自然形成的,无需在程序中加以控制。
3.2.23.2.23.2.23.2.2形成流程控制结构的语句流程控制结构的语句流程控制结构的语句流程控制结构的语句一、选择型结构if…else是选择型结构的基本形式,构成二选一的控制结构处理问题时二选一往往是不够的,由if…else嵌套可形成多选一,也可用多路选择控制结构语句switch()。
二、循环控制结构循环控制结构一般由三部分组成:⑴进入条件⑵退出条件⑶循环体循环控制结构根据进入和退出条件可分为三种:⑴while结构:退出条件是进入条件的“反条件”⑵do…while结构:无条件进入,执行一次后再进入循环条件。
⑶for结构:和while结构类似,但结构更紧凑,允许把初始化、修正、判断写在一起,使用方便灵活。
3.2.33.2.33.2.33.2.3限定转向语句限定转向语句限定转向语句限定转向语句这一类语句不形成控制结构,只是简单地使流程从其所在处转向另一处。
但是它不允许用户指定转向,而是按系统事先规定的向某一点转移。
这类语句有三种:⒈break语句从所在处转向所在循环和多路选择结构之后,即终止这些结构的执行。
⒉continue语句使本次循环体的执行提前结束,然后再根据循环条件是否满足决定是否进入下次循环。
⒊return语句函数值返回或调用函数后返回,由函数返回到调用函数。
使程序执行在调用函数和被调用函数之间转移。
3.2.43.2.4 3.2.43.2.4 gotogotogotogoto语句语句语句语句goto语句是一种使流程无条件转移的语句,作用是从所在处,转向本函数内的某一处,用标号表示转向位置。
语法形式为:goto 标号goto语句的无条件转向功能是造成程序不清晰的一个主要原因。
应有限制的使用goto语句。
本书的程序都不使用goto语句。
3.2.5 C基本语句一览基本语句一览基本语句一览基本语句一览非限定转非限定转非限定转非限定转限定转向限定转向限定转向限定转向流程转移流程转移流程转移流程转移循环控制循环控制循环控制循环控制选择控制选择控制选择控制选择控制流程控制流程控制流程控制流程控制流程控制语句流程控制语句流程控制语句流程控制语句表达式语句3.2. 63.2. 63.2. 63.2. 6复合语句与停止函数复合语句与停止函数复合语句与停止函数复合语句与停止函数C语言允许把一组语句括在一对花括号之中,称为复合语句。
一个复合语句的花括号后不应再加分号。
如:{ int x;x=15; pritnf("%d\n",x);}在选择和循环语句中用处最大,主要是满足条件后或循环体中执行的语句比较多时就需要复合语句。
exit是一个标准的库函数,包含在"stdlib.h"头文件中。
它的作用是立即停止当前程序的执行,回到操作系统状态。
exit()3.2.3.2. 77算法设计基本方法㈠列举法:根据提出的问题,列举所有可能的情况,并用问题中给出的条件检验哪些是需要的,哪些是不需要的。
用于解决是否存在,有多少种可能等问题。
㈡归纳法:通过列举少量的特殊情况,通过分析,最后找出一般关系。
能反映问题的本质,并且可解决列举量为无限的问题。
㈢递推法:从已知的初始条件出发,逐次推出所求各中间结果和最后结果。
方程求解等问题。
㈣递归:为了降低问题的复杂程度,将问题逐层分解,最后归结为一些最简单的问题。
分解过程中并没有对问题求解,而是解决了最后那些简单问题后,再沿着原来分解的逆过程逐步进行综合。
㈤减半递推将问题的规模减半,而问题的性质不变;递推是指重复减半的过程。
㈥回溯法试探,通过分析问题,找出一个解决问题的线索,然后沿着这个线索逐步试探,试探成功问题解,试探失败,逐步回退,换别的路线再进行试探。
3.3选择型程序设例1:电管部门收电费有如下规定:若每月用电量不超过20度,每度电收费0.25元;若超过20度,最初的20度每度电收费0.25元,超过20度的部分每度电收费0.3元,请编一个收电费的程序。
设用电的度数为x,收电费为y,根据题意可得以下计算收电费的分段函数:该程序的编制,需根据输入的用电度数决定计算哪一段函数。
类似的问题还很多:如一元二次方程求解(需根据判别式来确定根的情况);知道三边求三角形的面积(需判断这三条边的关系)。
这些都是根据输入的数值来决定程序的执行走向,还有在程序执行的过程中根据变量的变化来决定程序的执行走向的情况,在以后的编程中介绍。
不带else的if语句if…else语句使C语言中有两种if语句,不带else和带else,首先来看不带else:语句格式如下:if (表达式) 语句表达式:可以是C语言中合法的表达式。
语句:C语言中可执行的任意语句,如果多于一条语句,应用{}括起来。
执行过程:首先判断表达式的值,如果非0(真),则执行语句,然后执行if语句的下一语句;如果为0(假),则跳过语句,执行if语句的下一语句。
(如图所示) 表达式语句不带else语句举例:例:.输入三个整数,分别放入a,b,c中,要求程序把数据重新按从小到大的顺序放入a,b, c中,然后输出a,b,c中的值。
main(){ int a,b,c,t;scanf("%d%d%d",&a,&b,&c);if (a>b) {t=a;a=b;b=t;}if (a>c) {t=a;a=c;c=t;}if (b>c) {t=b;b=c;c=t;}printf("%d,%d,%d\n",a,b,c);}此程序的流程序如下:基本思想:先把a,b两个数从小到大排列,再用a和c进行比较,然后b和c进行比较,排出从小到大次序。
分析当a=3,b=1,c=-1它们值的变化情况。
3.3.含有else子句的if语句语句形式如下:if (表达式) 语句1else 语句2if与else必须成对出现。
表达式是C语言中合法的表达式。
语句1和语句2是C语言中可执行语句,如果是多于一条语句,应用{}括起来,语句1后不能少“;”号。
执行过程:如果表达式为非0(真)执行语句1,然后执行if 语句的下一语句;如果表达式为0(假),执行语句2,然后执行if语句下一语句。
程序举例:当x输入6和4时程序main(){ int x;scanf("%d",&x);if(x++>5) printf("%d",x);else printf("%d\n",x--);}执行的结果?练习题:1.输入两个不相等的整数分别给x,y,输出其中最大的。