您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > ★第05章C的流程控制语句
第5章C++的流程控制语句5.1C++语言的语句和程序结构5.2选择结构语句5.3循环结构语句5.4转向语句5.5程序举例5.6程序调试方法简介作业:4~7,9,10(1),19(2),205.1C++语言的语句和程序结构•一个C++源程序:由若干个源程序文件组成。•一个源程序文件:由编译预处理命令、全局类型定义、全局变量定义、函数定义等组成。•一个函数:包括函数首部和函数体。函数体包含局部类型定义、局部变量定义、函数原型声明、编译预处理命令、若干个语句等。C++语句的分类•说明语句:完成数据类型和变量的定义。•控制语句:改变程序执行顺序的语句,包括:条件、循环、开关、转向、返回语句。•函数调用语句:在函数调用后加分号构成。如:sin(x);•表达式语句:在表达式后加分号构成。如:i=i+1;•空语句:仅由一个分号所构成,不执行任何动作。•复合语句(也称块语句):用花括号{}把一个或多个语句括起来后构成的语句。作为一个语句处理。5.2选择结构语句•选择语句也称分支语句:根据给定条件,选择执行两个或两个以上分支程序段中的某一个。•C++语言的选择语句:条件语句:if。有三种形式。开关语句:switch。条件语句•格式1:if(表达式)S其中,表达式是任何C++表达式,通常为算术表达式、关系表达式、逻辑表达式或逗号表达式;S是一个单一语句,包括复合语句和空语句。作为判断条件的表达式必须用括号括起来。•格式2:if(表达式)S1elseS2例5.1从键盘上输入三个整数,输出三个数中的最大数。分析:先读入三个数,求出前两个数中的大数,再求出该大数与第三个数之间的最大数。#includeiostream.hvoidmain(void){inta,b,c,t;cout输入三个整数:;cinabc;if(ab)t=a;elset=b;//Acout\n最大数是;//Bif(tc)coutt'\n';elsecoutc'\n';//C}A、B、C三行可用下列语句替代:t=a;if(tb)t=b;if(tc)t=c;cout\n最大数是tendl;例5.2求ax2+bx+c=0的根。a、b、c从键盘输入,a≠0。分析:当输入a、b、c的值后,若b2-4ac0,则方程无实根;若b2-4ac0,则方程有两个不同的实根;若b2-4ac=O,则方程有两个相等的实根。#includeiostream.h#includemath.hvoidmain(void){floata,b,c,delta;cout输入三个系数:;cinabc;delta=b*b-4*a*c;if(delta=0)//使用复合语句{delta=sqrt(delta);if(delta){cout方程有两个不同的实根:;cout\nx1=(-b+delta)/2/a;cout\tx2=(-b-delta)/2/a'\n';}elsecout方程有两个相等的实根:x1=x2=-b/2/a'\n';}elsecout方程没有实根!\n;}条件语句•格式3:if(表达式1)S1elseif(表达式2)S2elseif...elseSn•注意,当出现如下形式的嵌套条件语句时:if(e1)if(e2)S1elseS2C++规定:else与其前面最近的还没有配对的if进行配对。这样,上面的条件语句中else与第二个if配对。若希望else与第一个if配对,则可用{}改变:if(e1){if(e2)S1}elseS2例5.3输入三角形的三边,判断其为何种三角形。#includeiostream.hvoidmain(void){inta,b,c;cout输入三角形的三边?;cinabc;if(a+b=c||b+c=a||a+c=b)cout不能组成三角形!\n;elseif(a==b&&b==c)cout等边三角形\n;elseif(a==b||b==c||c==a)cout等腰三角形\n;elseif(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b)cout直角三角形\n;elsecout普通三角形\n;}开关语句:switch•格式:switch(表达式){case常量表达式1:[语句序列1];[break;]case常量表达式2:[语句序列2];[break;]…case常量表达式n:[语句序列n];[break;][default:语句序列]}值只能是字符型或整型可选项default分支可放在开关语句中的任何位置,通常为开关语句的最后一个分支。应加空格,否则被认为是语句标号,如case9,并不出现语法错,这类错误较难查找。常量表达式的值必须互不相同开关语句:switch•执行过程:先求表达式的值,再依次与case后面的常量表达式比较,若与某一常量表达式的值相等,则转去执行该case后边的语句序列,一直执行下去,直至遇到break语句或开关语句的右花括号为止。否则,若有default分支,则执行该分支后边的语句序列,否则什么也不执行。•与if语句相比:⑴任一开关语句均可用条件语句来实现,但反之不然。原因是开关语句限定表达式的取值类型,而条件语句中的条件表达式可取任意类型的值。⑵开关语句结构清晰,易理解。例5.4输入一个字符,判断它是元音字母还是空白符。#includeiostream.hvoidmain(void){charc;cin.get(c);switch(c){case'a':case'A':case'e':case'E':case'i':case'I':case'o':case'O':case'u':case'U':cout这是元音字母\n;break;case'':case'\n':case'\t':cout这是空白符\n;break;default:cout这是其它字符\n;}}•请画程序流程图•用if语句改写本例若default分支及其语句前移到第一个分支,则如何修改程序而保持功能不变?当省略case后面的语句序列时,则可实现多个入口,执行同一语句序列。5.3循环结构语句循环:某条件成立时,重复执行的操作。问题:计算1+2+3+…+100。分析:编程时不可能依次列出1~100个数。设变量sum--累计和值,初值为1;变量i--存放当前待累计的数,初值为2。算法:s1.给变量sum赋初值1,i赋初值2;s2.令sum=sum+i,i=i+1;s3.若i=100,则转s2;s4.输出sum的值。•s2和s3是重复执行的操作。•while、do…while和for语句实现循环,并把这三个语句称为循环结构语句。while语句•格式:while(表达式)S其中,表达式是任何表达式;语句S是任一语句,称为循环体。•执行过程:先计算表达式的值,若表达式的值不等于0,则执行语句S,再计算表达式的值,重复以上过程,直到表达式的值等于0为止。•特点:先判断后执行,故循环体有可能一次也不执行。例5.6用while语句求1+2+3+…+100的值。#includeiostream.hvoidmain(void){inti=2,//待求和的当前项s=1;//当前项前所有项的累加和while(i=100){s+=i;i++;}cout1+2+3+…+100=s'\n';}必须明确所用变量的含义及初值或:while(i=100)s+=i,i++;或:while(i=100)s+=i++;此处无须使用复合语句此处必须使用复合语句在循环体或表达式内,应有改变表达式的值的成分,否则,会产生无休止的循环(称死循环)。do…while语句•格式:do语句while(表达式);语句为任一语句,是循环体;表达式是任一表达式。•执行过程:先执行语句,后判断表达式的值;若表达式的值不为0,则继续执行循环体,直到表达式的值为0时为止。•特点:先执行后判断,故循环体至少执行一次。例5.7用do…while语句求1+2+…+100。#includeiostream.hvoidmain(void){inti=2,//待求和的当前项s=1;//当前项前所有项的累加和dos+=i++;while(i=100);cout1+2+3+…+100=s'\n';}在循环体或表达式内,应有改变表达式的值的成分,否则,会产生无休止的循环(称死循环)。分号不能忘!for语句•格式:for(表达式1;表达式2;表达式3)语句表达式1~3是任何表达式;语句是任一语句,为循环体。•特点:先判断后执行,循环体有可能一次也不执行。•执行过程:⑴计算表达式1;⑵若表达式2的值为0,则执行⑷,否则转⑶;⑶执行语句,计算表达式3,转⑵;⑷结束循环。例5.8用for语句求1+2+…+100。#includeiostream.hvoidmain(void){inti,//待求和的当前项s;//当前项前所有项的累加和for(i=2,s=1;i=100;i++)s+=i;cout1+2+3+…+100=sendl;}表达式1通常用于设置循环初值,多为赋值表达式和逗号表达式。表达式2通常用于循环结束条件的判断,多为关系表达式、逻辑表达式。表达式3通常用于改变循环的结束条件。表达式2也可省:i=2,s=1;for(;;){s+=i++;if(i100)break;}三个表达式可分别省和同时省,但两个分号不可省,三个表达式的作用不能省:i=2,s=1;for(;i=100;)s+=i++;•从循环的组成要素上讲,for语句的常用形式应为:for(循环变量初始化;循环结束条件;循环变量更新)循环体语句•例5.9输入一行字符,并按输入的顺序输出该行字符。#includeiostream.hvoidmain(void){charc;cout“输入一行字符串:\n;for(cin.get(c);c!='\n';cin.get(c))coutc;//依次输出字符coutc;//输出最后一个字符,即结束条件'\n'}•依次读取字符•直到读取的是换行符为止三种循环语句的比较•for和while语句都是先判断循环条件,循环体可能一次也不执行。而do…while语句是先执行循环体,后判断循环条件,所以循环体至少要执行一次。因此对于至少要执行一次重复结构的程序段,建议使用do…while语句,而对于其他的重复结构的程序段,可使用for或while语句。•由于for语句有三个表达式,可分别用于循环变量初始化、循环结束条件和循环控制变量的更新,所以用得最多的是for语句,其次是while语句,而do…while语句相对于前两种语句用得少一些。合理使用循环语句•合理使用循环语句,可优化程序结构,精简程序。例如,例5.9再用while和do…while语句实现:#includeiostream.hvoidmain(void){charc;cout“输入字符串:\n;cin.get(c);while(c!='\n'){coutc;cin.get(c);}coutc;}#includeiostream.hvoidmain(void){charc;cout“输入字符串:\n;do{cin.get(c);coutc;}while(c!='\n');}从例5.9的三个程序可见,本例用do…while语句时,程序最简,其次为for语句,再次为while语句。循环的嵌套及其应用•循环的嵌套:循环的内嵌语句也可以是循环语句。•例5.10输出1000以内所有完数。“完数”是指与其因子之和相等的数。例如6=1+2+3,即6是完数。输出完数按如下形式,例如,对于完数6,应显示:6=1+2+3•分析
本文标题:★第05章C的流程控制语句
链接地址:https://www.777doc.com/doc-639755 .html