《C语言分支结构.pptx》由会员分享,可在线阅读,更多相关《C语言分支结构.pptx(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1(1 1)带序号的自然语言描述)带序号的自然语言描述 (易懂但不直观,不严格)(易懂但不直观,不严格)(2)流程图:灵活、自由、形象、直观,可表示任何算法流程图:灵活、自由、形象、直观,可表示任何算法 输入/输出处理判断开始/结束连接符数据流(3 3)N-SN-S图(盒图):完全去掉了带箭头的流程线,算法的所有处理步骤图(盒图):完全去掉了带箭头的流程线,算法的所有处理步骤 都写在一个大矩形框里(描述简单,符合结构化的思想)都写在一个大矩形框里(描述简单,符合结构化的思想)(4 4)伪代码:用介于自然语言和计算机语言之间的文字及符号来描述算法)伪代码:用介于自然语言和计算机语言之间的文字及符
2、号来描述算法 (方便、易懂、便于向计算机语言过渡)(方便、易懂、便于向计算机语言过渡)AAPAPPTFAB算法的表示算法的表示B第1页/共31页2例例4 41 1 求求1234512345分析:122;236;6424;245120 设置p为被乘数,存放结果;i为乘数,存放每个数据;S1S1:使:使p=1;p=1;S2S2:使:使i=1;i=1;S3S3:p pi ip;p;S4S4:i+1=ii+1=iS5S5:若:若i=5i=5,执行,执行S3S3;否则算法结束。否则算法结束。语言描述:语言描述:首先设置两个变量并对其初始化,其中首先设置两个变量并对其初始化,其中p p为为结果变量,赋初值
3、为结果变量,赋初值为1 1;i i为数据变量,赋初值为为数据变量,赋初值为1 1;计算计算p pi i,将结果放入,将结果放入p p中中,p,p代表前代表前i i项连乘积项连乘积;然后使然后使i i在原来基础上加在原来基础上加1 1;对;对i i进行判断,如果进行判断,如果i=5ii;1=i;S2S2:若:若gi=80gi=80,则打印,则打印nini和和gigi,否则不打印,否则不打印;S3S3:i+1=i;i+1=i;S4S4:若:若i=50ip1=nP+n=pn+1=nni;1=i;S2S2:输入:输入nini,gigi;S2S2:若:若gi=80gi=80,则打印,则打印nini和和g
4、igi,否则不打印,否则不打印;S3S3:i+1=i;i+1=i;S4S4:若:若i=50ii输入ni gigi 80打印ni,gii+1=ii50结束YNNY算法的流程图描述算法的流程图描述第6页/共31页7N-SN-S图(盒图):完全去掉了带箭头的流程线,算法的所有图(盒图):完全去掉了带箭头的流程线,算法的所有 处理步骤,都写在一个大矩形框里处理步骤,都写在一个大矩形框里AAPAPPTFABx0y=2y=1成立不成立p+n=pN=N+1当ni直到i50时算法的算法的N-S图描述图描述B第7页/共31页8伪代码:用介于自然语言和计算机语言之间的文字及符号来描述算法伪代码:用介于自然语言和计
5、算机语言之间的文字及符号来描述算法 (方便、易懂、便于向计算机语言过渡)(方便、易懂、便于向计算机语言过渡)基本结构:begin 初始化;执行语句1;执行语句n;end 可以写文字,也可以写简易代码算法的伪代码描述算法的伪代码描述第8页/共31页94.2 C语言的语句C语句指令语句非指令语句流程控制语句表达式语句数据定义语句(int a;)编译预处理宏定义(#define)文件包含(#include)条件编译(#ifdef#else#endif)赋值语句(i=1;)函数调用语句(putchar(c);)逗号语句(+a,+b;)空语句(;)判断语句(if,switch)循环语句(for,whil
6、e,dowhile)转移控制语句(break;continue,return;goto)复合语句(由一对花括号括起来的一组语句,如:int a;a=1;printf(“%d”,a);)第9页/共31页10形式二:u格式:if(expression)语句组1;else 语句组2;u执行过程:if语句的三种形式形式一:u格式:if(expression)语句组1;u执行过程:exprstatement非0=0例:if(xy)printf(“%d”,x);exprstatement1statement2非0=0例:if(xy)max=x;else max=y;(1)if语句中的“表达式”必须用“(”
7、和“)”括起来。(2)else子句是if语句的一部分,必须与if配对使用,不能单独使用。(3)当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号)。例:if(xy)printf(“最大值为:”);printf(“%dn”,x);else printf(“最大值为:”);printf(“%dn”,y);4.3 if 语句第10页/共31页11#include main()int x,y;printf(Enter an integer:);scanf(%d,&x);y=x;if(yabsolute value:%dn,x,y);例4-7 求一个数的绝对值运行:E
8、nter an integer:-12 integer:-12-absolute value:12运行:Enter an integer:12 integer:12-absolute value:12第11页/共31页12#include main()int a,b;printf(Enter integer a:);scanf(%d,&a);printf(Enter integer b:);scanf(%d,&b);if(a=b)printf(a=bn);else printf(a!=bn);例 2 输入两个整数并判断两数相等否运行:Enter integer a:12 Enter integ
9、er b:12 a=b 运行:Enter integer a:12 Enter integer b:9 a!=b 第12页/共31页13expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0(1 1)ifif语句允许嵌套:语句允许嵌套:所谓所谓ifif语句的嵌套是指,在语句的嵌套是指,在“语句组语句组1 1”或或 “语句组语句组2 2”中又包含有中又包含有ifif语句的情况。语句的情况。(2 2)ifif语句嵌套时,语句嵌套时,elseelse子句与子句与ifif的的 匹配原则匹配原则:与在它上面、距它最近、且尚未匹配的:
10、与在它上面、距它最近、且尚未匹配的ifif配对。书写时注意形成层次;配对。书写时注意形成层次;(3 3)为明确匹配关系,避免匹配错误,)为明确匹配关系,避免匹配错误,强烈建议强烈建议:将内嵌的:将内嵌的ifif语句,一律用花括号括起来。语句,一律用花括号括起来。形式三:u格式:if(expr1)语句组1;else if(expr2)语句组2;else if(expr3)语句组3;else 语句组n;u 执行过程:第13页/共31页14else总是和它上面离它最近的未配对的if配对if()if()if()else.else.else.例:if(salary1000)index=0.4;else
11、if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;if else 配对原则例:if(salary1000)index=0.4;else if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;第14页/共31页15例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);修改:if(a=b)
12、if(b=c)printf(“a=b=c”);else printf(“a!=b”);实现if else 正确配对方法:加 输入a=1,b=1,c=3结果输出为:a!=b第15页/共31页16如:if(a=b&x=y)printf(“a=b,x=y”);if(3)printf(“OK”);if(a)printf(“%d”,a);说明:u if后面的表达式类型任意u if.else相匹配例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else x+;y+;printf(“%d,%dn”,x,y);Co
13、mpile Error!例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else x+;y+;printf(“%d,%dn”,x,y);第16页/共31页17if语句嵌套:l一般形式:if(expr1)if(expr2)statement1 else statement2else if(expr3)statement3 else statement4内嵌if内嵌ifif(expr1)if(expr2)statement1 else statement2内嵌ifif(expr1)if(expr2)st
14、atement1else statement3 内嵌ifif(expr1)statement1else if(expr3)statement3 else statement4else中内嵌if第17页/共31页18#include main()char c;printf(Enter a character:);c=getchar();if(c=0&c=A&c=a&c=z)printf(The character is a lower lettern);else printf(The character is other charactern);例4-8 判断输入字符种类运行:Enter a c
15、haracter:The character is a control character运行:Enter a character:8 The character is a digit运行:Enter a character:D The character is a capital letter运行:Enter a character:h The character is a lower letter运行:Enter a character:F1 The character is other character第18页/共31页19例4-9 考虑下面程序输出结果:main()int x=100
16、,a=10,b=20;int v1=5,v2=0;if(a b)if(b!=15)if(!v1)x=1;else if(v2)x=10;x=-1;printf(“%d”,x);结果:-1第19页/共31页20课堂练习课堂练习1 1阅读下列程序,回答问题:#include void main()int a,b,m,n;scanf(“%d,%d”,&a,&b);m=1;n=1;if(a0)m=m+n;if(ab)n=2*m;else if(a=b)n=5;else n=m+1;printf(“m=%d,n=%dn”,m,n);问:(1)当输入为:1,2时,程序的运行结果是什么?(2)当输入为:1,
17、0时,程序的运行结果是什么?答:(1)当输入为:1,2时,m=1 n=2(2)当输入为:1,0时,m=2 n=3第20页/共31页21switch(表达式)case E1:语句组 1;case E2:语句组 2;.case En:语句组 n;default:语句组;v执行过程:switch表达式语句组1 语句组2语句组n 语句组.E 1E 2Endefaultcase switch(表达式)case E1:语句组 1;break;case E2:语句组 2;break;.case En:语句组 n;break;default:语句组;break;4.4 switch语句第21页/共31页22v
18、说明:lE1,E2,En是常量表达式,且值必须互不相同lcase后可包含多个可执行语句,且不必加 l多个case可共用一组执行语句l语句标号作用,必须用break跳出l如果无break,找到入口后,将继续执行下去,不再进行判断;如:case A:case B:case C:printf(“score60n”);break;.如:case A:printf(“score90n”);printf(“good!n”);case B:case C:printf(“score60n”);.第22页/共31页23例4-11 switch(score)case 5:printf(“Very good!”);
19、case 4:printf(“Good!”);case 3:printf(“Pass!”);case 2:printf(“Fail!”);default :printf(“data error!”);运行结果:score为5时,输出:Very good!Good!Pass!Fail!data error!例4-11 switch(score)case 5:printf(“Very good!”);break;case 4:printf(“Good!”);break;case 3:printf(“Pass!”);break;case 2:printf(“Fail!”);break;default
20、 :printf(“data error!”);运行结果:score为5时,输出:Very good!第23页/共31页24例4-12 void main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“na=%d,b=%d”,a,b);运行结果:a=2,b=1第24页/共31页25案例4.4.1 求一元二次方程ax2+bx+c=0的解(a0)。/*功能:求一元二次方程的解。*/#include math.h
21、main()float a,b,c,disc,x1,x2,p,q;scanf(“%f,%f,%f”,&a,&b,&c);disc=b*b-4*a*c;if (fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);/*求出两个不相等的实根*/x2=(-b-sqrt(disc)/(2*a);printf(x1=%7.2f,x2=%7.2fn,x1,x2);浮点数=1e-6,就认为近似=04.4 选择型程序设计举例第25页/共31页26 else p=-b/(2*a);/*求出两个共轭复根*/q=sqrt(fabs(disc)/(2*a);printf(“x1=%7.2f+%
22、7.2f i n“,p,q);/*输出两个共轭复根*/printf(”x2=%7.2f-%7.2f i n“,p,q);虚数输出:p+q i p-q i,其中这个i是个虚数代表符号,要原样输出,例如:2+3i,2-3i 说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数(例如10-6)。第26页/共31页27案例4.4.2 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;score60
23、,等级为E。main()int score,grade;printf(“Input a score(0100):”);scanf(“%d”,&score);grade=score/10;/*将成绩整除10,转化成switch语句中的case标号*/switch(grade)case 10:case 9:printf(“grade=An”);break;目的:考察数值的十位数是多少?第27页/共31页28 case 8:printf(grade=Bn);break;case 7:printf(grade=Cn);break;case 6:printf(grade=Dn);break;case 5
24、:case 4:case 3:case 2:case 1:case 0:printf(“grade=En”);break;default:printf(“The score is out of range!n”);程序运行情况如下:Input a score(0100):85grade=B第28页/共31页29课堂练习课堂练习根据给出的年份和月份判断天数,并输出。例如:2003年9月多少天?第29页/共31页30#include void main()int y,m,d;printf(please input a year and a month:);scanf(“%d,%d”,&y,&m);if(m=1|m=3|m=5|m=7|m=8|m=10|m=12)d=31;else if(m=4|m=6|m=9|m=11)d=30;else if(m=2)if(y%4=0&y%100!=0|y%400=0)d=29;else d=28;else d=-1;if(d=-1)printf(error the month);else printf(%d year%d month%d day,y,m,d);第30页/共31页31感谢您的欣赏!第31页/共31页