第三章C编程语句.ppt

上传人:sccc 文档编号:5940659 上传时间:2023-09-06 格式:PPT 页数:96 大小:508.04KB
返回 下载 相关 举报
第三章C编程语句.ppt_第1页
第1页 / 共96页
第三章C编程语句.ppt_第2页
第2页 / 共96页
第三章C编程语句.ppt_第3页
第3页 / 共96页
第三章C编程语句.ppt_第4页
第4页 / 共96页
第三章C编程语句.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《第三章C编程语句.ppt》由会员分享,可在线阅读,更多相关《第三章C编程语句.ppt(96页珍藏版)》请在三一办公上搜索。

1、面向对象程序设计(一),吕俊白,第三章 C+编程语句,重点:关系表达式,逻辑表达式;if语句、switch语句、各种循环语句。,3.1程序的控制结构,ANSI(American National Standards Institute美国国家标准化协会)规定的一些常用流程图符号:,3.1程序的控制结构,程序设计中的三种基本结构:顺序结构选择结构循环结构,1顺序结构,n条语句自上而下排列,并按排列的顺序自上往下逐条执行:结构图:(P:16),根据指定条件的当前值在两条或多条程序路径中选择一条执行。结构图:(P:16),在C+中,通常用if语句或switch语句来实现选择结构。,3.循环结构(P:

2、16),在C+中,用于实现循环结构的语句有:for语句、while语句、do while语句。,3.2 C+的语句概述,1C+的控制语句,3.2 C+的语句概述,2空语句:;空语句是一种特殊形式的语句,它什么都不做。一般用在if语句的分支中,表示该分支为空。3复合语句(又称为块语句)是指括在一对花括号 里的语句序列。一般用于构成if语句的分支或循环语句的循环体。,3.3关系表达式与逻辑表达式,3.3.1关系运算符与关系表达式(P:114)一、关系运算符C+提供了六种关系运算,相应的运算符为:大于()小于(=)小于等于(=)比较(=)不等于(!=),优先级相同(高),优先级相同(低),注意:关系

3、运算符的优先级低于算术运算符,但高于赋值运算符。(P:105),二、关系表达式,关系表达式的一般形式为:运算对象关系运算符运算对象例如:(1)3.1415926*r*r100(2)sex=f都是关系表达式。具体操作:在计算两个运算分量的值后,对它们进行比较操作,若符合运算符指出的关系,其结果为1(true),否则为0(false)。作用:描述关系运算。运算对象:数值型数据、字符型数据、枚举型数据等。关系运算其运算结果为:1(true真)或0(false假)。,二、关系表达式,在编程时,关系表达式常用于描述简单的条件。例如:数学(math)成绩在60分以上关系表达式:math=60,3.3.2逻

4、辑运算符与逻辑表达式,例如:数学(math)、语文(chinese)、英语(english)三门课均在60分以上如何描述?一、逻辑运算符(P:114)C+语言提供了三种逻辑运算符:逻辑非:!逻辑与:&逻辑或:|,高低,3.3.2逻辑运算符与逻辑表达式,二、逻辑表达式与逻辑运算逻辑表达式逻辑表达式的格式:逻辑运算符!运算对象运算对象逻辑运算符&或|运算对象作用:描述逻辑运算。运算对象:逻辑数据(0或1)或关系表达式。,2.逻辑运算法则,!:逻辑非,其运算法则如下:!0 1!1 0&:逻辑与,其运算法则如下:(P:117表4-2)0&0 0 0&1 0 1&0 0 1&1 1&:只有当两个运算对象

5、均为1时,表达式值才为1.,2.逻辑运算法则,|:逻辑或,其运算法则如下:(P:117表4-2)0|0 0 0|1 1 1|0 1 1|1 1|:只有当两个运算对象均为0时,表达式值才为0.,逻辑运算其运算结果与关系运算相同为:1(true真)或0(false假)。例如:数学(math)、语文(chinese)、英语(english)三门课均在60分以上math=60&chinese=60&english=60,3.短路表达式(P:117),(1)如果多个表达式用&连接,则一个表达式的值为假,将使整个连接而成的表达式的值为假。例如:设n=3,m=6执行 n4&m+80|humi50C+利用这个

6、特点来产生高效的代码。,3.4 if语句(P:27),1.if 语句的语法if 语句的一般形式:if(expression)statement1;else statement2;/用 括起的为可选项uexpression:通常是关系表达式或逻辑表达式,偶而也可以用算术表达式,或其它表达式。ustatement:可以是C+的任何语句。,3.4 if语句,以上一般形式涵盖了if语句的下面两种形式:(1)if(exp)statement;(2)if(exp)statement1;else statement2;形式(1)不包含else子句,可以看成是形式(2)的特例。,3.4 if语句,2.if语句

7、的作用在程序中,if语句用于构造选择结构,实现程序分支的选择与执行。3.if语句的语义if语句的语义可用流程图描述如下:(P:28图2-1),3.4 if语句,例1:如果a比b大则交换变量a,b中的内容。if(ab)temp=a;a=b;b=temp;问题:为什么要使用temp?,如果if条件后面的语句不止一条,则要用花括号写成语句块。,3.4 if语句,例2:从a,b两个数中挑选值最大者。if(ab)max=a;else max=b;,例3:我们以60分作为考试的合格线,如果数学(math)、语文(chinese)、英语(english)三门课考试成绩均在60分以上,则输出”考试合格”,否则

8、输出”考试不合格”。,/exam_condiction.cpp#include using namespace std;void main()float math,chinese,english;coutmathchineseenglish;if(math=60,5.if语句的嵌套(P:29),if语句的嵌套是指在一个 if语句中又出现另一 if语句。if语句出现在statement1中称为前嵌套;if语句出现在statement2中称为后嵌套。,(1)后嵌套多重if语句,例5:男性并且年龄45岁以下视为合格人选,女性并且年龄40岁以下视为合格人选。程序段:if(sex=m 特点:if与els

9、e仍旧可以唯一地配对。,(2)前嵌套多重if语句及嵌套的歧义性问题,例6:把例5的挑选条件改为,男性且45岁以下,女性不限制年龄。试问以下程序正确否?,程序段2:if(sex=m)错误 if(age=45)cout 合格男性!n;else cout 合格女性!n;,if if s11 else s2,if if s11 else s12,C+语言规定:每个else只与在它前面的距它最近的那个未配对的if配对。,(3)解决嵌套if语句的二义性,避免二义性的方法:方法一:用花括号 来强制配对在例6程序段2的第一个if语句中插入一对花括号。if(sex=m)if(age=45)cout 合格男性!n

10、;else cout 合格女性!n;,(3)解决嵌套if语句的二义性,方法二:把每层if语句的else子句都写全if(sex=m)if(age=45)cout 合格男性!n;else;/利用空语句else cout 合格女性!n;,建议:尽量少用前嵌套,多用后嵌套。,3.5条件操作符和条件表达式,1.条件表达式的语法:(条件)?表达式1:表达式2操作符(?:)是C+中唯一的一个三元操作符。2.语义计算给定条件的值;若条件的值为真,则计算表达式1;否则计算表达2。3.作用:描述条件判断。,例如:y=0(x=0)y=x0?0:1等价于下面的if语句:if(x0)y=0;else y=1;,注意:条

11、件运算符构成表达式,它是有值的。而if else语句不能有值,所以,if else语句不能替代条件运算符。例如:下面的代码不能由if else替代:cout(ab?a:b)endl;由于条件操作符的优先级较低,所以整个条件表达式一般总要带上括号。,条件运算符可以嵌套例如:xy?“Greater than”:x=y?“Equal to”:“Less than”等价于:(xy)?“Greater than”:(x=y)?“Equal to”:“Less than”)当x=y时,值为“Equal to”;当xy 时,值为“Greater than”;否则,值为“Less than”。即:操作符(?:

12、)的结合性为右左先运算右边,在一个条件表达式中,如果后面两个表达式的值的类型相同,且均为左值,则该条件表达式的值为左值。例如:int x=5;long a,b;(x?a:b)=1;/right!(x?x:a)=2;/error!/任何被转换的变量都不是左值(x=2?1:a)=3;/error!1为非左值,例如:下面的程序段中包含一个条件表达式,指出该程序段的功能。char ch;cin ch;ch=(ch=A,该程序段的功能是:输入一个字符存放到ch变量中,利用条件表达式判断该字符是大写还是小写,若是大写字符则转换成小写字符。,3.6 switch语句,if 语句是二分支选择语句;switch

13、语句是多分支选择语句。在解决实际问题时,我们常常需要用到多分支选择。例如:根据学生考试成绩的等级输出百分制分数段。等级(grade)百分制分数段A90 100B80 89C70 79D60 69E60,这是一个多分支选择的问题。从流程图中我们可以看出:可用嵌套的if else语句来实现。,#include using namespace std;void main()char grade;cout grade;if(grade=A)cout90100endl;else if(grade=B)cout8089endl;else if(grade=C)cout70-79endl;else if(g

14、rade=D)cout6069endl;else if(grade=E)cout60endl;else coutError!endl;,1.switch语句的一般形式:,switch(expression)case constant 1:statement sequence 1;case constant 2:statement sequence 2;case constant n:statement sequence n;default:statement sequence n+1;,解释:,expression:表达式,也称为开关表达式。注意:表达式只能是整型、字符型或枚举型表达式。如果是

15、其它类型的表达式将引起编译错误。constant:常量表达式。switch语句中包含n个常量表达式,与case一起作为n个分支的标号。注意:case后面的常量表达式之类型必须与switch后面括号中表达式的类型匹配。,解释:,statement sequences:语句序列,可以由一个到多个语句组成。当语句序列中出现另一switch语句时,称为switch的嵌套。default:表示当开关表达式的取值不等于已列出的常量表达式的值时的一种特殊处理。default分支(第n+1个分支)也被称为“意外分支”,它可以缺省。switch 语句中最多包含n+1个语句组,对应n+1个可执行分支。,2.swi

16、tch语句的作用,在程序中,switch语句用于实现多分支的选择与执行。,3.switch语句的语义,(1)计算开关表达式(expression)的值;(2)当表达式的值与某一case后面的常量表达式值相等时,就执行此 case后面的语句组;如果语句组中带有break语句,则遇到break语句时,流程将跳转至switch语句的下一语句;否则,顺序执行该语句组以下的各个语句组,直至最后一个语句组。若所有case中的常量表达式值都没有与表达式(expression)的值匹配,就执行 default后面的语句,若无default语句,则直接退出switch语句。即:根据表达式(expression)

17、的值选择对应的分支,并执行其后语句组。,4.注意:,同一个switch语句中的n个常量表达式的值必须互不相同。case与default并不改变控制的流程,所以,在程序中case通常与break联用,以保证多路分支的正确实现。,程序段1:colors color;/设colors是一个已定义好的枚举类型 switch(color)case Red:cout 红色 endl;case Blue:cout 兰色 endl;case Green:cout 绿色 endl;如果color的值是Blue,则输出:兰色 绿色。,程序段2:colors color;/设colors是一个已定义好的枚举类型sw

18、itch(color)case Red:cout 红色 endl;break;case Blue:cout 兰色 endl;break;case Green:cout 绿色 endl;如果color的值是Blue,则仅输出兰色。,例如:,4.注意:,在每个case分支都带有break的情况下,case的次序不影响执行结果。分支的语句组如果包含多个语句,可不用加花括号,即无须表示成复合语句形式。多个case可以共用一组执行语句。,当grade 的值为A,B,C,D时都输出”考试合格!”。char grade;/switch(grade)case A:case B:case C:case D:co

19、ut”考试合格!n”;,char grade;/switch(grade)case A,B,C,D:cout”考试合格!n”;/Error!,例如:,注意:几种情况都执行同一操作时,不能简单地将其值用逗号隔开,在一个case中实现。,4.注意:,switch语句可以嵌套。case与default标号是与包含它的最小的 switch相联系的。例如:int i,j;switch(i)case 1:/case 2:switch(j)case 1:/case 2:/case 3:/,例如:对于上例,根据学生考试成绩的等级输出百分制分数段。,用switch语句编写程序如下:#include using

20、namespace std;void main()char grade;cout grade;switch(grade)case A:cout90-100endl;break;,case B:cout80-89endl;break;case C:cout70-79endl;break;case D:cout60-69endl;break;case E:cout60endl;break;default:coutError!endl;,switch语句与if语句的区别:,switch语句只能对确定值进行条件测试,而且受到数据类型的限制。if语句可以计算关系表达式或逻辑表达式的值.if 语句与swi

21、tch语句可以互相补充。例如:输入一个百分制的成绩(1100),将其转换成五级记分制成绩。百分制成绩 五级记分制成绩 60 E 60-69 D 70-79 C 80-89 B 90-100 A,3.7循环语句,1循环语句概述循环语句可以按一定规则控制一段程序重复执行若干次。C+提供三种循环语句用来实现循环结构:while语句和for语句用来实现“当型”循环,do while语句则用来实现“直到型”循环。,一、while语句(P:37),1 while语句的语法 while(expression)statement;解释:uexpression:通常称为循环条件表达式。它可以是关系表达式和逻辑表

22、达式、算术表达式。其计算结果用来决定是否继续执行下一次循环。ustatement:通常称为“循环体”,可以是简单语句,也可以是复合语句。如果语句中包含有另一循环语句,就构成循环的嵌套,也称为多重循环。,2while语句的语义,即:当循环条件表达式(expression)的值为真(非)时,执行循环体(statement),若expression的值为假(),则结束循环的执行。故称为“当型”循环。,注意:,u在开始循环前,循环控制变量必须初始化。u循环体中必须含有改变循环条件表达式(expression)值的语句,以使循环在执行有限次之后,expression的值为假而正常结束循环,否则会导致“死

23、循环”。,3While语句的应用,例如:求sum=1+2+100的值。(P:38)分析:求表达式的值的过程是一个不断累加的过程;表达式的相邻两项的差是固定的,为。用循环语句实现的步骤:1)设置一变量sum用于存放累加和,其初值设为0;2)设置一变量i用于控制循环的执行,当其值大于100时结束循环的执行,其初值为1;3)循环的执行条件:(i=100)4)从求值表达式的取值看,i和 sum的类型可声明为整型(int),程序:,/while_sum_100.cpp#include using namespace std;int main()int i=1,sum=0;/初始化while(i=100)

24、sum=sum+i;i=i+1;/改变循环条件表达式的值使循环在/执行有限次之后,能正常结束coutsum=sumendl;return 1;,3While语句的应用,分析:(P:57)求值表达式的运算过程实质是一个求累加和的过程,可设置一变量sum用于存放累加和。求和表达式相邻两项的符号相反,可设置一变量sign用于存放符号;求和表达式中各项的分子均为1,相邻两项的分母相差2,可设置一变量denom用于存放分母的值。,用循环语句求解的步骤:累加变量sum的初值为0;因为第一项为正,所以sign的初值为1;第一项的分母为,所以denom的初值为1循环的结束条件:最后一项的绝对值小于10-8。所

25、以,我们设置一变量item用于存放中间项的值,这样,循环的执行条件为:(abs(item)1e-8)其中:abs(x)表示取x的绝对值,/f0220.cpp 求pi(P:58)#include#includeusing namespace std;int main()double sum=1,item=1;int denom=1,sign=1;while(fabs(item)1e-8)denom+=2;sign*=-1;item=sign*1.0/denom;sum+=item;coutPi=fixedsum*4endl;return 1;,二、do while语句,例如:设计一菜单系统,包含

26、如下菜单项:1.增加 2.修改 3.删除 4.查询 5.退出要求:程序根据用户的不同选择调用不同的模块完成相应的功能.,1do while语句的语法,do statementwhile(expression);解释:u expression:通常称为循环条件表达式。它可以是关系表达式和逻辑表达式、算术表达式。其计算结果用来决定是否继续执行下一次循环。ustatement:称为“循环体”,可以是简单语句,也可以是复合语句。,2do while语句的语义,即:执行循环体直至循环条件表达式(expression)的值为假。故称为“直到型”循环。,注意:,在开始循环前,循环控制变量必须初始化。循环体中

27、必须含有改变循环条件表达式(expression)值的语句,以使循环在执行有限次之后,expression的值为假而正常结束循环,否则会导致“死循环”。do while 循环中,while(expression)后面的分号不要遗忘。do while 循环的循环体即使是一个简单语句,习惯上也使用花括号包围起来,并且while(expression);直接写在右花括号 的后面。do while语句在许多场合可以做 while能做的事。,/f0221.cpp 求pi(P:59)#include#includeusing namespace std;int main()double sum=0,ite

28、m=1;long denom=-1;int sign=-1;do denom+=2;sign*=-1;item=sign*1.0/denom;sum+=item;while(fabs(item)1e-6);coutPi=fixedsum*4endl;return 1;,do while 语句与while语句的区别:,do while 语句在循环体执行后进行循环条件的测试,所以,它至少将执行一次循环体;while语句在循环体开始执行前进行循环条件的测试,所以,它有可能一次也不执行循环体。,三、for语句(P:34),1for语句的语法for(exp1;exp2;exp3)statement;解释

29、:exp1:用来设置循环控制变量初值。exp2:其计算结果用来作为循环是否继续执行的判断条件。一般是关系表达式或逻辑表达式;exp3:用来修改循环控制变量的值,使循环条件趋向假而正常结束循环。一般是算术表达式。statement:语句,也称为“循环体”。它可以是简单语句,也可以是复合语句。,2for语句的语义(P:35),while语句的语义,将for语句的一般形式用while语句来表达:,exp1;while(exp2)statement;exp3;,例如:求sum=1+2+100的值。,#include using namespace std;void main()int i,sum;su

30、m=0;for(i=1;i=100;i+)/初始化、循环条件、步长都放在顶部描述sum+=i;/循环体相对简洁coutsum=sumendl;/(P:36),注意:,三个表达式都可以省略,但其间的分号不能省。(1)省略exp1:表示没有设置循环控制变量初值。此时,应在for语句之前给循环控制变量赋初值。(2)省略exp2:即省略for循环的条件测试部分,这意味着不判断循环继续执行的条件,即循环将无终止地进行下去。因此,必须在循环体内设置能跳出循环的控制语句,否则会导致死循环。(3)省略exp3:在循环体内应存在有修改循环控制变量的操作,以保证循环能正常结束。,exp1,exp2,exp3都可以

31、为任何表达式。例1:exp1为逗号表达式for(sum=0,i=1;i=100;i+)sum+=i;例2:exp1,exp2为逗号表达式,exp3省略,循环体为空语句for(sum=0,i=1;sum+=i+,i=100;);,exp1中可以定义循环变量。例如:sum=0;for(int i=1;i=100;i+)sum+=i;此时,变量只在循环体中有效。注意:只要循环变量不在程序的其他地方使用,在for语句头部定义循环变量是最好的,该变量只在循环体中有效,退出循环后自行消失。,例如:给定一个整数m,判断其是否为素数。(P:44),分析:素数的定义:只能被1和自身整除的数是素数。m是素数的判定

32、条件是:m不能被 2,3,m-1之间的数整除。即:对任何一个整数m,必须保证m%i不为0(i=2,m-1),m才是素数。为减少运算量,可对上述算法稍作改进。假设m不是素数,则m必能被 2,3,m-1之间的数整除,这样,m 就可以表示为:m=i*j,(i=sqrt(m))。判断m是否是素数的条件即可简化为:判断m是否能被 2,3,sqrt(m)的数整除。可以看出这是一个需要重复判断是否能整除的问题。,/f0208.cpp 判断一个整数是否素数的稍微优化版(P:45)#include#include/sqrt()using namespace std;int main()coutm;double

33、sqrtm=sqrt(m*1.0);for(int i=2;i=sqrtm;+i)if(m%i=0)coutm isnt a prime.n;return 1;coutm is a prime.n;return 1;,四、多重循环,1多重循环的概念多重循环也称为循环的嵌套。它是指某一循环语句的循环体内又包含另一循环语句。前面讨论的三种循环语句(while、dowhile、for)可以互相嵌套。2循环语句的几种嵌套形式,(1)直接多重嵌套,循环语句的循环体内包含另一循环语句,内嵌的循环语句的循环体内又可以包含另一循环语句,依次类推,直至n重。(如图所示):,(2)并列多重循环,循环语句的循环体内

34、包含一组循环语句(如图所示)。,3多重循环应用实例,例如:画出下列图案:,分析:列出第i行,其左边空格数,M的个数与i的关系为:行i左边空格数 M的个数 1 0 19 2 1 1710 9 1 i-1 21-2*i,/f0205.cpp 字符倒三角形(P:42)#includeusing namespace std;int main()for(int i=1;i=10;+i)for(int j=1;j=i-1;+j)cout;for(int k=1;k=21-2*i;+k)coutM;coutendl;return 1;,3多重循环应用实例,例如:列出两数M到N之间的所有素数。分析:(1)根据

35、前面的分析,判断j(MjN)是否是素数的条件可简化为:判断j是否能被 2,3,sqrt(j)之间的数整除。(2)2除外的偶数一定不是素数,所以,我们只需对奇数进行判断,奇数一定不能被偶数整除,可见,判断条件可进一步简化为:判断j是否能被3,sqrt(j)之间的奇数整除。(3)该程序是一个二重循环程序,外循环用来生成m到n之间的数,内循环用来确定某一数j是否为素数。,/f0208_more.cpp 列出两数M到N之间的所有素数。#include#include#include/sqrt()using namespace std;int main()long m,n;double sqrtj;in

36、t isprime;/定义一标记变量isprime,用于标记j是否是素数,/若j为素数,则isprime置为1,否则,isprime置为0int count=0;/统计输出素数的个数coutmn;/输入if(mn)/m,n互换int temp=m;m=n;n=temp;,for(long j=m;j=n;j+)if(j=2)coutsetw(5)j;count+;if(j%2!=0)/j为奇数 sqrtj=sqrt(j);isprime=1;/开始假设j是素数/判断for(int i=3;i=sqrtj,4.注意:,(1)循环嵌套时,外层循环和内层循环间是包含关系,即内层循环必须被完全包含在外

37、层循环中,而不出现交叉的情况。(2)当程序中出现循环嵌套时,程序每执行一次外层循环,其内层循环必须循环所有的次数(即内层循环结束)后,才能进入到外层循环的下一次循环。,3.8 转向语句(P:51),C+为我们提供了四个转向语句:break、continue、goto、return。,1.break语句,(1)语法 break;(2)作用break 语句用在循环语句(while,do while,for)和开关语句(switch)中。在switch语句中,break 用来使流程跳出switch语句,继续执行 switch的下一语句。在循环语句中,break用来从最近的封闭循环体内跳出。,例:,2

38、continue语句,(1)语法continue;(2)作用 continue语句出现在循环语句的循环体中,用来结束本次循环,即:跳过本次循环体中尚未执行的语句,进入是否执行下一次循环的判断。,例如:输出100-200之间不能被3整除的数。for(int n=100;n=200;n+)if(n%3=0)continue;coutnendl;/,注意:,continue语句必须与if语句或switch语句联合使用,否则会导致死循环。continue语句与 break 语句的区别:(参见P:52 图2-3),continue语句与 break 语句的区别:,(1)continue 语句只结束本次循

39、环,而不是终止整个循环的执行;break语句则是结束整个循环,不再进行条件判断。(2)这两个语句都可以用来改变程序的控制流程。break语句可以在switch语句和各种循环语句中使用;continue 语句只能在各种循环语句中使用。,3.goto语句,(1)goto语句的语法goto 语句标号;注:语句标号用标识符表示,它的命名遵循标识符的命名规则。(2)作用goto语句将控制从它所在的地方转移到标识符所标识的语句处。,例如:查找1到10之间满足乘积为50的两个整数,找到后立即退出循环,并输出这两个数。,#include using namespace std;int main()int i,

40、j;for(i=1;i=10;i+)for(j=1;j=10;j+)if(i*j=50)goto End;End:/循环体外cout i*j=50n;return 1;,注意:,现代程序设计方法主张限制使用goto语句,因为,滥用 goto语句将使程序流程无规则,导致可读性差。当要从多重循环的深处直接跳转到循环之外时,goto语句可以发挥作用。,4.return语句,return语句又称返回语句,只用于函数定义。(1)return语句的格式return;解释:表达式E:称为返回表达式,当函数没有返回值(即:函数的返回类型为void型)时,表达式E可缺省;表达式E 的类型必须与函数的返回类型相一致;对于非void 型的函数,函数体中的return语句必不可少。,(2)return语句的作用1)把程序运行的流程跳转到该函数的调用点;2)计算返回表达式E,并把其值作为函数的返回值。,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号