程序结构和程序控制语句.docx

上传人:b****5 文档编号:28459091 上传时间:2023-07-13 格式:DOCX 页数:32 大小:169.73KB
下载 相关 举报
程序结构和程序控制语句.docx_第1页
第1页 / 共32页
程序结构和程序控制语句.docx_第2页
第2页 / 共32页
程序结构和程序控制语句.docx_第3页
第3页 / 共32页
程序结构和程序控制语句.docx_第4页
第4页 / 共32页
程序结构和程序控制语句.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

程序结构和程序控制语句.docx

《程序结构和程序控制语句.docx》由会员分享,可在线阅读,更多相关《程序结构和程序控制语句.docx(32页珍藏版)》请在冰豆网上搜索。

程序结构和程序控制语句.docx

程序结构和程序控制语句

C++的语句类型

C++程序的组成:

一个C++程序可以由若干个源程序文件组成,一个源程序文件可以有若干个函数和编译预处理命令组成,一个函数由函数说明部分和函数执行部分组成,函数执行部分由数据定义和若干个执行语句组成。

语句是组成程序的基本单元。

C++语言的语句可以分成以下六大类:

(1)说明语句:

对变量、符号常量、数据类型的定义性说明

例如:

inta,b,c;//定义整型变量a、b、c

①仅向编译系统提供说明信息,在程序执行期间并不执行任何操作。

如,定义变量语句inta,b,c;是告诉编译系统为变量a、b、c各分配4个字节的存储空间用于存放变量的值。

程序执行时,该语句就不起任何作用了。

②说明语句可出现在函数内、外,允许出现语句的任何地方。

(2)控制语句:

能改变程序执行顺序完成控制功能的语句。

C++中控制语句主要有:

(3)函数和流对象调用语句:

函数调用语句又一次函数调用加一个分号构成一个语句,如:

【例1】分析下面程序的功能:

#include

usingnamespacestd;

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";

注意:

从开关语句的执行过程可知,任一开关语句均可用条件语句来实现,但并不是任何条件语句均可用开关语句来实现,这是由于开关语句限定了表达式的取值类型,而条件语句中的条件表达式可取任意类型的值。

【例8】商店打折售货。

购货金额数量越大,折扣越大。

具体标准如下(m:

购货金额,d:

折扣率)。

要求从键盘上输入购货金额,计算并输出实付的金额。

#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可以是一个简单的表达式,也可以是其它表达式,当然可以是逗号表达式,即用逗号“,”隔开的多个简单表达式,它们的运算顺序是从左到右顺序进行。

例如:

for(sum=0,i=1;i<=n;i++)sum=sum+i;

由此可见,用for语句比用while语句书写更简洁。

【例15】用for语句【例11】(学生自行完成)

核心代码就一句话:

for(t=1.0,i=1;i<=n;i++)t=t*i;

【例16】分析下列程序的执行过程,

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

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1