第3章语句与基本控制结构讲述素材.ppt_第1页
第3章语句与基本控制结构讲述素材.ppt_第2页
第3章语句与基本控制结构讲述素材.ppt_第3页
第3章语句与基本控制结构讲述素材.ppt_第4页
第3章语句与基本控制结构讲述素材.ppt_第5页
免费预览已结束,剩余50页可下载查看

下载本文档

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

文档简介

第3章语句与基本控制结构,C+语言程序设计,中山大学信息科学与技术学院,2,主要内容,C+语句概述程序的基本控制结构选择语句循环语句应用举例,3,引言,C+程序中最小的执行单位是语句符合C+语法规则的语句才能通过编译语义错误通常会导致程序出错C+程序中的语句通常是按顺序依次逐条执行的,要改变这种执行顺序,需要使用控制语句,4,1、C+语句概述,程序由语句组成分号(;)是语句的标志(例外:块语句无分号)按照语句的结构形式和功能,C+中的语句大致可以划分为带标号语句(labeled-statement)表达式语句(expression-statement)复合语句(compoundstatement)声明语句(declarationstatement)try块(tryblock)转移语句(jumpstatement)选择语句(又称分支语句(selectionorbranchstatement)循环语句(iterationorloopstatement),5,1、C+语句概述(续),带标号语句语句的起首是一个标号,该标号有的可以由程序员自己定义,有的是C+中的关键字(保留字)三种形式标识符语句形如:标识符:语句与goto语句搭配使用case语句形如:case常量表达式:语句只用在switch语句中default语句形如:default:语句只用在switch语句中,6,1、C+语句概述(续),表达式语句由表达式(可选)和分号组成expression;空语句(nullstatement);/nullstatementC+中最简单的语句-只由一个分号组成当计算机执行空语句时,并不产生任何动作空语句的作用是在语法while(cina,7,1、C+语句概述(续),表达式语句(续)赋值语句、输入语句、输出语句a=(x+y)%z)/m;/赋值语句cinb;/输入语句coutYounameissa;while(a!=found)couta;,9,1、C+语句概述(续),声明语句描述名字(即标识符)在计算机中如何解释,如:存储类别数据类型变量名=初值,变量名=初值;存储类别const数据类型常量名=初值,常量名=初值;定义性声明vs.引用性声明变量的定义性声明(又称定义)导致内存空间的分配,而引用性声明不会导致内存分配整个程序中,一个标识符的定义性声明只能有一次,而引用性声明可以有多次C+语言规定:先定义,后使用未指定存储类别为extern的变量声明都是定义性声明,10,1、C+语句概述(续),try块用于C+中的异常处理,详见第12章,11,1、C+语句概述(续),转移语句用于无条件地改变程序语句的执行顺序break语句break;只能用在switch语句和循环语句(while、do-while和for语句)中执行break语句将导致直接包含该语句的switch语句或循环语句中止执行continue语句continue;只能用在循环语句中作用:中止循环的当次迭代,转入下次迭代(循环体的一次执行称为一次迭代),12,1、C+语句概述(续),转移语句(续)return语句return;或return表达式;只能用在函数中作用:结束当前正在执行的函数,将控制权返回给函数调用者,并将函数值传递给调用者goto语句goto语句标号;将控制权转移到带有语句标号的语句,而这个语句标号是任意合法的标识符,要求位于当前函数内,否则会导致使用未经初始化的变量的错误,13,例:,intjudge(intn)if(n=0)/如果n等于0,返回值0return0;if(n0)/如果n大于0,返回值1return1;if(nn;Fctor:f=f*i;i+;if(i=n)gotoFctor;coutFactorialofn=fendl;return0;,for(inti=1;i6)if(x9)coutgrade1;elsecout9)coutgrade1;elsecoutx;if(x=90)cout=95)cout=80)cout=85)coutB+;elsecout=70)cout=75)cout=60)cout=65)coutD+;elsecoutD;elseif(x60)coutYoufailintheexam!endl;coutE;,24,3、选择语句(续),switch语句用于实现多分支选择形式:switch(条件)语句条件必须是整型(即short,int,long,char,bool)、枚举类型(enum)或类类型(该类类型必须具有将类类型转换成整型或枚举类型的类型转换函数)语句包含两种带标号语句case子句。形如:case常量表达式:语句序列default子句。形如:default:语句序列case子句可有多个,但default子句最多只有一个,25,3、选择语句(续),switch语句(续)执行流程:首先对条件求值,若结果值与某个case子句中的常量表达式的值相等,则执行此case子句中的语句序列,否则:若有default子句则执行default子句,若无default子句则执行switch语句后的下一语句分支较多时,应优先考虑采用switch语句实现,使程序更具可读性恰当使用break,26,例:若answer的值是字符B,则输出结果是?,switch(answer)casea:caseA:coutTheansweriswrong!endl;break;caseb:caseB:coutSorry,youdidnotgettherightanswer!endl;break;casec:caseC:coutCongratulation!Theansweriscorrect!endl;break;cased:caseD:coutYouranswerisnottherightone!endl;break;casee:caseE:coutWronganswer!endl;break;default:coutYouinputtedaninvalidanswer!endl;break;,27,例:若answer的值是字符b,则输出结果是?,switch(answer)casea:caseA:coutTheansweriswrong!endl;caseb:caseB:coutSorry,youdidnotgettherightanswer!endl;casec:caseC:coutCongratulation!Theansweriscorrect!endl;cased:caseD:coutYouranswerisnottherightone!endl;casee:caseE:coutWronganswer!endl;default:coutYouinputtedaninvalidanswer!endl;,28,一种常见的错误:,switch(answer)casea,A:coutTheansweriswrong!endl;caseb,B:coutSorry,youdidnotgettherightanswer!endl;casec,C:coutCongratulation!Theansweriscorrect!endl;cased,D:coutYouranswerisnottherightone!endl;casee,E:coutWronganswer!endl;default:coutYouinputtedaninvalidanswer!t;while(t!=-1)sum+=t;count+;cint;coutaveragetemperature:sum/countendl;,导致事件改变的语句,哨兵:-1,34,4、循环语句(续),/标志控制循环的例子intn=0,count=0;boolfound=true;while(found)n+;if(n%3=2),设置标志初值,修改标志的值,35,4、循环语句(续),do-while语句形式:do语句while(条件);do-while语句与while语句的区别while语句先判断条件再根据判断的结果决定是否执行循环体,而do-while语句先执行循环体一次,再判断条件,根据判断的结果决定是否继续执行循环体do-while语句至少执行循环体一次,而while语句有可能一次都不执行,36,4、循环语句(续),/标志控制循环的例子intn=0,count=0;boolfound=true;don+;if(n%3=2),37,4、循环语句(续),for语句形式:for(初始化语句条件;表达式)语句与以下形式的while语句等价初始化语句while(条件)语句表达式;,38,4、循环语句(续),for语句(续)执行流程:先执行初始化语句,然后判断条件。如果判断结果为true则先执行是语句,然后对表达式求值,然后再判断条件并根据结果看是否再次执行语句和对表达式求值,依次类推;如果条件的判断结果为false,则结束整个for语句,跳出该循环,39,4、循环语句(续),for语句(续)初始化语句,可以是声明语句、表达式语句或者空语句,它们都以分号结束,因此可将for语句的语法形式写为for(初始化式;条件;表达式)语句for后面的括号中的三个部分都可以省略,但是两个分号却不可省略初始化语句的目的是给循环变量赋初值,如果是一个循环变量的声明语句(同时赋初值),则该变量的作用域是本for语句,这一点与上述等价的while语句不同,40,当把循环变量的赋初值放在for语句之前时,初始化语句即成为空语句,intsum;sum=0;for(inti=1;i=100;i+)sum=sum+i;,intsum;inti;sum=0;i=1;for(;i=100;i+)sum=sum+i;,虽然功能相同,但是变量i的作用域不同:前例中的i当for语句执行完毕后其存储空间就被系统收回,但在后例中,当for语句执行完毕后,i仍然可以被其后的语句访问,41,4、循环语句(续),for语句(续)条件可以是表达式或为空。如果条件为空,表示放置的是true,即for(初始化式;条件;表达式),因此该循环成为死循环(除非循环体中有break语句)intsum;sum=0;for(inti=1;i+)if(i=100)break;sum=sum+i;注意:这种做法对程序的清晰性、可读性没有什么好处!,42,4、循环语句(续),for语句(续)表达式部分通常对循环变量进行更新,当该部分省略时,循环体内应该有相应语句对循环变量进行更新,否则也会导致死循环intsum;sum=0;for(inti=1;i=100;)sum=sum+i;i+;注意:这种做法对程序的清晰性、可读性没有什么好处!,43,4、循环语句(续),break语句及其在循环语句中的使用break语句的作用:终止该语句所在块的执行例:将50到100之间的所有素数显示在标准输出设备上,44,#include#include/使用其中的函数sqrtusingnamespacestd;intmain()inti,j;boolisPrime;isPrime=true;for(i=50;i100;i+)for(j=2;j=int(sqrt(i);j+)if(i%j=0)isPrime=false;break;if(isPrime)coutiendl;isPrime=true;return0;,此程序有什么可以改进的地方?,45,4、循环语句(续),continue语句及其在循环语句中的使用continue语句的作用:终止循环中当次迭代的执行,转而执行下一次迭代例:计算110000这10000个整数中素数的个数和非素数的个数,46,/预处理指示等(略)intmain()inti,j;intprimeCnt,nonPrimeCnt;primeCnt=0;nonPrimeCnt=0;for(i=1;i=10000;i+)if(i=1|i=2|i=3)primeCnt+;elsefor(j=2;j=int(sqrt(i);j+)if(i%j=0)nonPrimeCnt+;break;elseif(jint(sqrt(i)continue;primeCnt+;/输出结果(略)return0;,此程序有什么可以改进的地方?,47,3.5应用举例,问题描述要求编程实现一个猜三个随机数之和的游戏。在每一局游戏中,系统随机产生三个1到6的数字,来模仿掷三个骰子得到的朝上的那个面的点数。游戏者有三次机会去猜这三个数字之和,猜中则获胜,猜不中则失败。具体玩法是:游戏者从键盘输入答案,每次的输入都能从系统中获得反馈信息,被告知所输入的数值与真正答案之间的关系。游戏者最多有三次输入机会,三次机会用完后仍然猜不中,则失败,如果第三次输入前已经猜中,游戏者获胜,本局游戏结束。编程要求:游戏开始前给出游戏的说明信息;游戏者总共最多有三次输入答案机会,游戏者每次输入答案后系统需要给出提示信息;如果游戏者三次输入都猜不中,则给出失败提示,如猜中则给出获胜祝贺提示;当一局游戏结束时,询问游戏者是否继续再玩下一局,如果游戏者输入为Y或y,则开始新的一局游戏,如果输入为其他字符,则终止整个程序,48,3.5应用举例,分析与设计由于要求游戏者可以不断进行游戏,因此需要使用循环语句,这是最外层的循环,我们记这个while循环为loop00。这个循环属于标志控制循环,其循环体中依次进行如下步骤:生成三个随机数并求和用计数循环来给游戏者最多三次的输入机会,当游戏者猜中时,使用break语句跳出循环。记这个for循环为loop02如果游戏者3次猜不对,则揭晓答案并给出失败提示询问用户是否继续玩这个游戏,判断用户输入的字符并作相应处理,49,3.5应用举例,程序的运行逻辑,50,/*/diceGame.cpp/功能:一个猜数游戏程序,主要用来演示选择语句和循环语句的使用/*#include/使用cin,cout和endl#include/使用函数rand()和srand(seed)#include/使用其中的函数time()获取系统时间,作为srand(seed)中的seedusingnamespacestd;int

温馨提示

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

评论

0/150

提交评论