《第03章控制语句PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第03章控制语句PPT讲稿.ppt(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第03章控制章控制语句句第1页,共63页,编辑于2022年,星期日主要内容主要内容控制语句简介ifelse语句 SwitchCase for语句while、dowhile语句break、continue语句 特别的goto语句多重循环 小结第2页,共63页,编辑于2022年,星期日控制语句控制语句控制语句是C语言中非常重要的语句,用来实现结构程序设计中的选择和循环结构。语言主要有八种控制语句。可分成以下三类:(1)选择控制语句:ifelse语句,switchcase语句(2)循环控制语句:for语句,while语句,do while语句(3)转移控制语句:break语句,continue语句
2、,goto语句第3页,共63页,编辑于2022年,星期日3.1ifelse语句语句ifelse语句判定所给的条件是否满足,根据判定的结果选择执行两种操作之一执行。ifelse 语句的三种形式if(表达式)语句if(表达式)语句1else 语句2if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else if(表达式n)语句nelse 语句n+1第4页,共63页,编辑于2022年,星期日形式1:if(表达式)语句功能:这种形式的语句无else部分,它的功能是首先对表达式进行求解,若表达式的值为非0,则执行语句;若表达式的值为0,则该语句不起作用,不执行,而继续
3、执行if语句下面的语句。例如:if(ab)printf(the max is%d,a);当ab为真时,打印输出a的值,否则什么也不执行。3.1 ifelse语句语句三种形式之一三种形式之一exprstatement非0=0第5页,共63页,编辑于2022年,星期日形式2:if(表达式)语句1 else 语句2功能:首先对表达式进行求解,若表达式的值为非0,则执行语句1,否则执行语句2。例如:if(ab)printf(the max is%d,a);else printf(the max is%d,b);当ab为真时,打印输出a的值,否则打印输出b的值。3.1 ifelse语句语句三种形式之二三
4、种形式之二exprstatement1statement2非0=0第6页,共63页,编辑于2022年,星期日形式3:if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else if(表达式n)语句nelse 语句n+13.1 ifelse语句语句三种形式之三三种形式之三expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0第7页,共63页,编辑于2022年,星期日功能:依次判断表达式的值,当出现某个值为非0时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为
5、假,则执行语句n+1。然后继续执行后续程序。前二种形式的ifelse语句一般都用于两个分支的情况。当有多个分支选择时,可采用第3种形式ifelse语句。例如:if(grade=80)printf(A);else if(grade=70)printf(B);else if(grade=60)printf(C);else printf(D);3.1 ifelse语句三种形式之三语句三种形式之三第8页,共63页,编辑于2022年,星期日注意事项:1、在if 后面的表达式,其类型可以是任意的其类型可以是任意的(整形、实型、字符型、指针型),C C语言在判断时只要非语言在判断时只要非0 0,就认为是真,
6、按真处理,只有,就认为是真,按真处理,只有0 0时时才认为是假,按假处理。才认为是假,按假处理。因此,而不仅仅限于逻辑表达式或关系表达式。3.1 ifelse语句语句注意事项注意事项如:if(a=b&x=y)printf(“a=b,x=y”);if(3)printf(“OK”);if(a)printf(“%d”,a);第9页,共63页,编辑于2022年,星期日2、C语句必须在最后出现分号,分号是语句中不可缺少的一部分,因此if和else后面的语句都必须有分号。例如:if(ab)printf(the max is%d,a);else printf(the max is%d,b);3.1 ifel
7、se语句语句注意事项注意事项第10页,共63页,编辑于2022年,星期日3.1 ifelse语句语句注意事项注意事项u语句可以是复合语句u if(x)if(x!=0)if(!x)if(x=0)u在每个else前面有一分号,整个语句结束处有一分号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);Compile Error!第11页,共63页,编辑于20
8、22年,星期日例3.1 接收任意输入的两个实数,按从大到小的顺序输出。程序如下:3.1 ifelse语句举例语句举例第12页,共63页,编辑于2022年,星期日例3.3 要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。在0和9之间的为数字,在A和Z之间为大写字母,在a和z之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,可采用第3种形式的.程序如下:3.1 ifelse语句举例语句举例/*lt03_03.c*/#include void main()char c;printf(Enter a characte
9、r:);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);运行:Enter a character: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 charac
10、ter:h The character is a lower letter运行:Enter a character:F1 The character is other character第13页,共63页,编辑于2022年,星期日If 语句嵌套:在一个if语句中又包含一个或多个if语句。一般形式:if(expr1)if(expr2)statement1 else statement2else if(expr3)statement3 else statement4内嵌if内嵌ifif(expr1)if(expr2)statement1 else statement2内嵌ifif(expr1)if
11、(expr2)statement1else statement3 内嵌ifif(expr1)statement1else if(expr3)statement3 else statement4内嵌if第14页,共63页,编辑于2022年,星期日注意事项:注意事项:if else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对if()if()if()else.else.else.3.1.2ifelse语句嵌套语句嵌套第15页,共63页,编辑于2022年,星期日例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);修改:if(a
12、=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);实现if else 正确配对方法:加 第16页,共63页,编辑于2022年,星期日例 考虑下面程序输出结果:#include void main()int x=100,a=10,b=20;int v1=5,v2=0;if(ab)if(b!=15)if(!v1)x=1;else if(!v2)x=10;x=-1;printf(“%d”,x);/*ifz.c*/结果:-1第17页,共63页,编辑于2022年,星期日例 3.5有一函数如下:y=写一程序,输入x,输出y的值。程序如下:3.1.2ifelse语句
13、语句嵌套注意事项嵌套注意事项x(x 4)2x-1(4 x b)?a:b 它等价于:if(ab)max=a;else max=b;说明:(1)条件运算符是一个三目运算符,即有三个参与运算的量,它是C语言中唯一的一个三目运算符。(2)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(ab)?a:b可以去掉括号而写为 max=ab?a:b,如果有 ab?a:b+1 则它等价于:ab?a:(b+1)。(3)条件运算符?和:是一对运算符,不能分开单独使用。(4)条件运算符的结合方向是自右至左。ab?a:cd?c:d应理解为ab?a:(cd?c:d)这也就是条件表达式嵌套的情
14、形,即其中的表达式3又是一个条件表达式。如果a=2,b=3,c=4,d=5,则条件表达式的值为5条件运算符条件运算符?:?:第20页,共63页,编辑于2022年,星期日(5)条件表达式不能取代一般的if语句,只有当if语句的表达式为“真”和“假”时,都执行赋值语句并且都给同一个变量赋值时才能代替if语句。(6)表达式1的类型可以与表达式2和表达式3的类型不同;如:a?b:c表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。例如:ab?3:3.5此时如果ab,则条件表达式的值为3.5,若ab,值应为3,但是由于3.5为实型数据,比整型的数据类型高,因此,将3转换成实
15、型数据3.0,所以当ab时,条件表达式的值为3.0条件运算符条件运算符?:?:第21页,共63页,编辑于2022年,星期日例3.7 输入一个字符,如果是小写字母,转换成对应的大写字母,其它字符不变。条件运算符条件运算符?:举例?:举例#include void main()char ch;scanf(%c,&ch);ch=(ch=a&ch 60n”);break;.3.2 SwitchCase语句语句第26页,共63页,编辑于2022年,星期日例3.8 求一元二次方程ax2+bx+c=0的根。程序分析:一元二次方程ax2+bx+c=0的求根公式为:x=当a=0时,不是二次方程。当a=0,b=0
16、时,方程无解。当a=0,b0时,方程的解为x=-c/b。当a0时,b2-4ac0 有两个不相等的实根。b2-4ac=0 有两个相等的实根。b2-4ac0 有两个复根。程序如下:3.2 多分支程序举例多分支程序举例第27页,共63页,编辑于2022年,星期日3.2 多分支程序举例多分支程序举例例 3.9写程序,判断某一年是否是闰年。分析:能被4整除但不能被100整除的是闰年。能被4、100、400同时整除的也是闰年。程序如下:例 3.10四则运算求值:判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。程序如下:#include void main()int iyear;p
17、rintf(please input a year:);scanf(%d,&iyear);if(iyear%4=0&iyear%100!=0)|(iyear%400=0)printf(%d is a leap yearn,iyear);else printf(%d not a leap yearn,iyear);例 3.10四则运算求值:判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。程序如下:#include void main()float fa,fb,fs;char cc;printf(input expression:a,+(-,*,/),b:);scanf(
18、%f,%c,%f,&fa,&cc,&fb);switch(cc)case+:printf(%6.4fn,fa+fb);break;case-:printf(%6.4fn,fa-fb);break;case*:printf(%6.4fn,fa*fb);break;case/:printf(%6.4fn,fa/fb);break;default:printf(input errorn);第28页,共63页,编辑于2022年,星期日for循环使用灵活,功能很强,不仅可用来表示循环次数已知的情况,而且也可以用于循环次数不确定只给出循环终止条件的情况。for语句的一般形式:一般形式:执行过程:执行过程:
19、3.3 for语句语句for(expr1;expr2;expr3)循环体语句;expr2循环体假(0)真(非0)forexpr1expr3第29页,共63页,编辑于2022年,星期日例例3.12 编写程序计算编写程序计算1+2+3+100的和。的和。3.3 for语句语句#include void main()int is,ii;is=0;for(ii=1;ii=100;ii+)is=is+ii;printf(the sum is%dn,is);第30页,共63页,编辑于2022年,星期日for循环最简单也就是最容易理解的形式如下:for(for(循环变量赋初值;循环条件;循环变量增值循环变量
20、赋初值;循环条件;循环变量增值)循环体语句;循环体语句;说明:(1)for语句一般形式中的表达式1可以省略,注意省略表达式1 时,其后的分号是不能省略的,省略后的一般形式如下:for(;表达式表达式2;表达式表达式3)没有了表达式1,此时就没有了给循环变量赋初值的操作,一般情况下程序设计者应在for语句之前给循环变量赋初值。例如:ii=1;for(;ii=100;ii+)isum+=ii;printf(“isum=%d”,isum);3.3 for语句语句说明说明1第31页,共63页,编辑于2022年,星期日(2)for语句一般形式中的表达式2也可以省略,注意省略时,其后的分号是不能省略的,省
21、略后的一般形式如下:for(表达式1;表达式3)没有了表达式2,此时就没有了循环判断条件,循环会无止境的执行下去,相当于表达式2始终为真。此时程序设计者可采用我们以后要讲的break语句强制结束循环。例如:for(ii=1;ii+)isum+=ii;printf(“isum=%d”,isum);3.3 for语句语句说明说明2第32页,共63页,编辑于2022年,星期日(3)表达式3也可以省略,省略后的一般形式如下:for(表达式1;表达式2;)此时没有了循环变量增值的操作,为了保证循环能正常结束,一般情况下程序设计者应在循环体内改变循环变量的值。例如:for(ii=1;ii=100;)isu
22、m+=ii;printf(“isum=%d”,isum);3.3 for语句语句说明说明3第33页,共63页,编辑于2022年,星期日(4)表达式1和表达式3可以同时省略,省略后的一般形式如下:for(;表达式2;)此时的for循环相当于我们以后要讲的while循环,程序设计者应在for语句之前给循环变量赋初值,在循环体内改变循环变量的值。3.3 for语句语句说明说明4第34页,共63页,编辑于2022年,星期日(5)表达式)表达式1、表达式、表达式2和表达式和表达式3都可以省略,省略都可以省略,省略后的一般形式如下后的一般形式如下:for(for(;)此时程序设计者应在此时程序设计者应在f
23、orfor语句之前给循环变量赋初值,在循环体内改变循语句之前给循环变量赋初值,在循环体内改变循环变量的值,强制结束循环。环变量的值,强制结束循环。(6)表达式)表达式1和表达式和表达式3也可以是逗号表达式。也可以是逗号表达式。如:如:for(for(i=0,j=100i=0,j=100;i=j;i=j;i+,j-i+,j-)s=s+i+j)s=s+i+j 这这个循环实现的也是个循环实现的也是1+2+3+1+2+3+100100的功能。的功能。(7)表达式)表达式2的值只要非的值只要非0,就执行循环体。,就执行循环体。例如:例如:for(;for(;(c=getchar()!=n(c=getch
24、ar()!=n;);)在表达式在表达式2 2中中不断从终端接收字符赋给变量不断从终端接收字符赋给变量c c,直到输入一个,直到输入一个“换行换行”为止。为止。3.3 for语句语句说明说明5、6、7第35页,共63页,编辑于2022年,星期日3.3 for语句语句例 3.13 在屏幕上输出1到100,每行输出5个。程序如下:例 3.14将输入的一串字符显示在屏幕上,直到输入字符“!”时停止。程序如下:#include void main()int ii;for(ii=1;ii=100;ii+)printf(%d,ii);if(ii%5=0)printf(n);#include void mai
25、n()char cc;printf(please input a string:);for(cc=getchar();cc!=!;cc=getchar()putchar(cc);第36页,共63页,编辑于2022年,星期日3.4.1 While语句语句While语句是专门的语句是专门的“当型当型”循环语句。其一般形式如下:循环语句。其一般形式如下:while(表达式表达式)循环体语句循环体语句功能:功能:先判断表达式,当表达式的值为非0(真)时,就反复执行循环体语句,直到表达式的值为0(假),退出while语句,继续执行while语句后面的语句。3.4 while、dowhile语句语句 第3
26、7页,共63页,编辑于2022年,星期日例例 3.15用用while语句编写程序计算语句编写程序计算1+2+3+100的和。的和。程序如下:程序如下:3.4 while、dowhile语句语句#include void main()int ii,is=0;ii=1;while(ii=100)is=is+ii;ii+;printf(the sum is%dn ,is);第38页,共63页,编辑于2022年,星期日说明:说明:(1)循环体有可能一次也不执行。)循环体有可能一次也不执行。(2)循环体可为简单语句也可为复合语句,若为复合语)循环体可为简单语句也可为复合语句,若为复合语句应该用花括号括起
27、来。句应该用花括号括起来。(3)循环体内应有使表达式的值趋向于)循环体内应有使表达式的值趋向于0(假)的操作,(假)的操作,使得能够退出使得能够退出while循环。循环。例例3.16编程实现显示编程实现显示110的平方。的平方。程序如下:程序如下:3.4 while、dowhile语句语句 第39页,共63页,编辑于2022年,星期日(4)循环表达式可以始终为真,通过在循环体中加)循环表达式可以始终为真,通过在循环体中加break语句语句(关于该语关于该语句,参见句,参见3.5节内容节内容)对循环进行控制。对循环进行控制。例如例例如例3.16也可以用如下的程序实现:也可以用如下的程序实现:3.
28、4 while、dowhile语句语句#include void main()int ii=1;while(1)/*循环表达式始终为真循环表达式始终为真*/printf(%d*%d=%dn,ii,ii,ii*ii);ii+;if(ii 10)break;/*ii10时,时,break语句跳出循环语句跳出循环*/第40页,共63页,编辑于2022年,星期日3.4.2 dowhile语句语句dowhile语句语句用来实现用来实现“直到型直到型”循环。其循环。其一般一般形式形式如下:如下:do 循环体语句;循环体语句;while(表达式表达式);功能:功能:先执行循环体,然后判断表达式的值,若先执行
29、循环体,然后判断表达式的值,若为非为非0(真)时,就反复执行循环体,直到表达式的值(真)时,就反复执行循环体,直到表达式的值为为0(假),退出(假),退出while语句,继续执行语句,继续执行while语句后面语句后面的语句。的语句。3.4 while、dowhile语句语句 第41页,共63页,编辑于2022年,星期日例例3.17 用用dowhile语句编写程序计算语句编写程序计算1+2+3+100的和。的和。程序如下:程序如下:3.4 while、dowhile语句语句#include void main()int ii,is=0;ii=1;do is+=ii;ii+;while(ii=1
30、00);printf(the sum is%d n,is);第42页,共63页,编辑于2022年,星期日说明:说明:至少执行一次循环体。至少执行一次循环体。在在ifif语句,语句,whilewhile语句中,语句中,表达式后面都不加分号,表达式后面都不加分号,而在而在 do-whiledo-while语句的表达式后面则必须加分号。语句的表达式后面则必须加分号。在在dodo和和whilewhile之间的循环体由多个语句组成时,也之间的循环体由多个语句组成时,也必须用必须用括起来组成一个复合语句。括起来组成一个复合语句。dowhiledowhile可转化成可转化成whilewhile结构,但结构,
31、但do-whiledo-while和和whilewhile语句相互替换时,要注意修改循环控制条件。语句相互替换时,要注意修改循环控制条件。3.4 while、dowhile语句语句 第43页,共63页,编辑于2022年,星期日例例3.18 输入若干个职工的工资,直到输入负数结束,输入若干个职工的工资,直到输入负数结束,求工资的总和及平均工资。求工资的总和及平均工资。程序如下:程序如下:3.4 while、dowhile语句举例语句举例#include void main()int inum=0;float fsalary,fsum=0,fave;printf(please input the
32、salary:n);scanf(%f,&fsalary);doinum=inum+1;fsum=fsum+fsalary;scanf(%f,&fsalary);while(fsalary=0);fave=fsum/inum;printf(the sum is%6.2fn,fsum);printf(the average is%6.2fn,fave);第44页,共63页,编辑于2022年,星期日3.5.1break语句语句breakbreak语句的语句的一般形式为一般形式为:break;功能:功能:在分支结构程序设计中已经介绍过用在分支结构程序设计中已经介绍过用breakbreak语句可以使流程
33、跳出语句可以使流程跳出switchswitch结构,继续执行结构,继续执行switchswitch语句下面的一个语句。实际上,语句下面的一个语句。实际上,breakbreak语句还可以语句还可以用来从循环体内中途跳出循环体,即提前结束循环,用来从循环体内中途跳出循环体,即提前结束循环,执行循环下面的语句。执行循环下面的语句。3.5 break、continue语句语句 第45页,共63页,编辑于2022年,星期日 while(表达式表达式1)语句组语句组1 1 if(if(表达式表达式2)break;2)break;语句组语句组2 2 当表达式当表达式1 1成立时,进入循环体执行,若表达式成立
34、时,进入循环体执行,若表达式2 2成立成立时执行时执行breakbreak语句,提前结束循环,即不再继续执语句,提前结束循环,即不再继续执行循环(即使此时表达式行循环(即使此时表达式1 1还成立)。还成立)。3.5 break、continue语句语句 第46页,共63页,编辑于2022年,星期日说明:说明:break语句使用语句使用应该注意的问题应该注意的问题(1)在循环语句中,)在循环语句中,break语句一般都是与语句一般都是与if语句一起使语句一起使用。用。(2)break语句不能用于循环语句和语句不能用于循环语句和switch语句之外的语句之外的任何其它语句中。任何其它语句中。3.5
35、 break、continue语句语句注意注意第47页,共63页,编辑于2022年,星期日例例3.19计算计算1+2+3+100的和,当和大于的和,当和大于2500时时停止。停止。程序如下:程序如下:例例3.20编写程序计算编写程序计算1+2+3+100的和。的和。程序如下程序如下3.5 break、continue语句语句#include void main()int is,ii;is=0;for(ii=1;ii 2500)break;printf(the sum is%dn,is);例例3.20编写程序计算编写程序计算1+2+3+100的和。的和。程序如下程序如下#include void
36、 main()int is,ii;is=0;for(ii=1;ii+)is=is+ii;if(ii=100)break;printf(the sum is%dn,is);第48页,共63页,编辑于2022年,星期日3.5.2continue语句语句continue语句的语句的一般形式一般形式为:为:continue;功能:功能:continue语句是跳过循环体中剩余的语句而强语句是跳过循环体中剩余的语句而强制执行下一次循环。其作用为结束本次循环,即跳过制执行下一次循环。其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否循环体中下面尚未执行的语句,接着进行下一次是否执行循
37、环的判定。执行循环的判定。3.5 break、continue语句语句 第49页,共63页,编辑于2022年,星期日如:如:while(表达式表达式1)语句组语句组1 if(表达式表达式2)continue;语句组语句组2当表达式当表达式1成立时,进入循环体执行语句组成立时,进入循环体执行语句组1,若表达,若表达式式2成立时执行成立时执行continue语句,语句组语句,语句组2就不再执行,就不再执行,而转去判定下一次循环是否执行。而转去判定下一次循环是否执行。说明:说明:continue语句使用语句使用应该注意的问题应该注意的问题 (1)continue语句只能用在循环语句中。语句只能用在循
38、环语句中。(2)一般都是与)一般都是与if语句一起使用。语句一起使用。3.5 break、continue语句语句 第50页,共63页,编辑于2022年,星期日例例3.21把把1100之间的不能被之间的不能被5整除的数输出。整除的数输出。程序如下:3.5 break、continue语句语句#include void main()int ii;for(ii=1;ii=100;ii+)if(ii%5=0)continue;printf(%3d,ii);第51页,共63页,编辑于2022年,星期日goto语句是无条件转移语句。语句是无条件转移语句。goto语句的语句的一般形式一般形式为:为:got
39、o 语句标号语句标号;功能:功能:无条件转向“语句标号”处执行。说明:说明:(1)语句标号是一标识符,它的命名规则与变量名相同。)语句标号是一标识符,它的命名规则与变量名相同。(2)goto 语句可以灵活跳转,它能从多重循环体中一下子语句可以灵活跳转,它能从多重循环体中一下子跳到外面,用不着写很多次的跳到外面,用不着写很多次的break 语句,这个特点使得程语句,这个特点使得程序处理一些异常情况时非常的方便,但是如果不加限制,它序处理一些异常情况时非常的方便,但是如果不加限制,它会破坏结构化设计风格,但实事求是地说,错误是程序员自会破坏结构化设计风格,但实事求是地说,错误是程序员自己造成的,不
40、是己造成的,不是goto 的过错,所以我们主张少用、慎用的过错,所以我们主张少用、慎用goto 语句,而不是禁用语句,而不是禁用。3.6 特别的特别的goto语句语句第52页,共63页,编辑于2022年,星期日循环体内的语句本身还可以是另一个循环语句,因此这样就构成了另一层循环。其中,处于外层的循环称为外循环,处于内层的循环称为内循环,这种一个循环体内又包含另一个完整的循环结构称为循环的嵌套。这种嵌套结构的循环可以有多层,从而构成多重循环。三种循环(whi1e循环、do-whi1e循环和for循环)可以互相嵌套。3.7多重循环多重循环第53页,共63页,编辑于2022年,星期日多重循环的执行过
41、程中,外循环控制变量的值变化得较慢,内循环控制变量的值变化得较快。外循环进行1次,内循环就要完成所有的循环。说明:写多重循环程序时要注意,内外循环的层次要分明,内层循环必须被完整地嵌套在外循环在里面,可以若干个循环嵌套、并列,但绝对不允许循环之间相互交叉。例3.22输出由星号构成的一个5行的直角三角形。程序如下:例3.23编写一个程序,输出如下所示九九乘法表:程序如下:例3.24百马百担问题程序如下:3.7多重循环多重循环第54页,共63页,编辑于2022年,星期日例例3.25任意输入一个自然数任意输入一个自然数n,判断它是否为素数。,判断它是否为素数。算法分析:算法分析:一个自然数n如果只能
42、被1和它本身整除,则该自然数为素数,否则不是素数。程序如下:上面的程序易理解,但效率不高,当自然数in较大时,循环次数较多,可采取一种改进效率的方法。ii从2循环到即可,可以提高循环的效率。程序如下:程序如下:3.7多重循环举例多重循环举例#include void main()int in,ii;scanf(%d,&in);for(ii=2;ii=in)printf(%d is a prime numbern,in);elseprintf(%d is not a prime numbern,in);第55页,共63页,编辑于2022年,星期日#include#include void mai
43、n()int in,ii,ik;scanf(%d,&in);ik=sqrt(in);for(ii=2;ii=ik+1)printf(%d is a prime numbern,in);else printf(%d is not a prime numbern,in);3.7多重循环举例多重循环举例第56页,共63页,编辑于2022年,星期日例例3.26求求Fibonacci数列:数列:1,1,2,3,5,8,的前的前40个数,个数,即11(n=1)1 2 3 4 5 6 7.21(n=2)1 1 2 3 5 8 13 n n-1 n-2 (n=3)程序如下:3.7多重循环举例多重循环举例#in
44、clude void main()long int lif1=1,lif2=1,lif3;int ii;printf(%13ld%13ld,lif1,lif2);for(ii=3;ii=40;ii+)lif3=lif1+lif2;printf(%13ld,lif3);lif1=lif2;lif2=lif3;if(ii%4=0)printf(n);第57页,共63页,编辑于2022年,星期日例例3.27用用/4 11/31/51/7 公式求公式求的近似的近似值,直到最后一项的绝对值小于值,直到最后一项的绝对值小于10-6为止。为止。程序如下:3.7多重循环举例多重循环举例#include#inc
45、lude void main()int it;float fm,fn,fpi;fpi=0;fm=1;fn=1;it=1;while(fabs(fn)=1e-6)fpi=fpi+fn;/*逐项累加到逐项累加到pi中中*/fm=fm+2;/*项分母变化项分母变化*/it=-it;/*项符号变化项符号变化*/fn=it/fm;/*合成完整项合成完整项*/fpi=fpi*4;printf(pi=%12.7f n,fpi);第58页,共63页,编辑于2022年,星期日3.8小结本章主要讲解了控制语句的使用及其功能,控制语句用于控制程序的流程,是C语言中非常重要的语句,用来实现程序的选择结构和循环结构。语
46、言主要有八种控制语句:选择控制语句包括:ifelse语句和switchcase语句。循环控制语句包括:for语句,while语句,dowhile语句转移控制语句包括:break语句,continue语句,goto语句第59页,共63页,编辑于2022年,星期日3.8小结选择控制语句包括:ifelse语句和switchcase语句。ifelse语句是选择控制语句,它判定所给的条件是否满足,根据判定的结果选择两种分支之一执行。if后面是一种分支,else后面是另外一种分支。如果条件满足,选择if后面的分支执行,如果条件不满足,选择else后面分支执行。ifelse语句并不是只能用于实现两分支的情况
47、,ifelse语句有三种不同的形式,使得它可用于两分支情况也可用于多分支情况。switchcase语句是多分支选择语句,利用嵌套的if语句也可以处理多分支选择问题,但如果分支较多,则嵌套的if语句层数多,致使程序冗长而且可读性降低。所以C语言提供switch语句直接处理多分支选择。第60页,共63页,编辑于2022年,星期日3.8小结循环控制语句包括:for语句,while语句,dowhile语句for语句用来实现for循环,for循环使用灵活,功能很强,不仅可用来表示循环次数已知的情况,而且也可以用于循环次数不确定只给出循环终止条件的情况。for语句的一般形式如下:for(表达式1;表达式2
48、;表达式3)循环体语句while语句是先判断表达式后再执行循环体的循环语句。因此,有可能一次循环体也不执行。do-while循环是先执行循环体后再判断表达式的循环语句,通常用它来完成必须至少执行一次循环体的操作。第61页,共63页,编辑于2022年,星期日3.8小结转移控制语句包括:break语句,continue语句,goto语句。break语句用于从内循环跳到外循环,使循环提前结束。但它只能跳一层循环,不能跳多层循环。continue语句用于跳过其后的语句,使本轮循环提前结束。goto语句是无条件转移语句,我们主张少用、慎用goto 语句,而不是禁用。第62页,共63页,编辑于2022年,星期日3.8小结多重循环:循环体内的语句本身还可以是另一个循环语句,因此这样就构成了另一层循环。其中,处于外层的循环称为外循环,处于内层的循环称为内循环,这种一个循环体内又包含另一个完整的循环结构称为循环的嵌套。这种嵌套结构的循环可以有多层,从而构成多重循环。多重循环的执行过程中,外循环控制变量的值变化得较慢,内循环控制变量的值变化得较快。外循环进行1次,内循环就要完成所有的循环。写多重循环程序时要注意,内外循环的层次要分明,内层循环必须被完整地嵌套在外循环在里面,可以若干个循环嵌套、并列,但绝对不允许循环之间相互交叉。第63页,共63页,编辑于2022年,星期日