收藏 分享(赏)

C语言程序设计第三章 C语言的基本控制结构.ppt

上传人:myw993772 文档编号:6910503 上传时间:2019-04-27 格式:PPT 页数:38 大小:2.31MB
下载 相关 举报
C语言程序设计第三章 C语言的基本控制结构.ppt_第1页
第1页 / 共38页
C语言程序设计第三章 C语言的基本控制结构.ppt_第2页
第2页 / 共38页
C语言程序设计第三章 C语言的基本控制结构.ppt_第3页
第3页 / 共38页
C语言程序设计第三章 C语言的基本控制结构.ppt_第4页
第4页 / 共38页
C语言程序设计第三章 C语言的基本控制结构.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、第三章 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 证明:只要三种控制结构就能表达用 一个入口和一个出口框图所能表达的任何程序逻辑。

2、,三种控制结构如下:,顺序结构Sequence,算法描述:f;g;,框图:,f;,g;,入口,出口,选择结构Selection,算法描述:if(e)f;elseg;,框图:,e?,yes,f;,no,g;,入口,出口,循环结构Repetition,当型循环,while c is true do f,c?,f,YES,NO,直到循环,do funtil c is false,f,c?,YES,NO,三种控制结构有如下共同的特点:,一个入口和一个出口; 无死语句; 无死循环。,入口,出口,如何构造条件 ?,复合语句,概念:C语言可以用 包括一系列的语句。一对 所包含的内 容称为一个复合语句。其中可

3、以包含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

4、的值为1*/,逻辑运算,逻辑运算运算时判断对象真假的运算。运算对象非0代表逻辑 真,是0代表逻辑假。也就是说任何类型的量都有逻辑值。逻辑运 算得到整型值。运算结果为真时,得到整型值1,运算结果为假时, 得到整型值0。,其中,!运算是单目运算。,逻辑运算演示,复杂逻辑关系的表示,在实际应用中,经常会遇到描述复杂的关系。如:判断 x是否 大于等于5或小于3。此类关系的描述在程序设计中会大量使用。,0,3,5,x=5,0,-2,3,-2x3 ? x=4,-2x&x3,表示数值关系的原则: 开放区间用或;闭合区间用与。,思考题,判断是否在一、三象限的表达式。,判断是否在如图圆环内的表达式。,sqrt(

5、x),代表对x开平方。,ch为字符变量,判断ch是否为字母的表达式。,(ch=a&ch=A&ch=Z),不是字母的表达式?,运算的优先级,C 语言允许所有基本类型的量参加同一表达式的运算,也允许 所有类型的运算符出现在一个表达式中。因此,表达式值的类型如 何确定,运算的先后顺序如何确定,必须通过一套规则解决。,为了便于调整优先级,设置()为最高优先级。相同优先级存 在一个顺序称为结合顺序,结合顺序有从右向左或从左向右。,运算优先级,第一原则:单目运算的优先级高于双目运算。,第二原则:,算术运算,关系运算,逻辑运算,赋值运算,表达式优先级举例说明:,+a-bc+d&a=b*34,注意:在无法确定

6、优先级 时,加()区分。简化表 达式。,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 的

7、三种结构。,由标准的分支结构可以演化成单分支、多分支结构。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;elsestat2;,语句或复合语句。,流程图:,e?,yes,stat1;,stat2;

8、,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;elsestatn;,框图:,e1?,y,stat1;,n,e2?,y,stat2;,出口,n,en-1?,y,statn-1;,n,statn;,n-1个条件,满足某个条件,执行对应的语句,然后到出口。,if else if结构举例:,征税问题: 1000以下税率为3%10002000税率为4

9、%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;elsestat2;,在stat1或stat2中又含有if结构: if(e2)stat3; els

10、estat4; 称为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(

11、“%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条以后的语句。,

12、如果不相等,则执行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流程。

13、,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: pri

14、ntf(“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; elseiMax=b;,两种多分支,if-else if结构适用于连续不同区间的分支。if (a=90) printf( “A”);else if (a=80) printf(“B”);else if (a=70) printf(“C”);else if (a

15、=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)st

16、atement;,表达式:值非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

17、 );,流程:,statement;,e?,yes,no,含有使条件趋假的语句。,while循环与do-while循环的区别: while循环先判条件,后执行循环体; do while循环先执行循环体,后判条件。,举例:,求:30!,#include void main(void) float s=1.0;int i=1;dos*=i;i+; while(i=30);printf(“30!=%f”,s); ,初始化。,循环体。,测试条件。,使条件趋假。,chp3ex6,思考题: 用do-while实现s=1+2+100。用while实现30!。, for循环,格式: for (e1; e2;

18、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 v

19、oid 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的圆的面

20、积,如圆面积大于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) dowhile(1); for( ; ;),靠条件控制的break语句退出循环。,例:程序等待直到输入

21、字母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,输出结

22、果,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

23、(n)范围的数整除;,程序设计中标志技术的使用,在程序设计中,经常要记录一些状态,作为判断的条件。因此 需要在程序中设置一些标志,通常标志是整型变量。,如:设置变量iFlag用于记录是否世素数,iFlag=1是素数;iFlag=0不是素数。,判断某自然数n是否是素数的算法,s=sqrt(n);,iFlag=1;,i从2循环到s,n%i=0,yes,iFlag=0; break;,no,继续循环 直到退出,iFlag=0?,程序如下:,#include #include void main(void) int n, j, s, iFlag;for(n=101;n200;n+=2)s=sqrt(n

24、);iFlag=1;for(j=2; j=s; j+)if(n%j=0) iFlag=0;break;if(iFlag)printf(“n%d”,n); ,0不是素数;1是素数。,枚举所有数,构造,测试条件,假定n是素数。,如果n能被2到s的任意数整除,设标志退出循环。,如果n是素数,输出n。,chp3ex8,求水仙花数(条件:三位数的个、十、百位的方和等于该数。153=13 +53 +33 )。,n为枚举变量,枚举初值 100,枚举终值999。,构造条件:取出n的个、十、百位数。,测试是否满足条件,满足条件输出n。,#include void main(void) int n, a, b,

25、c;for(n=100 ; n=999 ; n+)a=n/100;b=n%100/10;c=n%10;if(a*a*a+b*b*b+c*c*c=n)printf(“n%d”,n); ,枚举所有三位数,构造条件,测试条件,取n的百位a、十位b、个位c。,chp3ex9,思考题:,36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块。要一 次搬完。问:男、女、小孩要多少?,“百鸡百钱”问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡 雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?,找出1000以内的完数,所谓完数是指该数的各因子之和等于 该数,如6=1+2+3。,证明6到200以内的数,符合哥德巴赫猜想(一个大于6的偶 数,可以分解成两个质数之和)。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报