您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C语言的基本控制结构
Chapter3ControlFlowHefeiUniversityofTechnology第三章C语言的基本控制结构Chapter3ControlFlowChapter3ControlFlowHefeiUniversityofTechnology问题#includestdio.h#includemath.hvoidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}b*b-4ac0?Chapter3ControlFlowHefeiUniversityofTechnology一元二次方程根求解算法描述b2-4ac=0?yes求等根nob2-4ac0?yes求实根no求复根问题:如何构造条件?如何根据条件实现不同算法?Chapter3ControlFlowHefeiUniversityofTechnology3.1程序的三种控制结构结构化程序设计是软件设计的第三次革命。结构化程序设计的基础是采用三种程序的控制结构。1966年BÖHM&Jacopini证明:只要三种控制结构就能表达用一个入口和一个出口框图所能表达的任何程序逻辑。三种控制结构如下:⒈顺序结构Sequence算法描述:f;g;框图:f;g;⒉选择结构Selection(分支结构)算法描述:if(e)f;elseg;框图:e?yesf;nog;Chapter3ControlFlowHefeiUniversityofTechnology⒊循环结构Repetition⑴当型循环whilecistruedofc?fYESNO⑵直到循环dofuntilcisfalsefc?YESNO三种控制结构有如下共同的特点:一个入口和一个出口;无死语句;无死循环。如何构造条件?Chapter3ControlFlowHefeiUniversityofTechnology⒋复合语句CompoundStatement概念:C语言可以用{}包括一系列的语句。一对{}所包含的内容称为一个复合语句。其中可以含有0到多条C语言语句。#includestdio.hvoidmain(void){inta,b;scanf(“%d,%d”,&a,&b);{inttemp;temp=a;a=b;b=temp;}printf(“%d,%d”,a,b);}复合语句复合语句复合语句可以嵌套凡是可以出现单一语句的地方都可以使用复合语句。复合语句的作用:⒈作为分支和循环的块。⒉作为标识符的作用域。交换算法演示Chapter3ControlFlowHefeiUniversityofTechnology3.2关系运算和逻辑运算⒈关系运算(RelationalOperator)关系运算是比较两个表达式的数值相互关系的运算。运算符比较的关系实例大于ab=大于等于a=b小于21=小于等于c=d==等于1==c!=不等于1!=3关系运算规则:参加运算的表达式的从左到右按关系运算符提供的关系进行比较,满足关系得到整型值1,不满足关系得到整型值0。inta=1,b=3,c,d;c=ab;d=a+2=b+3;Chapter3ControlFlowHefeiUniversityofTechnology⒉逻辑运算(LogicalOperator)逻辑运算运算时判断对象真、假的运算。C语言没有提供逻辑类型。任何类型的值都可以表示逻辑状态,如下表:表达式的值所对应的逻辑值表达式的值表示的逻辑关系非0真true0假false运算对象非0代表逻辑真,是0代表逻辑假。也就是说任何类型的量都有逻辑值。逻辑运算的结果用整型值表示。运算结果为真时,得到整型值1;运算结果为假时,得到整型值0。inta=2,b=0;aba+bChapter3ControlFlowHefeiUniversityofTechnologyC语言的逻辑运算运算符逻辑关系举例&&逻辑与a2&&a3||逻辑或s2||s6!逻辑非!a其中,!运算是单目运算。逻辑运算演示Chapter3ControlFlowHefeiUniversityofTechnology⒊复杂逻辑关系的表示在实际应用中,经常会遇到描述复杂的关系。如:判断x是否大于等于5或小于3。此类关系的描述在程序设计中会大量使用。035x3||x=50-23-2x3?x=4-2x&&x3表示数值关系的原则:开放区间用或;闭合区间用与。思考题⒈判断是否在一、三象限的表达式。⒉判断是否在如图圆环内的表达式。sqrt(x),代表对x开平方。⒊ch为字符变量,判断ch是否为字母的表达式。(ch=’a’&&ch=‘z’)||(ch=’A’&&ch=‘Z’)不是字母的表达式?Chapter3ControlFlowHefeiUniversityofTechnology⒋运算的优先级C语言允许所有基本类型的量参加同一表达式的运算,也允许所有类型的运算符出现在一个表达式中。因此,表达式值的类型如何确定,运算的先后顺序如何确定,必须通过一套规则解决。为了便于调整优先级,设置()为最高优先级。相同优先级存在一个顺序称为结合顺序,结合顺序有从右向左或从左向右。⑴运算优先级第一原则:单目运算的优先级高于双目运算。第二原则:算术运算关系运算逻辑运算赋值运算表达式优先级举例说明:++a-bc+d&&a=b*34①②③④⑤⑥⑦注意:在无法确定优先级时,加()区分。简化表达式。c=b*=a+2c=(b*=(a+2))Chapter3ControlFlowHefeiUniversityofTechnology级别运算符结合顺序1()[]-.从左向右2!-++--(type)sizeof*&~从右向左3*/%从左向右4+-从左向右5(移位运算)从左向右6==从左向右7==!=从左向右8&(位与运算)从左向右9^(位异或运算)从左向右10|(位或运算)从左向右11&&从左向右12||从左向右13?:从右向左14=op=从右向左15,从左向右优先级总表Chapter3ControlFlowHefeiUniversityofTechnology优先级特例⒈自加、自减运算优先级遵循原则:前置:先运算后引用;后置:先引用后运算。#includestdio.hvoidmain(void){inta=3,b;b=a+++a++;printf(“b=%d”,b);b=++a+(++a);printf(“b=%d”,b);}CHAP3EX0⒉在逻辑运算中,如果逻辑值能够确定,则不再进行运算。inta=0,b=0++a||++b;printf(“a=%d\nb=%d”,a,b);a=0;a&&++b;/*b的值?*/++CHAP3EX1Chapter3ControlFlowHefeiUniversityofTechnology3.3分支结构(选择结构Selection)⒈if及if-else的三种结构。由标准的分支结构可以演化成单分支、多分支结构。C语言的分支语句有if、if–else、switch三种。⑴if语句格式:if(expression)statement;语句表达式,非0为yes,0为no。语句,可以是复合语句。流程图:e?statement;yesno举例:#includestdio.hvoidmain(void){charch;ch=getchar();if(ch=‘a’&&ch=‘z’)ch-=32;putchar(ch);}CHAP3EX2Chapter3ControlFlowHefeiUniversityofTechnology⑵if–else结构格式:if(expression)stat1;elsestat2;语句或复合语句。流程图:e?falsestat2;stat1;true入口出口举例:输出|x|。#includestdio.hvoidmain(void){intx;scanf(“%d”,&x);if(x=0)printf(“%d”,x);elseprintf(“%d”,-x);}Chapter3ControlFlowHefeiUniversityofTechnology⑶if–elseif结构(Muliline)格式:if(e1)stat1;elseif(e2)stat2;elseif(e3)stat3;…elseif(en-1)statn-1;elsestatn;框图:e1?tstat1;fe2?tstat2;出口fen-1?tstatn-1;fstatn;n-1个条件,满足某个条件,执行对应的语句,然后到出口。Chapter3ControlFlowHefeiUniversityofTechnologyifelseif结构举例:征税问题:1000以下税率为3%1000~2000税率为4%2000~3000税率为5%3000以上税率6%输入收入,求应缴税款。#includestdio.hvoidmain(void){floatx,rate;scanf(“%f”,&x);if(x1000)rate=.03;elseif(x2000)rate=.04;elseif(x3000)rate=.05;elserate=.06;printf(“%f”,x*rate);}3/100?Chapter3ControlFlowHefeiUniversityofTechnology⑷if语句的嵌套对于如下的结构:if(e1)stat1;elsestat2;在stat1或stat2中又含有if结构:if(e2)stat3;elsestat4;称为if结构的嵌套。各种if结构都可以嵌套。如求符号函数:-1(x0)y=0(x=0)1(x0)#includestdio.hvoidmain(void){intx,y;scanf(“%d”,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n”,x,y);}外层内层在外层else语句中,含有一个if结构。说明:①书写采取缩进形式,便于区分。内层缩进。②else与最近的if相匹配,从内到外。y=-1;if(x!=0)if(x0)y=1;elsey=0;x==0结果?Chapter3ControlFlowHefeiUniversityofTechnology举例:求一元二次方程ax2+bx+c=0的根。#includestdio.h#includemath.hvoidmain(void){floata,b,c,d,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4.0*a*c;if(fabs(d)1.0e-6){printf(“\nx1=x2=,%f”,-b/(2.0*a));}else{if(d0){printf(“\nx1=%f”,(-b+(float)sqrt(d))/(2.0*a));printf(“\nx2=%f”,(-b-(float)sqrt(d))/(2.0*a));}else{printf(“\nx1=%f+i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));printf(“\nx2=%f-i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));}}}外层内层求相等实根。求不等实根。求共扼复根。CHAP3EX4判断实型量相等或不等用误差的方法。flaota=1.0/*a=1.000001或0.999999*/a==1.0?Chapter3ControlFlowHefeiUniversityofTechnology⒉switch语句(多分支结构)格式:switch(
本文标题:C语言的基本控制结构
链接地址:https://www.777doc.com/doc-3814299 .html