




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 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,statement;,no,含有使条件趋假的语句。,举例:,求 s= 1+2+3+4+100,#include void main(void ) int s=0, i=1; while (i=100) s=s+i; /* s+=i; */ i+; printf (“s = %d n”, s) ; ,初始化部分,循环体,条件测试,使条件趋假语句,chp3ex5,do while循环(直到型循环),格式: do statement; while (expression );,流程:,statement;,e?,yes,no,含有使条件趋假的语句。,while循环与do-while循环的区别: while循环先判条件,后执行循环体; do while循环先执行循环体,后判条件。,举例:,求:30!,#include void main(void) float s=1.0; int i=1; do s*=i; i+; while(i=30); printf(“30!=%f”,s); ,初始化。,循环体。,测试条件。,使条件趋假。,chp3ex6,思考题: 用do-while实现s=1+2+100。用while实现30!。, for循环,格式: for (e1; e2; e3 ) statement;,流程:,e1,e2?,yes,statement;,e3,no,举例:,求:s=1+2+3+100,#include void main (void ) int s,i ; for (s=0,i=1;i=100;i+ ) s =s + i; printf (“s= %d” , s) ; ,使e2趋假。,在for循环中,e1、e2、e3都可以省略!,e1省略,s=0,i=1;,e3省略,i+;,初值表达式。,测试表达式。,增值表达式。,循环应用的几个问题,循环的嵌套,概念:在一个循环的循环体内又包含一个完整的循环称为循环 的嵌套。,打印99乘法表。,#include void main (void ) int i,j ; for (i=1 ; i=9 ; i+) for (j=1; j=9 ; j+) printf ( “ %4d “ , i * j ) ; printf (“ n “); ,外层循环,内层循环,说明:,内外层循环采用缩进形式。,while和do- while和for可以 相互嵌套。,执行次数为内层次数和外存 次数的乘积。,chp3ex7,如何打印乘法表的一半?,循环的中断(break)和继续(continue),循环的中断:break语句,概念:循环体中可以加分支,判断是否继续执行循环,break 语句可以提前结束循环。,举例:求:r=110的圆的面积,如圆面积大于100则中断。,for (r=1; r100 ) break; printf ( “ n% f “ , area); ,满足条件,则退出循环。,继续循环:continue语句,continue语句的作用是跳过本次循环剩余的循环体内容,执行 下次循环。,举例:求1100内的偶数和。,s=0; for ( n=1; n=100; n+) if (n%2!=0) continue; s+=n; ,满足条件,跳过循环体,继续循环。,无限循环和空循环,条件为恒真的循环无限循环,while(1) do while(1); for( ; ;),靠条件控制的break语句退出循环。,例:程序等待直到输入字母A。 for ( ; ;) ch= getchar ( ); if ( ch=A) break; ,循环体为空语句的循环空循环,for (i=1 ;i=MAX ; t+) ;,作用:程序延时。,空语句, goto语句,格式: goto Label /* Label: 同一函数内语句前的标号。*/,作用:转移到标号对应的语句上继续执行。,loop: if (i=100 ) sum=sum+i; i+; goto loop; ,循环和分支相互嵌套,输入10个自然数统计其中偶数的个数及偶数值和。,算法框图:,start,定义变量,初始化,循环?,yes,输入,偶数?,yes,统计累加,no,no,输出结果,end,#include void main(void) int i, ix,iCount=0,iSum=0; for(i=1;i=10;i+) scanf(“%dn”, ,循环结构,分支结构,输入负数?,do if(ix=0)printf(“date error”); while(ix=0);,算法的健壮性,注意:结构应完整的包含和被包含。,举例:,求100到200之间的所有素数(只能被1和自身整除的数)。,对于自然数n,判断其是否为素数有以下三种方法:,判断n是否能被从2到n-1范围内的数整除;,判断n是否能被从2到(int)(n/2)范围的数整除;,判断n是否能被从2到(int)sqrt(n)范围的数整除;,程序设计中标志技术的使用,在程序设计中,经常要记录一些状态,作为判断的条件。因此 需要在程序中设置一些标志,通常标志是整型变量。,如:设置变量iFlag用于记录是否世素数, iFlag=1是素数; iFlag=0不是素数。,判断某自然数n是否是素数的算法,s=sqrt(n);,iFlag=1;,i从2循环到s,n%i=0,ye
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 5级考试题及答案
- 2025年广州市花都区狮岭镇芙蓉初级中学教师招聘考试笔试试题(含答案)
- 北京知识产权贯标培训课件
- 2025年佛山市南海区狮山镇英才学校教师招聘考试笔试试题(含答案)
- 医务人员营养培训考核试题(附答案)
- 2024贵州省社区《网格员》备考题汇编(含答案)
- 药品及医疗器械冷链操作培训试题测试题库含答案
- 导游业务综合测试题(含答案)
- 2025年XX市妇联普法知识竞赛题库及答案
- 2025年二级注册结构工程师模拟题和答案分析
- 读书分享读书交流会《战争与和平》课件
- 2023年浙江嘉兴嘉善事业单位招聘笔试参考题库(共500题)答案详解版
- 2022福建水投集团云霄水务有限公司招聘试题及答案解析
- 鼎捷T100-V1.0-总账管理用户手册-简体
- 全域土地综合整治项目实施方案
- 常见心律失常的诊断和处理
- 台钻作业指导书份
- RBA社会责任商业联盟准则(管理手册+程序+记录+培训)
- 男性乳房发育课件
- 润新控制阀说明书
- 初中班会课:开学第一课《清澈的爱,只为中国》(课件)
评论
0/150
提交评论