资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 C语言的基本控制结构,问题,#include #include void main(void) float a,b,c,x1,x2; scanf(“%f,%f,%f”, ,b*b-4ac0?,一元二次方程根求解算法描述,b2-4ac=0?,yes,求等根,no,b2-4ac0?,yes,求实根,no,求复根,问题:如何构造条件? 如何根据条件实现不同算法?,3.1 程序的三种控制结构,结构化程序设计是软件设计的第三次革命。结构化程序设计的 基础是采用三种程序的控制结构。,1966年BOHM &Jacopini 证明:只要三种控制结构就能表达用 一个入口和一个出口框图所能表达的任何程序逻辑。,三种控制结构如下:,顺序结构Sequence,算法描述: f; g;,框图:,f;,g;,入口,出口,选择结构Selection,算法描述: if(e) f; else g;,框图:,e?,yes,f;,no,g;,入口,出口,循环结构Repetition,当型循环,while c is true do f,c?,f,YES,NO,直到循环,do f until c is false,f,c?,YES,NO,三种控制结构有如下共同的特点:,一个入口和一个出口; 无死语句; 无死循环。,入口,出口,如何构造条件 ?,复合语句,概念:C语言可以用 包括一系列的语句。一对 所包含的内 容称为一个复合语句。其中可以包含0到多条C语言语句。,#include void main (void) int a,b; scanf(“%d,%d”, ,复合语句,复合语句,复合语句可以嵌套,凡是可以出现单一语句的地方都可以使用复合语句。,复合语句的作用:,作为分支和循环的块。,作为标识符的作用域。,交换算法演示,3.2 关系运算和逻辑运算,关系运算,关系运算是比较两个表达式值的数值相互关系的运算。,关系运算规则:参加运算的表达式的从左到右按关系运算符提 供的关系进行比较,满足关系得到整型值1 , 不满足关系得到整型 值0。,int a=1,b=3,c,d; c=ab ;/*c的值为0*/ d=a+2=b+3;/*d的值为1*/,逻辑运算,逻辑运算运算时判断对象真假的运算。运算对象非0代表逻辑 真,是0代表逻辑假。也就是说任何类型的量都有逻辑值。逻辑运 算得到整型值。运算结果为真时,得到整型值1,运算结果为假时, 得到整型值0。,其中,!运算是单目运算。,逻辑运算演示,复杂逻辑关系的表示,在实际应用中,经常会遇到描述复杂的关系。如:判断 x是否 大于等于5或小于3。此类关系的描述在程序设计中会大量使用。,0,3,5,x=5,0,-2,3,-2x3 ? x=4,-2x&x3,表示数值关系的原则: 开放区间用或; 闭合区间用与。,思考题,判断是否在一、三象限的表达式。,判断是否在如图圆环内的表达式。,sqrt(x),代表对x开平方。,ch为字符变量,判断ch是否为字母的表达式。,(ch=a&ch=A&ch=Z),不是字母的表达式?,运算的优先级,C 语言允许所有基本类型的量参加同一表达式的运算,也允许 所有类型的运算符出现在一个表达式中。因此,表达式值的类型如 何确定,运算的先后顺序如何确定,必须通过一套规则解决。,为了便于调整优先级,设置()为最高优先级。相同优先级存 在一个顺序称为结合顺序,结合顺序有从右向左或从左向右。,运算优先级,第一原则:单目运算的优先级高于双目运算。,第二原则:,算术运算,关系运算,逻辑运算,赋值运算,表达式优先级举例说明:,+a-bc+d&a=b*34,注意:在无法确定优先级 时,加()区分。简化表 达式。,c=b*=a+2,c=(b*=(a+2),优先级总表,优先级特例,自加、自减运算优先级遵循原则: 前置:先运算后引用; 后置:先引用后运算。,#include void main(void) int a=3,b; b=a+a+; printf(“b=%d”,b); b=+a+(+a); printf(“b=%d”,b); ,chp3ex0,在逻辑运算中,如果逻辑值能确定,则不需在进行运算。,int a=0,b=0 +a | b+; /* b的值?*/ a=0; a&+b;/*b的值?*/,3.3 分支结构(选择结构Selection),if 及 if-else 的三种结构。,由标准的分支结构可以演化成单分支、多分支结构。C语言的分 支语句有if 、if else、switch三种。,if语句,格式: if(expression)statement;,语句,表达式,非0为yes,0为no。,语句,可以是复合语句。,流程图:,e?,statement;,yes,no,举例:,#include void main(void) char ch; ch=getchar( ); if(ch=a ,chp3exf, if else 结构,格式: if(expression) stat1; else stat2;,语句或复合语句。,流程图:,e?,yes,stat1;,stat2;,no,入口,出口,举例:输出| x |。,#include main ( ) int x ; scanf ( “%d” , , if else if结构(多分支),格式: if(e1) stat1; else if(e2) stat2; else if(e3) stat3; else if(en-1) statn-1; else statn;,框图:,e1?,y,stat1;,n,e2?,y,stat2;,出口,n,en-1?,y,statn-1;,n,statn;,n-1个条件,满足某个条件,执行对应的语句,然后到出口。,if else if结构举例:,征税问题: 1000以下税率为3% 10002000税率为4% 20003000税率为5% 3000以上税率6% 输入收入求应缴税款。,#include void main(void) float x ,rate; scanf(“%f ”, ,3/100?,输入一个分数,将百分制转化为五分制。 90分以下 打印 A 80-90 打印 B 70-80 打印 C 60-70 打印 D 60 以下 打印 E,#include void main(void) int a; scanf (“%d”, ,chp3ex1,if语句的嵌套,对于如下的结构: if(e1) stat1; else stat2;,在stat1或stat2中又含有if结构: if(e2) stat3; else stat4; 称为if结构的嵌套。各种if结构都可以嵌套。,如求符号函数: -1 (x0),#include void main ( void) int x,y ; scanf (“%d” , ,外层,内层,在外层else语句中,含有一个if结构。,说明:,书写采取缩进形式, 便于区分。,内层缩进。,else与最近的if 相匹 配,从内到外。,y=-1; if (x!=0) if (x0) y=1; else y=0;,结果?,举例:求一元二次方程ax2+bx+c=0的根。,#include #include void main(void) float a,b,c,d,e,x1,x2; scanf(“%f,%f,%f”, ,外层,内 层,求相等实根。,求不等实根。,求共扼复根。,chp3ex2,switch语句(多分支结构),格式: switch (expression) case 常量表达式1: statement 1; case 常量表达式2: statement 2; case 常量表达式n-1: statement n-1; default : statement n; ,只能是整型或字符型表达式。,整型字符型常量表达式。 表达式的值不能相等。,流程:,先求expression的值。,依次比较expression和各常量表达式的值。,如果和第i个常量表达式相等,则执行第i条以后的语句。,如果不相等,则执行default以后的语句。,语句标号的概念:,#include void main(void) char grade; grade=getchar( ); switch(grade) case A: printf (“90100n”); case B: printf (“8089n); case C: printf (“7079n”); case D: printf (“60 69n”); case E: printf (“60n”); default : printf (“errorn”); ,chp3ex3,语句标号。,break语句:,格式: break;,作用:中断switch流程。,break; break; break; break; break;,chp3ex4,例:输出五分制对应的百分制范围。,#include void main(void) char chGrad; chGrad=getchar( ); switch(chGrad) case a: case A: printf(“90100n”); break; case b: case B: printf(“8089n”); break; case c: case C: printf(“7079n”); break; case d: case D: printf(“6069n”); break; case e: case E: printf(“60n”); default : printf(“Data Error!n”); ,多个标号可以共用相同的语句。,default语句可以省略。,分支结构小结,if构成的三种分支结构 单分支:如果ab,则交换a、b的值。 if(ab) temp=a; a=b; b=temp; 标准二分支:求a和b的最大值。 if(a=b) iMax=a; else iMax=b;,两种多分支,if-else if结构适用于连续不同区间的分支。 if (a=90) printf( “A”); else if (a=80) printf(“B”); else if (a=70) printf(“C”); else if (a=60) printf(“D”); else printf( “E”);,switch 结构适用于离散值产生的分支,3.4 循环结构,程序经常会重复执行某些相同的操作,如: 求:s=1+2+3+4+100,算法描述: s=0;i=1; s+=i; i+; 判断i是否小于等于100 如果i小于等于100,重复; 否则,结束。,此类根据某个条件重复执行相同算法的结构,称为循环。,初始化部分。,循环体。含有时条件趋假的语句。,循环的条件。 循环应在有限次完成。,C 语言提供了三类实现循环的语句: while, do while,for,while 循环(当型循环),格式: while(expression) statement;,表达式:值非0,表示满足条件;值为0 代表不满足条件。,语句(复合语句),重复执行部分(循环体)。,流程:,e?,yes
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号