程序结构和流程控制语句.docx
- 文档编号:5959174
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:33
- 大小:173.38KB
程序结构和流程控制语句.docx
《程序结构和流程控制语句.docx》由会员分享,可在线阅读,更多相关《程序结构和流程控制语句.docx(33页珍藏版)》请在冰点文库上搜索。
程序结构和流程控制语句
C++的语句类型
C++程序的组成:
一个C++程序可以由若干个源程序文件组成,一个源程序文件可以有若干个函数和编译预处理命令组成,一个函数由函数说明部分和函数执行部分组成,函数执行部分由数据定义和若干个执行语句组成。
语句是组成程序的基本单元。
C++语言的语句可以分成以下六大类:
(1)说明语句:
对变量、符号常量、数据类型的定义性说明
例如:
inta,b,c;//定义整型变量a、b、c
①仅向编译系统提供说明信息,在程序执行期间并不执行任何操作。
如,定义变量语句inta,b,c;是告诉编译系统为变量a、b、c各分配4个字节的存储空间用于存放变量的值。
程序执行时,该语句就不起任何作用了。
②说明语句可出现在函数内、外,允许出现语句的任何地方。
(2)控制语句:
能改变程序执行顺序完成控制功能的语句。
C++中控制语句主要有:
(3)函数和流对象调用语句:
函数调用语句又一次函数调用加一个分号构成一个语句,如:
【例1】分析下面程序的功能:
#include
usingnamespacestd;
函数max(a,b)的功能为求a、b两个变量中较大值的函数。
intmax(inta,intb)//自定义函数
{if(a>b)returna;
elsereturnb;
在一次函数调用后加上一个分号所构成的语句称为函数调用语句。
其一般格式为:
<函数名>(实参);例如:
m=max(a,b);该语句实现将max(a,b)的返回值赋给变量m。
}
intmain()
{inta,b,m;
cout<<"Inputa,b:
";
cin>>a>>b;
m=max(a,b);//函数调用语句
cout<<"max="< system("pause"); return0; } (4)表达式语句: 由一个表达式后加一个分号构成一个语句。 例如: 由一个赋值表达式加一个分号构成一个赋值表达式语句: y=x*x+2*x; 注意: i=i+1//是一个赋值表达式 i=i+1;//是一个赋值语句 (5)空语句: ;只有一个分号所构成的语句称为空语句。 下面就是一个空语句: ; 空语句什么也不做,它将在特殊的时候是有用的,讲循环时再细讲。 (6)复合语句(语句块): 用{}将若干语句括起来构成的语句。 “{}”后不再需要分号。 复合语句主要用于控制语句中。 例如: {t=a;a=b;b=t;}//实现a,b数值的交换。 程序的三种基本结构即顺序结构、分支结构和循环结构,都是通过语句来实现的。 1.顺序结构: 按语句顺序依次执行的结构称为顺序结构。 2.分支结构 (1)两路分支: 在两种可能的操作中按条件选取一个执行的结构称为分支结构。 (2)多路分支: 在多种可能的操作中按条件选取一个执行的结构称为分支结构, 3.循环结构: 在人们所要处理的问题中常常遇到需要反复执行某一操作的情况,计算机实现这一操作的程序就要用到循环结构。 循环结构有两种形式,即当型循环结构和直到型循环结构。 分支语句 分支语句用于实现分支程序设计。 分支程序有两路分支结构和多路分支结构,两路分支结构可用if语句实现,多路分支结构可以用嵌套的if语句或switch语句实现。 1.if语句的三种形式 (1)单选条件语句 语句格式: if(<表达式>)<语句> 执行过程: 当表达式的值为非0(真)时,执行语句, 否则不执行语句。 说明: ①表达式必须用“()”括起来; ②语句只能是单个语句或复合语句。 (2)两选条件语句 语句格式: if(<表达式>) <语句1> else <语句2> 执行过程: 当表达式的值为非0(真)时,执行语句1, 否则执行语句2。 (3)多选条件语句 多选条件语句的格式为: if(<表达式1>)<语句1> elseif(<表达式2>)<语句2> elseif(<表达式2>)<语句3> ...... elseif(<表达式n-1>)<语句n-1> else<语句n> 【例2】输入两个整数a和b,用单选条件语句实现输出其中较大的一个数。 程序流程图如右图所示。 程序如下: #include usingnamespacestd; intmain() { inta,b,max; cout<<"Inputa,b: "; cin>>a>>b; max=a; if(b>max)max=b; cout<<"max="< system("pause"); return0; } 程序执行后屏幕显示: Inputa,b: 38 max=8 【例3】输入两个整数a和b,用两选条件语句实现输出其中较大的一个数。 程序流程图如右图所示,程序代码如下: #include usingnamespacestd; intmain() { inta,b,max; cout<<"Inputa,b: "; cin>>a>>b; if(a>b)max=a; elsemax=b; cout<<"max="< system("pause"); return0; } 程序执行后提示: Inputa,b: 38 max=8 【例4】已知下列分段函数,要求编一程序,输入x,输出相应的y的值。 分段函数 程序流程图如右图所示。 程序代码如下: #include usingnamespacestd; intmain() { floatx,y; cout<<"请输入一个实数x="; cin>>x; if(x<0)y=x+1; elseif(x<10)y=x*x-5; elsey=x*x*x; cout<<"y="< system("pause"); return0; } 程序执行后提示: 请输入一个实数x=3 y=4 2.if语句的嵌套 在if语句中又包含一个或多个if语句称为if语句的嵌套。 其一般格式为: if(<表达式1>) if(<表达式2>) <语句1> else 注意: else总是与其前面最近的 还没有配对的if进行配对. <语句2> else if(<表达式3>) <语句3> else <语句4> 【例5】使用if语句嵌套的方法实现【例4】 程序流程图及程序代码如下: #include usingnamespacestd; intmain() { floatx,y; cout<<"请输入一个实数x="; cin>>x; if(x>=0) if(x>=10) y=x*x*x; else y=x*x-5; else y=x+1; cout<<"y="< system("pause"); return0; } 程序执行后提示: 请输入一个实数x=-3 y=-2 注意: 在该程序中,内层的if语句嵌套在外层的if语句的if部分。 C++规定if语句嵌套使用时,else与if的的配对关系是: else总是与其前面最近的还没有配对的if进行配对。 例如: 如果要改变这种约定,则应该用花括号构成复合语句。 例如: if(<表达式1>) {if(<表达式2>)<语句1>} else <语句2> 【例6】求三个整数a、b、c中的最大者,a、b、c由键盘输入。 (自行完成) 程序执行后提示: 请输入三个整数a,b,c: 145 a,b,c中最大的数max=5 #include usingnamespacestd; intmain() { inta,b,c,max; cout<<"请输入三个整数a,b,c: "; cin>>a>>b>>c; if(a>b) if(a>c)max=a; elsemax=c; else if(b>c)max=b; elsemax=c; cout<<"a,b,c中最大的数max="< system("pause"); return0; } 2.switch语句(开关语句): 实现多路分支程序。 执行过程: 将条件表达式的值与case后常量值比较,若相等就执行此case后语句,完后再执行下一个case语句,最后执行default后的语句。 语句格式 switch(<条件表达式>) { case<常量表达式1>: 〔<语句1>〕 case<常量表达式2>: 〔<语句2>〕 ...... case<常量表达式n-1>: 〔<语句n-1>〕 〔default: <语句n>〕 } 说明: (1)条件表达式与常量表达式只能是整型或字符型表达式; (2)每个case后面的常量表达式的值必须互不相同; (3)一个case后可有多个语句(不必用花括号),也可以没有任何语句。 注意: 在执行switch语句的过程中,每当执行完一个case后面的语句后,程序会不加判断地自动执行下一个case后面的语句。 每个case后面的常量表达式只起语句标号的作用,是switch语句中执行各语句的入口,并不在此进行条件判断 【例7】输入0~6的整数,将其转换成对应的星期几。 程序代码如下: #include usingnamespacestd; intmain() {inta; cout<<"请输入一个0-6的整数(分别对应周日至周六): "; cin>>a; switch(a) { case0: cout<<"Sunday\n"; case1: cout<<"Monday\n"; case2: cout<<"Tuesday\n"; case3: cout<<"Wednesday\n"; case4: cout<<"Thursday\n"; 在本例中,若运行程序时输入4,则执行结果为: Thursday Friday Saturday Inputdataerror case5: cout<<"Friday\n"; case6: cout<<"Saturday\n"; default: cout<<"Inputdataerror.\n"; } system("pause"); return0; } 程序执行后发现结果并不是我们希望的,而要想实现我们的要求,就应该在执行完指定的一个case分支后,使程序跳出switch语句,即终止switch语句的执行,而这操作可用break语句来实现。 3.break语句: 中止当前语句的执行,并跳转到下一条语句处执行。 语句格式: break; 若将上例程序中switch语句的内嵌代码改写如下,请分析结果; case0: cout<<"TodayisSunday\n";break; case1: cout<<"TodayisMonday\n";break; case2: cout<<"TodayisTuesday\n";break; case3: cout<<"TodayisWednesday\n";break; case4: cout<<"TodayisThursday\n";break; case5: cout<<"TodayisFriday\n";break; case6: cout<<"TodayisSaturday\n";break; default: cout<<"Inputdataerror.\n"; 注意: 从开关语句的执行过程可知,任一开关语句均可用条件语句来实现,但并不是任何条件语句均可用开关语句来实现,这是由于开关语句限定了表达式的取值类型,而条件语句中的条件表达式可取任意类型的值。 m<250(元)250≤m<500500≤m<10001000≤m<2000m≥2000 d=0%d=5%d=7.5%d=10%d=15% 【例8】商店打折售货。 购货金额数量越大,折扣越大。 具体标准如下(m: 购货金额,d: 折扣率)。 要求从键盘上输入购货金额,计算并输出实付的金额。 分析: 首先找出购货金额与折扣率之间对应关系变化的规律。 从题意知,当购货金额m每变化250元或250元的倍数时,折扣率就会变化。 用m/250来表示折扣率的分档情况,商店打折售货分档情况表: #include usingnamespacestd; intmain() {intm,c; floatd,f; cout<<"Inputm: "; cin>>m; if(m>=2000)c=8; m c=m/250 d m<250 0 0% 250≤m<500 1 5% 500≤m<1000 2,3 7.5% 1000≤m<2000 4,5,6,7 10% m≥2000 8 15% elsec=m/250; switch(c) {case0: d=0;break; case1: d=5;break; case2: case3: d=7.5;break; 根据购货金额确定好折扣率后,再计算出实付金额。 case4: case5: case6: 程序执行后提示: Inputm: 500 f=462.5 case7: d=10;break; case8: d=15;break; } f=m*(1-d/100.0); cout<<"f="< system("pause"); return0; } 【例9】2005年修改后的《中华人民共和国个人所得税法》规定,个人所得,应纳个人所得税。 具体办法是,每月收入总和扣除1600元后的金额为应缴纳所得税额,应纳税所得额不超过500元的税率为5%,超过500元至2000元的部分税率为10%,超过2000元至5000元的部分税率为15%, 超过5000元至20000元的部分税率为20%超过20000元至40000元的部分税率为25%,超过40000元至60000元的部分税率为30%,超过60000元至80000元的部分税率为35%,超过80000元至100000元的部分税率为40%,超过100000元的部分税率为45%。 现要求编写程序,从键盘上输入某人本月的总收入,输出应缴纳的税额。 (要求学生自行完成) 循环语句(共三种,即while,do…while和for) 在人们所要处理的问题中常常遇到需要反复执行某一操作的情况。 被重复执行的程序段为循环程序,实现循环结构的语句称为循环语句。 在C++中,循环语句有while语句、do…while语句和for语句。 1.while语句 (1)作用: 实现“当型”循环结构。 即当条件成 立时冲复执行while语句中的内嵌语句。 (2)格式: while(<表达式>) 语句 执行流程图如右图所示 相关说明: ①上述格式中的<表达式>称为循环条件表达式, 一般为关系表达式或逻辑表达式,必须用“()”括起来; ②语句称为循环体,也称While的内嵌语句,可以是单个或复合语句。 (3)执行过程: 先计算表达式的值,当表达式值非0时重复执行指定的语句;当表达式值为0时结束循环。 【例10】: 求从键盘上输入一个正整数n,计算S=1+2+3+4+……+n,并输出到屏幕上。 分析: 由于n可能是不断变化的,因而计算S值的程序不可能依次列出1~n个数,要完成以上的累加求和运算,可设两个整型变量sum和i,sum存放累加的和,i从1变化到n,并按下列步骤进行操作: (1)给sum赋值0,i赋值1;//循环初始化 (2)令sum=sum+i,i=i+1;//循环体与循环修改 (3)若i≤n,则重复执行步骤 (2);//判断循环是否结束 (4)输出sum的值。 //结束处理 在以上步骤中,步骤 (2)和步骤(3)是需要重复执行的操作,其工作流程如下图所示。 这种重复执行的操作可由程序中的循环结构来完成。 下面用while语句来实现。 说明: (1)while语句是先判断表达式i≤n是否成立, 若条件成立,则将sum加i后赋给sum及i增加1; 若条件不成立,则不执行相应语句,退出循环。 (2)当表达式的值一开始不成立,语句一次也不执行。 如当输入n为0时,i≤n不成立,语句sum=sum+i;和i++;一次也不执行。 (3)在循环体中必须有不断修改循环条件的语句,能使循环最终结束而不形成“死循环”。 如i++;语句,使i不断加1,直到大于n为止。 【例10】: 求从键盘上输入一个正整数n,计算S=1+2+3+4+……+n,并输出到屏幕上。 程序代码和程序流程图如下: #include usingnamespacestd; intmain() { inti,n,sum; cout<<"请输入一个正整数n="; cin>>n; sum=0; i=1; while(i<=n) {sum=sum+i; i++; } cout<<"sum="< system("pause"); return0; } 【例11】用while语句计算T=n! (n! =1×2×3×4…×n)。 程序代码和程序流程图如下(用while语句): #include usingnamespacestd; intmain() { inti,n,mult; cout<<"请输入一个正整数n="; cin>>n; mult=1; i=1; while(i<=n) {mult=mult*i; i++; } cout<<"mult="< system("pause"); return0; } 2.do…while语句 (1)作用: 实现“直到型”循环结构。 即重复执 行while语句中的内嵌语句直到条件不成立时停止。 (2)格式: do <语句> while(<表达式>); 注意: 这里的语句与表达式跟上面讲到的while语句当中的意义完全相同,只是while语句是先判断条件再执行循环体语句,而在do…while语句的执行过程是: 先执行语句,然后计算表达式的值,当表达式值非0时重复执行语句;直到表达式值为0才结束循环。 【例12】用do…while语句实现【例10】 程序流程图及程序代码如下: #include usingnamespacestd; intmain() { inti,n,sum; cout<<"请输入一个正整数n="; cin>>n; sum=0; i=1; do {sum=sum+i; i++; } while(i<=n); cout<<"1到"< system("pause"); return0; } 说明: (1)do…while语句是先执行sum=sum+i;和i++;语句,后判断表达式i≤n是否成立。 若条件成立,则继续执行循环体;若条件不成立,则不执行相应语句,退出循环。 (2)即使表达式的值一开始就不成立,语句仍要执行一次。 如当输入n为0时,i≤n不成立,但语句sum=sum+i;和i++;也要执行一次。 (3)在循环体中要能不断修改循环条件的语句,最终能使循环结束,否则会形成“死循环”。 【例13】用do…while语句实现【例11】。 (要求学生自行完成程序流程图并调试程序) 3.for语句 for语句的一般格式为: for(<表达式1>;<表达式2>;<表达式3>)<语句> 说明: (1)表达式1称为循环初始化表达式,通常为循环变量赋初值; (2)表达式2称为循环条件表达式,通常是关系表达式或逻辑表达式作循环结束条件; (3)表达式3称为循环增量表达式,通常为赋值表达式,简单情况下为循环变量增量。 (4)语句部分为循环体,它可以是单个或复合语句。 for语句的执行过程 (1)计算表达式1的值; (2)计算表达式2的值, 若表达式2的值为非0(“真”)时,则转到(3); 若表达式2的值为0(“假”)时,则结束循环; (3)执行循环体语句; (4)计算表达式3的值,返回 (2)继续执行。 for语句的执行过程如右图所示。 3.for语句可以和下列while语句等效: <表达式1>; while(<表达式2>) { <语句> <表达式3>; } 【例14】用for语句实现【例10】 #include usingnamespacestd; intmain() { inti,n,sum; cout<<"请输入一个正整数n="; cin>>n; sum=0; for(i=1;i<=n;i++)sum=sum+i; cout<<"1到"< system("pause"); return0; } 在上例中,表达式1: i=1完成对循环变量i的初始化赋值工作,使i的初值为1; 表达式2: i<=n判断循环变量i的值是否小于或等于n,若不成立则结束循环; 若成立则执行sum=sum+i;语句,再执行表达式3; 表达式3: i++,使用循环变量i加1。 转表达式2继续判断i<=n是否成立。 说明: (1)for语句中的三个表达式都可省略,但其中的两个分号不能省略; (2)若表达式1省略,则应在for语句之前给循环变量赋初值。 例如: i=1;for(;i<=n;i++)sum=sum+i; (3)若表达式2省略,则不判断循环条件,循环无终止地进行下去,形成“死循环”,即认为表达式2始终为真,因此表达式2通常不能省略; (4)若表达式3省略,则在循环体中应有能不断修改循环条件的语句。 例如: for(i=1;i<=n;){sum=sum+i;i++;} (5)若省略表达式1和表达式3,只有表达式2,即只给出循环条件。 例如: i=1;for(;i<=n;){sum=sum+i;i++;} 此时,for语句和while语句完全相同。 上述语句相当于: i=1;while(i<=n){sum=sum+i;i++;} (6)表达式1和表达式3可以是一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序结构 流程 控制 语句