您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第三章程序的流程控制
3.1程序的概念程序是可以被计算机处理的指令序列。通常,程序是为完成一项任务、由汇编语言或高级语言编写的代码的集合。程序设计是根据所提出的任务,用某种程序设计语言编制一个能正确完成该任务的计算机程序。3.1.1程序的特性著名的计算机科学家沃思(NikiklausWirth)提出一个公式:程序=数据结构+算法。现在又有很多专家对这个公式加以扩充:程序=算法+数据结构+程序设计方法+语言工具和环境。所有程序(包括计算机程序)都有一些共同的性质,这些性质主要包括:(1)指令是顺序执行的。(2)程序的执行都有一个结果。(3)程序总是要对某些对象进行操作。(4)有的程序要加入对操作对象的说明。(5)有时指令要求执行者做出判断。(6)一条或一组指令可能需要执行多次。程序设计离不开算法,算法指导程序设计,算法是程序的灵魂。因此程序设计的大致步骤如下。(1)问题定义(2)算法设计(3)算法表示(4)程序编制(5)程序调试、测试及资料编制3.2算法精确地讲,算法是被精确定义的一系列规则,这些规则规定了解决特定问题的一系列操作顺序,以便在有限步骤内产生出所求问题的解答。3.2.1算法的特点算法特性:(1)有效性。(2)确定性。(3)有穷性。(4)有零个或多个输入。(5)有一个或多个输出。有效性指算法所规定的操作都应当是能够有效执行的。确定性一是:所描述的操作应当具有明确的意义,不应当有歧义性。二是:操作作序列只有一个初始动作,序列中每一动作仅有一个后继动作;有穷性指算法所规定的操作序列必须在允许的时间内结束。【例3-1】从键盘输入三个数,找出其中最大的那个数。分析:从键盘输入的三个数值必须用三个变量来保存,假定这三个变量分别为a、b、c,另外,还需要一个变量max来装最大的那个数。先比较a和b的值,把数值大的放入max中,再将max与c比较,又把数值大的放入max中。经过两次比较,max中已存放的是a,b,c三个数中最大的数,把max的值输出就是所需结果。算法步骤:1.输入三个数,其值分别赋给三个变量a,b,c。2.把a与b中较大的那个数放入变量max中。3.把c与max中较大的那个数放入变量max中。4.输出最后结果max的值。三个数比较大小#includestdio.hvoidmain(){inta,b,c,max;printf(请输入三个数的值:);scanf(%d%d%d,&a,&b,&c);if(ab)max=a;elsemax=b;if(cmax)max=c;printf(最大的值是:%d\n,max);}1.流程图表示法流程图表示法常用图例3.2.2算法的表示求三个数最大值问题的流程图表示2.N-S图描述灵活的流线是程序中隐藏错误的祸根。针对这一弊病,1973年美国学者I.Nassi和B.Shneiderman提出了一种无流线的流程图,称为N-S图。N-S图表示法求三个数中最大值问题的N-S图表示常用的流程图符号一.顺序结构顺序结构是一种简单的线性结构,根据流程线所示的方向,各矩形框按顺序执行。如:右图语句的执行顺序为:A→B→CN-S图表示的顺序结构顺序结构流程图二.选择结构选择结构是对给定的条件进行判断,根据判断结果的真假而分别执行不同的框的内容。有两种选择(分支)结构的流程图:(a)的执行顺序为:先判断条件,当条件为真时,执行A,否则执行B。(b)的执行顺序为:先判断条件,当条件为真时,执行A,否则什么也不执行。三.循环结构循环结构是在某个条件为真的情况下,重复执行某个框中的内容。循环结构有两种基本形态:while型循环和do_while型循环。①while型(当型)循环的流程图while型循环的执行顺序为:重复判断条件、如果条件为真则执行A,一但条件为假,则跳出循环。②do-while(直到型)型循环的流程图do_while型循环的执行顺序为:先执行A,再判断条件,若条件为真则重复执行A,一但条件为假,则跳出循环。A被称为循环体,条件被称为循环控制条件。①while型循环的N-S图A被称为循环体,条件被称为循环控制条件。②do-while型循环的N-S图循环结构注意:1、在循环体中,必须对条件要烦判断的值进行修改,使得经过有限次循环后,循环一定能结束。2、while型循环中循环体可能一次都不执行,而do_while型循环则至少执行一次循体。3、do_while型循环可以很方便地转化为while型循环,而while型循环不一定能转化为do_while型循环。伪码是用介于自然语言和计算机语言之间的文字和符号来描述算法,类似一篇短文,它把算法的思想表达清楚。3伪码表示法关系运算关系运算是指对两个运算量之间的大小比较。C语言中提供的关系运算符有:(大于)=(大于或等于)(小于)=(小于或等于)==(等于)!=(不等于)说明:(1)关系运算符的优先级低于纯算术类,高于赋值类。(2)关系运算符的结合方式为自左至右。每个关系运算的操作数可以是任一表达式。例如:a+bc+d应理解为(a+b)(c+d)关系运算(3)关系表达式的值只有两个:关系表达式成立,即为“真”,C语言中以“1”表示;关系表达式不成立,即为“假”,C语言中以“0”表示。例如:对于声明语句:intx=2,y=3;表达式x==y的值为0;表达式xy的值为1。关系运算表达式z=3-1=x+1=y+2中z的值为1。z=2=3=5“算术”优先z=0=5“关系”优先z=1z的值为1“赋值”关系运算注意:1.要说明x在区间[a,b]中,数学中使用表达式a≤x≤b。但C语言中的表达式“a=x=b”的含义与之不同。假设a=0;b=0.5。若x=0.3,则执行a=x=b时先求出“a=x”的值得1,再进行“1=b”得0(假)。因此,为了判断x是否在[a,b]范围内,应写成:a=x&&x=b那么a=x的值为1(真)且x=b的值也为1(真),则整个表达式的值为1(真)。关系运算2.表达式5278在数学上是不允许的,而在C中是允许的。3.由于关系表达式的值是整型数0或1,故也可以将其看成是一种整型表达式。关系运算例如:对于声明语句:intx=2,y=3;表达式x==y的值为0;表达式xy的值为1。表达式z=3-1=x+1=y+2中z的值为1。z=2=3=5“算术”优先z=0=5“关系”优先z=1z的值为1“赋值”关系运算4.字符数据的比较按其ASCII码值进行。例如:’a’0的值为1(真);’A’100的值为0(假)。5.在判定两个浮点数是否相等时,由于存储上的误差,会得出错误的结果。例如:1.0/3.0*3.0==1.0的值为0(假)注:应避免对两个实数表达式作“相等”或“不相等”的判别。因此上式可改写为:fabs(1.0/3.0*3.0-1.0)1e-5逻辑运算C语言有三个逻辑运算符,它们是:&&(逻辑与)||(逻辑或)!(逻辑非)注:在进行判别时则把“非零”作为“真”,把0作为“假”。例如:if(8)printf(“true\n”);逻辑运算&&和||是二元运算符,结合方向为自左至右;!为一元运算符,结合方向为自右至左。&&和||的优先级低于关系运算符,而!的优先级高于关系运算符。&&的优先级高于||。例如:!314=3&&6=33+9&&00||!53||4&&0逻辑运算真值表数据a数据b!a!ba&&ba||b!(a&&b)TTFFTTFTFFTFTTFTTFFTTFFTTFFT0||a==aa||!a==1a||a==a!(a||b)==!a&&!b1&&a==a0&&!a==0a&&a==a!(a&&b)==!a||!b!(!a)==a选择型程序设计if语句(条件选择语句)if语句的三种形式形式一:格式:if(expression)statement执行过程:exprstatement非0=0例:if(xy)printf(“%d”,x);#includestdio.hintmain(){intx,y;printf(Enteraninteger:);scanf(%d,&x);y=x;if(y0)y=-y;printf(\ninteger:%d---absolutevalue:%d\n,x,y);return0;}例求一个数的绝对值数的绝对值【例】从键盘任意输入两个实数,然后按其代数值从小到大输出这两个数。先制定算法的流程图,如图所示,虚线框为if结构。根据流程图写出解决这个问题的程序。/*按升序输出两个数*/#includestdio.hmain(){floata,b,t;scanf(%f%f,&a,&b);if(ab){t=a;a=b;b=t;}printf(%5.2f,%5.2f\n,a,b);}升序输出两个数选择型程序设计if语句(条件选择语句)exprstatement1statement2非0=0形式二:格式:if(expression)statement1elsestatement2执行过程:例:if(xy)max=x;elsemax=y;#includestdio.hintmain(){inta,b;printf(Enterintegera:);scanf(%d,&a);printf(Enterintegerb:);scanf(%d,&b);if(a==b)printf(a==b\n);elseprintf(a!=b\n);return0;}例输入两个数并判断两数是否相等判断相等形式三:格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0执行过程:例:if(salary1000)index=0.4;elseif(salary800)index=0.3;elseif(salary600)index=0.2;elseif(salary400)index=0.1;elseindex=0;#includestdio.hintmain(){charc;printf(Enteracharacter:);c=getchar();if(c0x20)printf(Thecharacterisacontrolcharacter\n);elseif(c='0'&&c='9')printf(Thecharacterisadigit\n);elseif(c='A'&&c='Z')printf(Thecharacterisacapitalletter\n);elseif(c='a'&&c='z')printf(Thecharacterisalowerletter\n);elseprintf(Thecharacterisothercharacter\n);}例判断输入字符种类判断输入字符种类【例】从键盘输入+、-、*、/中的任一个,输出对应的英文单词:plus、minus、mutiply、divide,若输入的不是这四个字符中的任一个,则输出“error”。算法的流程图如图所示,虚线框所示为if_else的规则嵌套:#includestdio.hintmain(){charch;ch=getchar();if(ch=='+')printf(plus\n);elseif(ch=='-')printf(minus\n);elseif(ch=='*')printf(multiply\n);elseif(ch=='/')printf(divide\n);elseprintf(error\n);return0;}运算符号判断例根据百分制分数决定成绩的等级:·80分以上为A级;·70分及以上,80分以下,B级;·60分及以上,70分以
本文标题:第三章程序的流程控制
链接地址:https://www.777doc.com/doc-3225927 .html