C程序的流程-程序控制结构与语句课件_第1页
C程序的流程-程序控制结构与语句课件_第2页
C程序的流程-程序控制结构与语句课件_第3页
C程序的流程-程序控制结构与语句课件_第4页
C程序的流程-程序控制结构与语句课件_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章

C程序的流程——程序控制结构与语句

程序流程概述语句顺序结构与语句选择结构与语句循环结构与语句转向语句第5章

C程序的流程——程序控制结构与语句程序流15.1程序流程概述

程序流程就是计算动作执行的过程。程序的流程分为三种:顺序结构选择结构循环结构

5.1程序流程概述程序流程就是计算动作执行的过程。25.2语句

5.2.1基本赋值语句5.2.2表达式语句5.2.3基本输入/输出语句5.2.4控制语句5.2.5空语句和复合语句5.2语句35.2.1基本赋值语句赋值语句就是在赋值表达式的后面加上分号,一般形式为:

变量=表达式;例如:inti;floata=3.5;i=1;i=i+a;a+1=a+1; /*错误*/5.2.1基本赋值语句45.2.2表达式语句由一个表达式加一个分号构成一个表达式语句,一般形式为:

表达式;

5.2.2表达式语句55.2.3基本输入/输出语句1、基本输出语句:printf()功能是按指定的输出格式把相应的参数值在标准输出设备(通常是终端)上显示出来。一般使用格式是:printf(格式控制串,参数1,参数2,……);例如:printf("a,b的值分别为:%d,%d",a,b);

5.2.3基本输入/输出语句65.2.3基本输入/输出语句1、基本输出语句:printf()

转换说明输出形式举例输出%d十进制的int型printf(“countis%d”,34);countis34%f十进制的double型printf(“themaxis%f”,max=3.123);themaxis3.123%c单个字符printf(“**%c**”,a=’A’);**A**%s字符串printf(“%s”,”helloworld!”);helloworld!%o无符号八进制数printf(“Oce=%o”,a=034);Oce=34%x无符号十六进制数printf(“Hex=%x”,a=0xFF4e);Hex=FF4e%%%本身printf(“a%%b==3”);a%b==3常用的转换说明及作用范例5-15.2.3基本输入/输出语句转换说明输出形式举例输75.2.3基本输入/输出语句2、基本输入语句:scanf()功能是接收用户从键盘上输入的数据,并按照格式控制符的要求进行类型转换,然后送到由对应参数所指定的变量单元中去。一般格式为:scanf(格式控制串,参数地址1,参数地址2,…….);例如:scanf(“%d%f”,&a,&b);输入:103.0↙&变量名5.2.3基本输入/输出语句&变量名85.2.3基本输入/输出语句2、基本输入语句:scanf()

常用的转换说明及作用转换说明输出形式举例输入%d匹配带符号的十进制的int型scanf(“%d”,&a);输入20,则a为20%f匹配带符号的十进制的浮点数scanf(“%f”,&a);输入2.0,则a为2.000000%c匹配单个字符scanf(“%c”,&a);输入a,则a为’a’%s匹配非空白的字符序列scanf(“%s”,&s);输入hello,则数组s中放置hello,末尾自动加上空字符%o匹配带符号八进制数scanf(“%o”.&a);输入754,则a为八进制754%x匹配带符号的十六进制数scanf(“%x”,&a);输入123,则a为十六进制123【范例5-2】计算圆的面积,半径由用户指定。5.2.3基本输入/输出语句常用的转换说明及作用转换说95.2.4控制语句C语言中有9种控制语句,它们分别是:if-else语句、for语句、while语句、do-while语句、break语句、switch语句、goto语句、continue语句、return语句5.2.4控制语句105.2.5空语句和复合语句空语句只有一个分号构成,即:;如:while(getchar()!=‘\n’);复合语句就是用{}把多个单一的语句括起来,如:{z=x+y;t=z/100;printf("%f",t);}

5.2.5空语句和复合语句115.3顺序结构与语句

在顺序结构中,程序是按照语句的书写顺序依次执行,语句在前的先执行,语句在后的后执行。可用如下流程图表示:语句1语句2例如:a=3;b=4;c=a+b;5.3顺序结构与语句在顺序结构中,程序是按照语句的书写125.3顺序结构与语句

【范例5-3】“鸡兔同笼问题”。鸡有2只脚,兔有4只脚,如果已经鸡和兔的总头数为h,总脚数为f。问笼中各有多少只鸡和兔。问题分析:设笼中的鸡有m只,兔有n只,可以列出方程组:

5.3顺序结构与语句【范例5-3】“鸡兔同笼问题”135.4选择结构与语句

5.4.1选择结构5.4.2单分支选择结构——if语句5.4.3双分支选择结构——if-else语句5.4.4多分支选择结构——if-else的嵌套形式5.4.5多分支选择结构——switch语句5.4选择结构与语句145.4.1选择结构

选择结构可以用分支语句来实现。分支语句包括if语句和switch语句。5.4.1选择结构选择结构可以用分支语句来实现155.4.2单分支选择结构——if语句一般语法为:if(表达式)语句;执行过程为:先计算表达式的值,如果表达式为非0(即为真)时,则执行语句;否则不执行任何语句,退出if语句,继续执行if语句之后的部分。例如:

if(x>y)printf(“%d”,x);

;5.4.2单分支选择结构——if语句if(x>y);165.4.2单分支选择结构——if语句【范例5-4】输入三个不同的数,按从大到小的顺序输出。①先将a与b比较,把较大者放在a中,较小者放在b中;②再将a与c比较,把较大者放在a中,较小者放在c中,此时,a为三者中的最大者;③最后将b与c比较,把较大者放在b中,小者放在c中,此时a、b、c已经按从大到小的顺序排列。5.4.2单分支选择结构——if语句175.4.2单分支选择结构——if语句b>a交换a,bTc>a交换a,cTc>b交换b,cT输入a,b,c输出a,b,c5.4.2单分支选择结构——if语句b>a交换a,bT185.4.3双分支选择结构——if-else语句作用:当给定的条件满足时,执行一个语句;当条件不满足时,执行另一个语句。一般语法为:if(表达式)语句1;else语句2;其执行过程为:先计算表达式的值,如果表达式的值为为非0(即为真)时,则执行语句1;否则执行语句2。

表达式truefalse语句1语句2流程图表示5.4.3双分支选择结构——if-else语句表达式t195.4.3双分支选择结构——if-else语句例如:if(a>0)printf(“aispositive.\n”);elseprintf(“aisnotpositive.\n”);【范例5-5】判断输入的整数是否是13的倍数。注意:else部分不能独立存在,即else前一定有一个“;”,它一定是if语句的一部分。

5.4.3双分支选择结构——if-else语句【范例5205.4.4多分支选择结构——if-else的嵌套形式在if语句中又可以包含一个或多个if语句,这种形式称作if语句的嵌套。嵌套有以下两种形式:1.嵌套在else分支中,形成if....else...if语句;2.嵌套在if分支中

表达式truefalse语句1语句25.4.4多分支选择结构——if-else的嵌套形式表215.4.4多分支选择结构——if-else的嵌套形式1.嵌套在else分支中,其形式为:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;......else语句n;

【范例5-6】评价学生的成绩。按分数score输出等级:score≥90为优,80≤score<90为良,70≤score<80为中等,60≤score<70为及格,score<60为不及格。表达式1语句1FT表达式2语句2FT语句n表达式3语句3FT…5.4.4多分支选择结构——if-else的嵌套形式【225.4.4多分支选择结构——if-else的嵌套形式2.嵌套在if分支中,其形式为:if(表达式1)if(表达式2)语句1;else语句2;else语句3;

【范例5-7】判断某学生的成绩score是否及格;如果及格是否达到优秀(score≥90)。表达式1FT语句2表达式2语句3FT语句n注意:C语言规定了if和else的“就近配对”原则,即else总是与前面最近的(未曾配对的)if配对。5.4.4多分支选择结构——if-else的嵌套形式【235.4.5多分支选择结构——switch语句switch语句的一般语法格式为:switch(表达式){case常量表达式1:语句1;[break;]case常量表达式2:语句2;[break;]……case常量表达式n:语句n;[break;][default:语句n+1;]}执行过程为:先计算表达式的值,并逐个与case后面的常量表达式的值相比较,当表达式的值与某个常量表达式i的值一致时,则从语句i开始执行;直到遇到break语句或switch语句的”}”;若表达式与任何常量表达式的值均不一致时,则执行default后面的语句或执行后续语句。

5.4.5多分支选择结构——switch语句执行过程为245.4.5多分支选择结构——switch语句例如:switch(x){case1:printf(“statement1.\n”);break;case2:printf(“statement2.\n”);break;default:printf(“default”);}说明:⑴switch后的表达式类型一般为整形、字符型和枚举型,但不能为浮点型;⑵常量表达式i仅起语句标号作用,不作求值判断;⑶每个常量表达式的值必须各不相同,没有先后次序;⑷多个case语句可以共用一组执行语句【范例5-8】根据一个代表星期几的0到6之间的整数,在屏幕上输出它代表的是星期几。5.4.5多分支选择结构——switch语句【范例5-255.5循环结构与语句

5.5.1循环结构5.5.2当型循环语句——for语句5.5.3当型循环语句——while语句5.4.4直到型循环语句——do-while语句5.4.5循环的嵌套5.5循环结构与语句265.5.1循环结构循环结构是指在满足循环条件时反复执行循环代码块,直到循环条件不能满足为止。C中有3种循环语句:while语句do_while语句for语句【范例5-9】计算100之内的奇数之和。5.5.1循环结构【范例5-9】计算100之内的奇数275.5.2当型循环语句——for语句一般语法格式为:for(表达式1;表达式2;表达式3)循环体语句;

表达式2FT计算表达式3循环体语句for后面的语句计算表达式1执行过程如下:①计算表达式1的值;②判断表达式2,如果其值为非0(真),则执行循环体语句,然后执行第③步;如果其值为0(假),则结束循环,执行第⑤步;③计算表达式3;④返回继续执行第②步;⑤循环结束,执行for语句的后续语句。5.5.2当型循环语句——for语句表达式2FT计算表285.5.2当型循环语句——for语句例如:sum=0;for(i=0;i<=100;i++)sum+=i;

可以将for语句的形式改写为:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;

5.5.2当型循环语句——for语句295.5.2当型循环语句——for语句【范例5-10】经典问题:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。【范例5-11】计算n!,即n!=1*2*......*n。5.5.2当型循环语句——for语句305.5.2当型循环语句——for语句for循环的扩展形式:⑴表达式1和表达式3可以是一个简单的一个简单的表达式,也可以是逗号表达式,例如:for(i=0,j=100;i<j;i++,j--)k=i+j;⑵循环条件可由一个较复杂表达式的值来确定,例如:for(i=0;s[i]!=c&&s[i]!='\0';++i);⑶表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于0就执行循环体。如:for(k=1;k-4;k++)s=s+k;5.5.2当型循环语句——for语句315.5.2当型循环语句——for语句for循环的省略形式:⑴省略“表达式1”,此时应在for语句之前给循环变量赋初值。如:i=1;for(;i<=100;i++)sum+=i;⑵省略“表达式2”,表示不判断循环条件,循环无终止的进行下去,也可以认为表达式2始终为真。如:for(i=1;;i++)sum+=i;⑶省略“表达式3”,此时应在循环体内部实现循环变量的增量,以保证循环能够正常结束。如:for(i=1;i<=100;){sum+=i;i++}5.5.2当型循环语句——for语句325.5.2当型循环语句——for语句for循环的省略形式:⑷省略“表达式1”和“表达式3”,此时只给出了循环条件,如:i=1;for(;i<=100;){sum+=i;i++}⑸三个表达式都省略,即不设初值,也不判断条件,循环变量不增值。无终止地执行循环体。如:for(;;)循环体语句5.5.2当型循环语句——for语句335.5.3当型循环语句——while语句语法格式为:while(表达式)循环体语句;表达式FT循环体语句while后面的语句执行过程是:当表达式为非0(真)时,执行循环体语句,然后重复上述过程,一直到表达式为0(假)时,while语句结束。如:

i=1;while(i<=100){sum+=i;i++;}5.5.3当型循环语句——while语句表达式FT循环345.5.3当型循环语句——while语句说明:⑴循环体包含一条以上语句时,应用“{}”括起来,以复合语句的形式出现,否则它只认为while后面的第一条语句是循环体;⑵循环前,必须给循环控制变量赋初值;⑶循环体中,必须有改变循环控制变量值的语句,否则循环永远不结束。【范例5-12】求数列1/2、2/3、3/4……前20项的和。5.5.3当型循环语句——while语句【范例5-12355.5.4直到型循环——do-while语句直到型循环:先执行语句,后判断表达式。其一般的语法格式为:

do{循环体语句;}while(表达式);表达式FT循环体语句do-while后面的语句执行过程是:先执行一次循环体语句,然后判断表达式是否为非0(真),如果为真,则再次执行循环体语句,如此反复,一直到表达式的值等于0(假)时,循环结束。

分号不能省略5.5.4直到型循环——do-while语句表达式FT循365.5.4直到型循环——do-while语句说明:⑴do-while语句与while语句不同,二者的区别在于:当while后面的表达式一开始的值为0(假)时,while语句的循环体一次也不执行,而do-while语句的循环体至少要执行一次。⑵循环体部分要用花括号括起来,即使只有一条语句也如此;do-while语句最后以分号结束。⑶do-while语句也可以构成无限循环,此时要利用break语句或return语句直接从循环体内跳出循环。5.5.4直到型循环——do-while语句375.5.4直到型循环——do-while语句【范例5-13】计算两个数的最大公约数。采用“辗转相除法”,方法如下:⑴比较两数,并使m大于n。⑵将m作被除数,n作除数,相除后余数为r。⑶将m←n,n←r;⑷若r=0,则m为最大公约数,结束循环。若r≠0,执行步骤步骤(2)和(3)。mn362424365.5.4直到型循环——do-while语句mn385.5.5循环的嵌套循环的嵌套是指一个循环结构的循环体内又包含另一个完整的循环结构。之前三种循环之间可以互相嵌套。比如:1.while嵌套whilewhile(){……while(){……}……}2.do-while嵌套do-whiledo{……do{……}while();……}while();5.5.5循环的嵌套1.while嵌套while395.5.5循环的嵌套3.for嵌套forfor(;;){……for(;;){……}……}4.while嵌套do-while

while(){……do{……}while();……}5.for嵌套whilefor(;;){……while(){……}……}等等。5.5.5循环的嵌套3.for嵌套for4.whi405.5.5循环的嵌套【范例5-14】编写程序打印如下金字塔图形。【范例5-15】在《算经》中张丘建提出一个“百鸡问题”:就是公鸡一只值钱五,母鸡一只三块,小鸡三只一块。用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各买多少只?

*************************0=<x<=200<=y<=33z=100-x-y5.5.5循环的嵌套*0=<x<=20415.6转向语句

5.6.1goto语句5.6.2break语句5.6.3continue语句5.6转向语句425.6.1goto语句goto语句是无条件转向语句,即转向到指定语句标号处,执行标号后面的程序。其一般语法格式为:

goto语句标号;

例如:gotoend;说明:结构化程序设计不主张使用goto语句。【范例5-16】用goto语句来显示1~100的数字。5.6.1goto语句说明:结构化程序设计不主张使用go435.6.2break语句作用:可使程序跳出当前循环结构,执行循环后面的语句。语句格式为:break;/*无break语句*/intsum=0,number;scanf(“%d”,&number);while(number!=0){sum+=number;scanf(“%d”,&number);}/*有break语句*/intsum=0,number;while(1){scanf(“%d”,&number);if(number==0)break;sum+=number;}5.6.2break语句/*无break语句*//*445.6.2break语句break语句只是跳出当前的循环语句,对于嵌套的循环语句,break语句的功能是从内层循环跳到外层循环。例如:01inti=0,j,sum=0;02while(i<5){03for(j=0;j<5;j++){04sum+=i+j;05if(j==i)break;06}07i++;08}【范例5-17】输入一个大于2的整数,判断该数是否为素数。若是素数,输出”是素数”,否则输出”不是素数”。5.6.2break语句【范例5-17】输入一个大于455.6.3continue语句作用:在满足另一个特定条件时跳出本次循环。

语句格式为:continue;【范例5-18】输出100~200之间所有不能被3和7同时整除的整数。表达式1表达式2表达式3continue循环体truefalse5.6.3continue语句【范例5-18】输出1465.7综合应用——简单计算器

【范例5-19】编写一个程序,模拟具有加、减、乘、除等4种功能的简单计算器。5.7综合应用——简单计算器475.9跟我上机1.编写程序,找到1000以内的所有“完数”。所谓“完数”是指一个数是其所有因子之和,例如6=1+2+3。2.输出斐波那契(Fibonacci)数列的前20项。该数列的第1项和第2项为1,从第3项开始,每一项均为其前面2项之各和,即:1,1,2,3,5,8,......。f1f211f32f1f43f2f1=f1+f2f2=f1+f25.9跟我上机f1f2f32f1f43f2f1=f485.9跟我上机3.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了。问第一天共摘了多少。today=before/2+1before=2(today+1)5.9跟我上机today=before/2+1befor49演讲完毕,谢谢观看!演讲完毕,谢谢观看!50第5章

C程序的流程——程序控制结构与语句

程序流程概述语句顺序结构与语句选择结构与语句循环结构与语句转向语句第5章

C程序的流程——程序控制结构与语句程序流515.1程序流程概述

程序流程就是计算动作执行的过程。程序的流程分为三种:顺序结构选择结构循环结构

5.1程序流程概述程序流程就是计算动作执行的过程。525.2语句

5.2.1基本赋值语句5.2.2表达式语句5.2.3基本输入/输出语句5.2.4控制语句5.2.5空语句和复合语句5.2语句535.2.1基本赋值语句赋值语句就是在赋值表达式的后面加上分号,一般形式为:

变量=表达式;例如:inti;floata=3.5;i=1;i=i+a;a+1=a+1; /*错误*/5.2.1基本赋值语句545.2.2表达式语句由一个表达式加一个分号构成一个表达式语句,一般形式为:

表达式;

5.2.2表达式语句555.2.3基本输入/输出语句1、基本输出语句:printf()功能是按指定的输出格式把相应的参数值在标准输出设备(通常是终端)上显示出来。一般使用格式是:printf(格式控制串,参数1,参数2,……);例如:printf("a,b的值分别为:%d,%d",a,b);

5.2.3基本输入/输出语句565.2.3基本输入/输出语句1、基本输出语句:printf()

转换说明输出形式举例输出%d十进制的int型printf(“countis%d”,34);countis34%f十进制的double型printf(“themaxis%f”,max=3.123);themaxis3.123%c单个字符printf(“**%c**”,a=’A’);**A**%s字符串printf(“%s”,”helloworld!”);helloworld!%o无符号八进制数printf(“Oce=%o”,a=034);Oce=34%x无符号十六进制数printf(“Hex=%x”,a=0xFF4e);Hex=FF4e%%%本身printf(“a%%b==3”);a%b==3常用的转换说明及作用范例5-15.2.3基本输入/输出语句转换说明输出形式举例输575.2.3基本输入/输出语句2、基本输入语句:scanf()功能是接收用户从键盘上输入的数据,并按照格式控制符的要求进行类型转换,然后送到由对应参数所指定的变量单元中去。一般格式为:scanf(格式控制串,参数地址1,参数地址2,…….);例如:scanf(“%d%f”,&a,&b);输入:103.0↙&变量名5.2.3基本输入/输出语句&变量名585.2.3基本输入/输出语句2、基本输入语句:scanf()

常用的转换说明及作用转换说明输出形式举例输入%d匹配带符号的十进制的int型scanf(“%d”,&a);输入20,则a为20%f匹配带符号的十进制的浮点数scanf(“%f”,&a);输入2.0,则a为2.000000%c匹配单个字符scanf(“%c”,&a);输入a,则a为’a’%s匹配非空白的字符序列scanf(“%s”,&s);输入hello,则数组s中放置hello,末尾自动加上空字符%o匹配带符号八进制数scanf(“%o”.&a);输入754,则a为八进制754%x匹配带符号的十六进制数scanf(“%x”,&a);输入123,则a为十六进制123【范例5-2】计算圆的面积,半径由用户指定。5.2.3基本输入/输出语句常用的转换说明及作用转换说595.2.4控制语句C语言中有9种控制语句,它们分别是:if-else语句、for语句、while语句、do-while语句、break语句、switch语句、goto语句、continue语句、return语句5.2.4控制语句605.2.5空语句和复合语句空语句只有一个分号构成,即:;如:while(getchar()!=‘\n’);复合语句就是用{}把多个单一的语句括起来,如:{z=x+y;t=z/100;printf("%f",t);}

5.2.5空语句和复合语句615.3顺序结构与语句

在顺序结构中,程序是按照语句的书写顺序依次执行,语句在前的先执行,语句在后的后执行。可用如下流程图表示:语句1语句2例如:a=3;b=4;c=a+b;5.3顺序结构与语句在顺序结构中,程序是按照语句的书写625.3顺序结构与语句

【范例5-3】“鸡兔同笼问题”。鸡有2只脚,兔有4只脚,如果已经鸡和兔的总头数为h,总脚数为f。问笼中各有多少只鸡和兔。问题分析:设笼中的鸡有m只,兔有n只,可以列出方程组:

5.3顺序结构与语句【范例5-3】“鸡兔同笼问题”635.4选择结构与语句

5.4.1选择结构5.4.2单分支选择结构——if语句5.4.3双分支选择结构——if-else语句5.4.4多分支选择结构——if-else的嵌套形式5.4.5多分支选择结构——switch语句5.4选择结构与语句645.4.1选择结构

选择结构可以用分支语句来实现。分支语句包括if语句和switch语句。5.4.1选择结构选择结构可以用分支语句来实现655.4.2单分支选择结构——if语句一般语法为:if(表达式)语句;执行过程为:先计算表达式的值,如果表达式为非0(即为真)时,则执行语句;否则不执行任何语句,退出if语句,继续执行if语句之后的部分。例如:

if(x>y)printf(“%d”,x);

;5.4.2单分支选择结构——if语句if(x>y);665.4.2单分支选择结构——if语句【范例5-4】输入三个不同的数,按从大到小的顺序输出。①先将a与b比较,把较大者放在a中,较小者放在b中;②再将a与c比较,把较大者放在a中,较小者放在c中,此时,a为三者中的最大者;③最后将b与c比较,把较大者放在b中,小者放在c中,此时a、b、c已经按从大到小的顺序排列。5.4.2单分支选择结构——if语句675.4.2单分支选择结构——if语句b>a交换a,bTc>a交换a,cTc>b交换b,cT输入a,b,c输出a,b,c5.4.2单分支选择结构——if语句b>a交换a,bT685.4.3双分支选择结构——if-else语句作用:当给定的条件满足时,执行一个语句;当条件不满足时,执行另一个语句。一般语法为:if(表达式)语句1;else语句2;其执行过程为:先计算表达式的值,如果表达式的值为为非0(即为真)时,则执行语句1;否则执行语句2。

表达式truefalse语句1语句2流程图表示5.4.3双分支选择结构——if-else语句表达式t695.4.3双分支选择结构——if-else语句例如:if(a>0)printf(“aispositive.\n”);elseprintf(“aisnotpositive.\n”);【范例5-5】判断输入的整数是否是13的倍数。注意:else部分不能独立存在,即else前一定有一个“;”,它一定是if语句的一部分。

5.4.3双分支选择结构——if-else语句【范例5705.4.4多分支选择结构——if-else的嵌套形式在if语句中又可以包含一个或多个if语句,这种形式称作if语句的嵌套。嵌套有以下两种形式:1.嵌套在else分支中,形成if....else...if语句;2.嵌套在if分支中

表达式truefalse语句1语句25.4.4多分支选择结构——if-else的嵌套形式表715.4.4多分支选择结构——if-else的嵌套形式1.嵌套在else分支中,其形式为:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;......else语句n;

【范例5-6】评价学生的成绩。按分数score输出等级:score≥90为优,80≤score<90为良,70≤score<80为中等,60≤score<70为及格,score<60为不及格。表达式1语句1FT表达式2语句2FT语句n表达式3语句3FT…5.4.4多分支选择结构——if-else的嵌套形式【725.4.4多分支选择结构——if-else的嵌套形式2.嵌套在if分支中,其形式为:if(表达式1)if(表达式2)语句1;else语句2;else语句3;

【范例5-7】判断某学生的成绩score是否及格;如果及格是否达到优秀(score≥90)。表达式1FT语句2表达式2语句3FT语句n注意:C语言规定了if和else的“就近配对”原则,即else总是与前面最近的(未曾配对的)if配对。5.4.4多分支选择结构——if-else的嵌套形式【735.4.5多分支选择结构——switch语句switch语句的一般语法格式为:switch(表达式){case常量表达式1:语句1;[break;]case常量表达式2:语句2;[break;]……case常量表达式n:语句n;[break;][default:语句n+1;]}执行过程为:先计算表达式的值,并逐个与case后面的常量表达式的值相比较,当表达式的值与某个常量表达式i的值一致时,则从语句i开始执行;直到遇到break语句或switch语句的”}”;若表达式与任何常量表达式的值均不一致时,则执行default后面的语句或执行后续语句。

5.4.5多分支选择结构——switch语句执行过程为745.4.5多分支选择结构——switch语句例如:switch(x){case1:printf(“statement1.\n”);break;case2:printf(“statement2.\n”);break;default:printf(“default”);}说明:⑴switch后的表达式类型一般为整形、字符型和枚举型,但不能为浮点型;⑵常量表达式i仅起语句标号作用,不作求值判断;⑶每个常量表达式的值必须各不相同,没有先后次序;⑷多个case语句可以共用一组执行语句【范例5-8】根据一个代表星期几的0到6之间的整数,在屏幕上输出它代表的是星期几。5.4.5多分支选择结构——switch语句【范例5-755.5循环结构与语句

5.5.1循环结构5.5.2当型循环语句——for语句5.5.3当型循环语句——while语句5.4.4直到型循环语句——do-while语句5.4.5循环的嵌套5.5循环结构与语句765.5.1循环结构循环结构是指在满足循环条件时反复执行循环代码块,直到循环条件不能满足为止。C中有3种循环语句:while语句do_while语句for语句【范例5-9】计算100之内的奇数之和。5.5.1循环结构【范例5-9】计算100之内的奇数775.5.2当型循环语句——for语句一般语法格式为:for(表达式1;表达式2;表达式3)循环体语句;

表达式2FT计算表达式3循环体语句for后面的语句计算表达式1执行过程如下:①计算表达式1的值;②判断表达式2,如果其值为非0(真),则执行循环体语句,然后执行第③步;如果其值为0(假),则结束循环,执行第⑤步;③计算表达式3;④返回继续执行第②步;⑤循环结束,执行for语句的后续语句。5.5.2当型循环语句——for语句表达式2FT计算表785.5.2当型循环语句——for语句例如:sum=0;for(i=0;i<=100;i++)sum+=i;

可以将for语句的形式改写为:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;

5.5.2当型循环语句——for语句795.5.2当型循环语句——for语句【范例5-10】经典问题:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。【范例5-11】计算n!,即n!=1*2*......*n。5.5.2当型循环语句——for语句805.5.2当型循环语句——for语句for循环的扩展形式:⑴表达式1和表达式3可以是一个简单的一个简单的表达式,也可以是逗号表达式,例如:for(i=0,j=100;i<j;i++,j--)k=i+j;⑵循环条件可由一个较复杂表达式的值来确定,例如:for(i=0;s[i]!=c&&s[i]!='\0';++i);⑶表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于0就执行循环体。如:for(k=1;k-4;k++)s=s+k;5.5.2当型循环语句——for语句815.5.2当型循环语句——for语句for循环的省略形式:⑴省略“表达式1”,此时应在for语句之前给循环变量赋初值。如:i=1;for(;i<=100;i++)sum+=i;⑵省略“表达式2”,表示不判断循环条件,循环无终止的进行下去,也可以认为表达式2始终为真。如:for(i=1;;i++)sum+=i;⑶省略“表达式3”,此时应在循环体内部实现循环变量的增量,以保证循环能够正常结束。如:for(i=1;i<=100;){sum+=i;i++}5.5.2当型循环语句——for语句825.5.2当型循环语句——for语句for循环的省略形式:⑷省略“表达式1”和“表达式3”,此时只给出了循环条件,如:i=1;for(;i<=100;){sum+=i;i++}⑸三个表达式都省略,即不设初值,也不判断条件,循环变量不增值。无终止地执行循环体。如:for(;;)循环体语句5.5.2当型循环语句——for语句835.5.3当型循环语句——while语句语法格式为:while(表达式)循环体语句;表达式FT循环体语句while后面的语句执行过程是:当表达式为非0(真)时,执行循环体语句,然后重复上述过程,一直到表达式为0(假)时,while语句结束。如:

i=1;while(i<=100){sum+=i;i++;}5.5.3当型循环语句——while语句表达式FT循环845.5.3当型循环语句——while语句说明:⑴循环体包含一条以上语句时,应用“{}”括起来,以复合语句的形式出现,否则它只认为while后面的第一条语句是循环体;⑵循环前,必须给循环控制变量赋初值;⑶循环体中,必须有改变循环控制变量值的语句,否则循环永远不结束。【范例5-12】求数列1/2、2/3、3/4……前20项的和。5.5.3当型循环语句——while语句【范例5-12855.5.4直到型循环——do-while语句直到型循环:先执行语句,后判断表达式。其一般的语法格式为:

do{循环体语句;}while(表达式);表达式FT循环体语句do-while后面的语句执行过程是:先执行一次循环体语句,然后判断表达式是否为非0(真),如果为真,则再次执行循环体语句,如此反复,一直到表达式的值等于0(假)时,循环结束。

分号不能省略5.5.4直到型循环——do-while语句表达式FT循865.5.4直到型循环——do-while语句说明:⑴do-while语句与while语句不同,二者的区别在于:当while后面的表达式一开始的值为0(假)时,while语句的循环体一次也不执行,而do-while语句的循环体至少要执行一次。⑵循环体部分要用花括号括起来,即使只有一条语句也如此;do-while语句最后以分号结束。⑶do-while语句也可以构成无限循环,此时要利用break语句或return语句直接从循环体内跳出循环。5.5.4直到型循环——do-while语句875.5.4直到型循环——do-while语句【范例5-13】计算两个数的最大公约数。采用“辗转相除法”,方法如下:⑴比较两数,并使m大于n。⑵将m作被除数,n作除数,相除后余数为r。⑶将m←n,n←r;⑷若r=0,则m为最大公约数,结束循环。若r≠0,执行步骤步骤(2)和(3)。mn362424365.5.4直到型循环——do-while语句mn885.5.5循环的嵌套循环的嵌套是指一个循环结构的循环体内又包含另一个完整的循环结构。之前三种循环之间可以互相嵌套。比如:1.while嵌套whilewhile(){……while(){……}……}2.do-while嵌套do-whiledo{……do{……}while();……}while();5.5.5循环的嵌套1.while嵌套while895.5.5循环的嵌套3.for嵌套forfor(;;){……for(;;){……}…

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论