c语言电子教案由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言课程电子教案”。
第三章
第三章第三章
第三章 C CC
C程序流程设计
程序流程设计程序流程设计
程序流程设计
教学目的
教学目的教学目的
教学目的: ::
:C流程设计是编写程序的主要内容,通过这一章的学习,使学生掌握结构化程序设计 的三种结构(顺序、选择、循环),能把实际问题通过数字化,设计算法,用C语言程序中的语
句描述出来,从而解决具体问题。
重点难点
重点难点重点难点
重点难点: ::
:选择语句和嵌套的选择语句的执行过程分析;循环语句和嵌套循环语句的执行过程
分析。C程序设计中的常用算法应用。3.1 3.13.1 3.1算法
算法算法
算法
计算机尽管可完成许多极其复杂的工作但实质上这些工作都是按照人事先编好的程序的规
定进行的,所以常把程序称为计算机的灵魂。经过对程序设计方法的探讨得出如下公式:
算法
算法算法
算法+ ++
+数据结构
数据结构数据结构
数据结构= == =程序
程序程序
程序
程序就是在数据的某些特定表示方式和结构的基础上对抽象算法的具体表述。数据结构是
程序处理的对象,而处理的方法就是算法。
3.1.1
3.1.1 3.1.1
3.1.1 算法的性质与组成要素
算法的性质与组成要素算法的性质与组成要素
算法的性质与组成要素
㈠算法的性质
算法就是进行操作的方法和操作步骤。计算机程序是用某种程序设计语言描述的解题算
法。通常有以下性质:
⑴解题算法是一有穷动作序列。
⑵此动作序列只有一个初始动作。
⑶序列中的每一个动作只有一个后继动作。
⑷序列终止表示问题得到解答或没有解答。
㈡算法的组成要素
算法含有两大组成要素:
一是操作:高级语言中所描述的操作主要包括:算术运算、逻辑运算、关系运算、函数运 算、I/O操作等。
二是控制结构:算法由一系列操作组成。同一序列按不同的顺序执行,就会得出不同的结
果。控制结构即如何控制组成算法的各操作的执行顺序。三种结构是:
⑴顺序结构 执行顺序与程序的书写顺序相同。
⑵选择结构 在执行到某一语句时,要进行判断,从中选择执行路径。
⑶循环结构 一条或多条语句重复执行若干遍。
3.1.2
3.1.23.1.2
3.1.2算法的描述
算法的描述算法的描述 算法的描述
㈠流程图与算法的结构化 三种结构的流程图: 顺序
分支 循环语句
语句2 语句 条件成立
语句1 语句2 条件 0 用辗转相除法求两个数的最大公约数的流程图描述: 用流程图表示算法灵活、自由、形象直观,可以表示任何算法。但流程图中的转移会使程
序难以阅读和维护。称为BS程序(一碗面条)㈡用N-S图描述算法
N-S图的每一种基本都是一个矩形,整个算法可像堆集木一样堆成。
㈢用PAD图描述算法 PAD图即问题分析图。
㈣伪代码与逐步细化程序设计方法
流程图、N-S图、PAD图是在种描述算法的三种图形工具。还可用伪代码来描述,伪代码是用介于自然语言和计算机语言之间的的文字符号算法描述工具,无固定格式和语法规则,通常是借用某种高级的控制结构,中间操作用自然语言,也可程序设计语言。数据结构中常用这种形式的语言描述。按自顶向下的方法,从全局出发,抽象和概括算法,主要描述“做什么”,把问题分为几个子问题。逐步细化,对“如何做”作出考虑,算法中程序设计语言的成份越来越来多。3.2 3.23.2
3.2C语句描述算法 语句描述算法语句描述算法 语句描述算法
程序就是对计算机要执行的一组操作序列的描述。组成源程序的基本单位是语句:一类是
操作;一类是控制。
3.2.1表达式语句
表达式语句表达式语句
表达式语句
C语言是一种表达式语言,所有操作运算都通过表达式来实现。
表达式语句可分为以下三种基本类型: ⑴赋值语句
x=1;y=sin(x);⑵函数调用语句
printf(“This is a C program.n”);⑶空语句,只有一个;没有表达式的语句 Input a,b R=a%b R0 A=b;b=r;R=a%b;Out b END
如: for(x=1;x
形成流程控制结构的语句形成流程控制结构的语句 形成流程控制结构的语句
设计程序时不仅要设计合适的操作还需设计适当的流程。高级语言一般有两种流程控制:
⑴形成流程控制结构
(如if、while、for等语句)⑵简单流程转向
(如:goto break continue 语句)顺序、选择和循环是结构化程序的三种基本结构,因顺序是自然形成的,无需在程序中加 以控制。3.2.2 3.2.23.2.2 3.2.2形成流程控制结构的语句
流程控制结构的语句流程控制结构的语句 流程控制结构的语句
一、选择型结构
if„else是选择型结构的基本形式,构成二选一的控制结构处理问题时二选一往往是不够的,由if„else嵌套可形成多选一,也可用多路选择控制结构语句switch()。
二、循环控制结构
循环控制结构一般由三部分组成:⑴进入条件 ⑵退出条件 ⑶循环体循环控制结构根据进入和退出条件可分为三种: ⑴while结构:退出条件是进入条件的“反条件”
⑵do„while结构:无条件进入,执行一次后再进入循环条件。⑶for结构:和while结构类似,但结构更紧凑,允许把初始化、修正、判断写在一起,使用方便灵活。
3.2.3
3.2.33.2.3
3.2.3限定转向语句
限定转向语句限定转向语句限定转向语句
这一类语句不形成控制结构,只是简单地使流程从其所在处转向另一处。但是它不允许用
户指定转向,而是按系统事先规定的向某一点转移。这类语句有三种:
⒈break语句
从所在处转向所在循环和多路选择结构之后,即终止这些结构的执行。
⒉continue语句
使本次循环体的执行提前结束,然后再根据循环条件是否满足决定是否进入下次循环。
⒊return语句
函数值返回或调用函数后返回,由函数返回到调用函数。使程序执行在调用函数和被调用 函数之间转移。
3.2.4
3.2.4 3.2.4
3.2.4 goto
gotogoto
goto语句 语句语句 语句
goto语句是一种使流程无条件转移的语句,作用是从所在处,转向本函数内的某一处,用
标号表示转向位置。语法形式为:
goto 标号
goto语句的无条件转向功能是造成程序不清晰的一个主要原因。应有限制的使用goto语句。本书的程序都不使用goto语句。3.2.5 C基本语句一览 基本语句一览基本语句一览 基本语句一览 非限定转
非限定转非限定转 非限定转 限定转向
限定转向限定转向 限定转向 流程转移
流程转移流程转移 流程转移 循环控制
循环控制循环控制 循环控制 选择控制
选择控制选择控制 选择控制 流程控制
流程控制流程控制 流程控制 流程控制语句
流程控制语句流程控制语句 流程控制语句
表达式语句 3.2.6
3.2.63.2.6 3.2.6复合语句与停止函数 复合语句与停止函数复合语句与停止函数 复合语句与停止函数
C语言允许把一组语句括在一对花括号之中,称为复合语句。一个复合语句的花括号后不应再加分号。
如:{ int x;x=15;pritnf(“%dn”,x);} 在选择和循环语句中用处最大,主要是满足条件后或循环体中执行的语句比较多时就需要复合语句。
exit是一个标准的库函数,包含在“stdlib.h”头文件中。它的作用是立即停止当前程序的执行,回到操作系统状态。exit()3.2.3.2.7
7算法设计基本方法 ㈠列举法:
根据提出的问题,列举所有可能的情况,并用问题中给出的条件检验哪些是需要的,哪些
是不需要的。用于解决是否存在,有多少种可能等问题。㈡归纳法:
通过列举少量的特殊情况,通过分析,最后找出一般关系。能反映问题的本质,并且可解决列举量为无限的问题。㈢递推法:
从已知的初始条件出发,逐次推出所求各中间结果和最后结果。方程求解等问题。㈣递归:
为了降低问题的复杂程度,将问题逐层分解,最后归结为一些最简单的问题。分解过程中并没有对问题求解,而是解决了最后那些简单问题后,再沿着原来分解的逆过程逐步进行综合。㈤减半递推
将问题的规模减半,而问题的性质不变;递推是指重复减半的过程。㈥回溯法
试探,通过分析问题,找出一个解决问题的线索,然后沿着这个线索逐步试探,试探成功问题解,试探失败,逐步回退,换别的路线再进行试探。
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,%dn”,a,b,c);} 此程序的流程序如下:
基本思想:先把a,b两个数从小到大排列,再用a和c进行比较,然后b和c进行比较,排出从小到大次序。分析当a=3,b=1,c=-1它们值的变化情况。3.3.
含有else子句的if语句 语句形式如下: if(表达式)语句1 else 语句2
if与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(“%dn”,x--);}
执行的结果?
练习题:
1.输入两个不相等的整数分别给x,y,输出其中最大的。
关系表达式:x>y
2.输入一个数判别它能否被3整除,若能输出“YES”,如不能输出“NO”。
关系表达式:x%3= =0
3.输入一个数判别它是否为偶数,若是输出“YES”,如不是输出“NO”。
关系表达式:x%2= =0
4.输入一个数判别它是否为负数,若是输出“YES”,如不是输出“NO”。
关系表达式:x
5.输入一个数判别它能否被3和7整除,若能输出“YES”,如不能输出“NO”。
关系表达式:x%3= =0&&x%7= =0
条件成立
语句1 语句2 在if语句中嵌套有的else的if语句
(一): 在不带else和带else语句的语句和语句1和语句2中出现if语句就是嵌套的if语句,通常是
在条件判断较多时采用。分析该形式语句的执行是比较困难的,需要多看程序或多编程序才行。
嵌套形式有如下:
if(表达式1)
if(表达式2)语句1
else 语句2
else 语句3
程序举例:
main()
{ int x,y;scanf(“%d”,&x);
if(x!=0)
if(x
else y=1;
else y=0;
printf(“y=%dn”,y);}
在if中嵌套不含else的if语句
(二):
该种形式的嵌套是在if语句和else之间有if语句。
嵌套形式有如下:
if(表达式1){ if(表达式2)语句1}
else 语句2
以上的{}不可没有,如果没有,就等价于:
if(表达式1)
if(表达式2)语句1
else 语句2
程序举例:求符号函数的值。
main()
{ int x,y;
scanf(“%d”,&x);
y=-1;if(x!=0)
{if(x>0)y=1;}
else y=0;
printf(“y=%dn”,y);}
在else语句中嵌套if语句
(三):
该种形式的嵌套,是else在之后的语句中有if语句。
嵌套形式有如下:
if(表达式1)语句1
else ? ? ? ? ? > = =)0(1)0(0)0(1 x x x
y if(表达式2)语句2
else 语句3
等价于:
if(表达式1)语句1
else if(表达式2)语句2
else 语句3
(书写格式要求按层缩进方式,增加程序的可读性)
程序举例:(符号函数)
main(){ int x,y;
scanf(“%d”,&x);
if(x==0)y=0;
else if(x>0)y=1;
else y=-1;
printf(“y=%dn”,y);}
(学生分数等级确定)main()
{int g;
scanf(“%d”,&g);
if(g>=90)
printf(“An”);
else if(g>=80)
printf(“Bn”);
else if(g>=70)
printf(“Cn”);
else if(g>=60)
printf(“Dn”);
else
printf(“En”);}
条件表达式构成的选择结构
用C语言的if语句在程序中可构成选择结构;C语言中还提供了一种特殊的运算—条件运算
符,由此构成的表达式也可形成简单的选择结构,这种选择结构可以表达式的形式内嵌在允许
出现表达式的地方,使得可根据不同的条件使用不同的表达式。(类似于Excel中的IF()函数)
条件运算符: ? :,唯一的一个三目运算符,要求三个对象。
由条件运算符构成的条件表达式:
表达式1? 表达式2 : 表达式3
条件表达式的运算功能:
表达式1的值为非0时,求出表达式2的值,此时表达式2的值就是整个条件表达式的值; 若表达式1的值为0时,求出表达式3的值,此时表达式3的值就是整个条件表达式的值。
例如:x=5,y=10,则max=x>y?x:y的值max等于多少?
条件运算的优先级
优于赋值运算,但低于逻辑、关系、算术运算。y=x>10?100:200;
printf(“abs(x)=%d”n,x>0?(-1)*x:x)(输出x的绝对值)
程序举例:用条件表达式求三个数中的最大和最小数并输出。
main()
{ int a,b,c,max,min;
scanf(“%d%d%d”,&a,&b,&c);
max=a>b?a:b;min=ac?max:c;
min=min
printf(“max=%d,min=%dn”,max,min);} 3.3 3.33.3 3.3.
..
.2 22 2switch switchswitch
switch语句及用
语句及用语句及用
语句及用switch
switchswitch
switch和
和和
和break
breakbreak
break构成的选择结构
构成的选择结构构成的选择结构 构成的选择结构
switch语句的格式:
switch(表达式)
{ case 常量表达式1:语句1;
case 常量表达式2:语句2;
„„
case 常量表达式n:语句n;
default
}
n+1;
:语句 说明:switch,case,default都是关键字。
语句1到语句n+1可以是一条也可是多条,也可以不写。
常量表达式和case间要有空格。
switch语句的执行过程:
首先计算表达式的值,然后在case的常量表达式中找出与其相等的标号,如有相等的执行
该标号以后的所有语句;如果没有,若有default则执行default标号后的语句,否则跳过switch
语句,什么也不做。
程序举例: main()
{int g;scanf(“%d”,&g);
switch(g/10)
{case 10:
case 9: printf(“An”);
case 8: printf(“Bn”);
case 7: printf(“Dn”);
case 6: printf(“En”);
default : printf(“Fn”);} }
在switch语句中使用break语句 由上面的程序看出,switch语句执行结果和要求的是不一致的,因此必须和break语句联合
使用,才能输出正确的结果。break语句的作用就是断开switch语句的执行。用语句重新修改输
出分数等级的程序。程序举例:
main()
{int g;
scanf(“%d”,&g);
switch(g/10)
{case 10:
case 9: printf(“An”);break;
case 8: printf(“Bn”);break;case 7: printf(“Dn”);break;
case
6: printf(“En”);break;
default : printf(“Fn”);} }
例题:当a≥0请将以下语句改写成switch语句。
if(a
else if(a
else if(a
else if(a
else m=5;
语句标号与goto语句
语句标号:
在程序行的位置,用用户定义标识符的规定,在其标识后加上“:”该标识符就是一个标
号。
如:flag: stop0:等都是标号。
可用语句 goto flag;来使程序执行转向。
goto语句称为无条件转语句,使用形式如下:
goto 语句标号;
作用:把程序执行转向标号所在位置的语句。但无条件转语句的使用,破坏了程序的可读性,一般不采用。3.4 3.43.4
3.4循环结构
循环结构循环结构
循环结构
3.4.1
3.4.1 3.4.1
3.4.1 while
whilewhile
while语句和用
语句和用语句和用
语句和用while
whilewhile
while语句构成的循环结构
语句构成的循环结构语句构成的循环结构
语句构成的循环结构
while循环的一般形式
由while语句构成的循环语句也称为“当”循环语句,一般形式如下:
while(表达式)循环体 例如: while(i
说明: while是关键字,括号中的表达式用来控制循环是否执行。
循环体是重复执行的部分,可以是一条和多条语句,多条语句应用{}括起来。
while执行过程:首先计算表达式的值,当值为非0时,执行一次循环体,转去判断表达式值是0还是非0;
当表达式的值为0时,退出循环。(这种循环语句可
一次也不执行)在使用该循环语句时,要注意的是在
表达式中有一个变量与循环体中的变量同名,当循环
体执行的过程中可使表达式的值由非0变为0,这样才
能使循环正常结束,否则会造成死循环。while循环举例(一):
程序举例:
例 编程序求1+2+3+„„+100的值。
变量i提供1到100之间的数。
变量sum存放累加的和。(累加单元先要清0)
程序如下:
main()
{int i,sum;
sum=0;i=1;
while(i
{sum=sum+i;i++;} printf(“sum=%d”,sum);
0 表达式
循环体 }
while循环举例(二):
例题:
用级数求和计算圆周率的值,公式如下: 9 1
? 7 1 5 1 3 1 1 4
+?+?=π
变量n提供奇数。变量s产生符号。
变量pi存放π的值。(累加单元般要清0)变量t产生累加项。
程序如下:
main()
{float s,t,pi,n;
pi=0;n=1.0;t=1.0;s=1.0;
while(fabs(t)>=1e-4)
{pi=pi+t;n+=2.0;s=-s;t=s/n;}
pi=pi*4;printf(“pi=%fn”,pi);
} 3.4.3.4.3.4.3.4.2 2 2 2 do dodo do----while
whilewhile
while一般形式
一般形式一般形式
一般形式
do-while语句的一般形式:
do
循环体
while(表达式);
do和while都是关键字。循环体是重复执行的语句,多于一条语句应用大括号括起来。表达式是C
语言中的合法表达式。
do-while执行过程,流程所示:
首先执行循环体语句,判断表达式的值,非0
转回去继续执行循环体;如果是0退出循环体。
这种循环语句同样和while循环一样表达式中含有变量和
循环体中的变量相对应,当循环体执行时,可使表达式的
值由非0变为0,循环才能正常结束。该循环语句的循环体
至少执行一次(先执行后判断)。
do-while举例:
求1+1/2+1/3+„直到累加项小于10-4为止。
变量i提供累加项的分母。
变量sum存放累加和。流程图:
程序如下:
main()
{float i,sum;