2.3 分支结构-if语句的嵌套
2016-06-11 10:24
381 查看
如果if语句中的“内嵌语句”(即语句1或语句2)也是if语句,就构成了“嵌套if语句”。
嵌套if语句有2种形式:
嵌套在else分支中,格式如下:
if (表达式1) 语句1;
else if (表达式2) 语句2;
else if …
else语句n;
嵌套在if分支中,格式如下:
if (表达式1){
if (表达式2) 语句1;
else 语句2 ;
}
else 语句3;
C++规定:在嵌套if语句中,if和else按照“就近配对”的原则配对,即相距最近且还没有配对的一对if和else首先配对。
试分析下面的2组语句有何区别?
//语句1:
if(n%3==0)
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
else cout<<n<<″是3的倍数但不是5的倍数<<endl; //else与第二个if配对
//语句2:
if(n%3==0){
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
}
else cout<< n <<″不是3的倍数″; //else与第一个if配对
两个语句的差别虽然仅在于一对“{}”,但逻辑关系却完全不同。
关于if嵌套语句的几点说明:
if语句用于解决二分支的问题,嵌套if语句则可以解决多分支问题。
2种嵌套形式各有特点,应用时注意区别,考虑一下是否可以互相替换。
由上述2个语句可以看出:if中嵌套的形式较容易产生逻辑错误,而else中嵌套的形式配对关系则非常明确,因此从程序可读性角度出发,建议尽量使用在else分支中嵌套的形式。
【例2.6】用嵌套if语句完成改写【例2.5】, 求三个整数中的最大值。
#include <iostream>
using namespace std;
int main(){
int a, b, c, max;
cout<<"输入三个整数:";
cin>>a>>b>>c;
if(a>b&&a>c) max=a;
else if(b>a&&b>c) max=b;
else max=c;
cout<<"最大数为:max="<<max<<endl;
return 0;
}
【例2.7】某商场优惠活动规定,某商品一次购买5件以上(包含5件)10件以下(不包含10件)打9折,一次购买10件以上(包含10件)打8折。设计程序根据单价和客户的购买量计算总价。
#include <iostream>
using namespace std;
int main(){
float price,discount,amount; //单价、折扣、总价
int count; //购买件数
cout<<"输入单价:"<<endl;
cin>>price;
cout<<"输入购买件数:"<<endl;
cin>>count;
if(count<5) discount=1;
else if(count<10) discount=0.9;
else discount=0.8;
amount=price*count*discount;
cout<<"单价:"<< price<<endl;
cout<<"购买件数:"<<count<<"\t\t"<<"折扣:"<<discount<<endl;
cout<<"总价:"<<amount<<endl;
return 0;
}
【例2.8】求一元二次方程ax2+bx+c=0的根。系数a(a≠0)、b、c由键盘输入。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
float a,b,c;
float delta,x1,x2;
cout<<"输入三个系数a(a!=0), b, c:"<<endl;
cin>>a>>b>>c;
cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;
delta=b*b-4*a*c;
if(delta==0){
cout<<"方程有两个相同实根:";
cout<<"x1=x2="<<-b/(2*a)<<endl;
}
else if(delta>0){
delta=sqrt(delta);
x1=(-b+delta)/(2*a);
x2=(-b-delta)/(2*a);
cout<<"方程有两个不同实根:";
cout<<"x1="<<x1<<'\t'<<"x2="<<x2<<endl;
}
else cout<<"方程无实根!"<<endl;//delta<0
return 0;
}
嵌套的基本格式
嵌套if语句有2种形式:嵌套在else分支中,格式如下:
if (表达式1) 语句1;
else if (表达式2) 语句2;
else if …
else语句n;
嵌套在if分支中,格式如下:
if (表达式1){
if (表达式2) 语句1;
else 语句2 ;
}
else 语句3;
配对原则
C++规定:在嵌套if语句中,if和else按照“就近配对”的原则配对,即相距最近且还没有配对的一对if和else首先配对。试分析下面的2组语句有何区别?
//语句1:
if(n%3==0)
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
else cout<<n<<″是3的倍数但不是5的倍数<<endl; //else与第二个if配对
//语句2:
if(n%3==0){
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
}
else cout<< n <<″不是3的倍数″; //else与第一个if配对
两个语句的差别虽然仅在于一对“{}”,但逻辑关系却完全不同。
关于if嵌套语句的几点说明:
if语句用于解决二分支的问题,嵌套if语句则可以解决多分支问题。
2种嵌套形式各有特点,应用时注意区别,考虑一下是否可以互相替换。
由上述2个语句可以看出:if中嵌套的形式较容易产生逻辑错误,而else中嵌套的形式配对关系则非常明确,因此从程序可读性角度出发,建议尽量使用在else分支中嵌套的形式。
应用举例
【例2.6】用嵌套if语句完成改写【例2.5】, 求三个整数中的最大值。#include <iostream>
using namespace std;
int main(){
int a, b, c, max;
cout<<"输入三个整数:";
cin>>a>>b>>c;
if(a>b&&a>c) max=a;
else if(b>a&&b>c) max=b;
else max=c;
cout<<"最大数为:max="<<max<<endl;
return 0;
}
【例2.7】某商场优惠活动规定,某商品一次购买5件以上(包含5件)10件以下(不包含10件)打9折,一次购买10件以上(包含10件)打8折。设计程序根据单价和客户的购买量计算总价。
#include <iostream>
using namespace std;
int main(){
float price,discount,amount; //单价、折扣、总价
int count; //购买件数
cout<<"输入单价:"<<endl;
cin>>price;
cout<<"输入购买件数:"<<endl;
cin>>count;
if(count<5) discount=1;
else if(count<10) discount=0.9;
else discount=0.8;
amount=price*count*discount;
cout<<"单价:"<< price<<endl;
cout<<"购买件数:"<<count<<"\t\t"<<"折扣:"<<discount<<endl;
cout<<"总价:"<<amount<<endl;
return 0;
}
【例2.8】求一元二次方程ax2+bx+c=0的根。系数a(a≠0)、b、c由键盘输入。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
float a,b,c;
float delta,x1,x2;
cout<<"输入三个系数a(a!=0), b, c:"<<endl;
cin>>a>>b>>c;
cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;
delta=b*b-4*a*c;
if(delta==0){
cout<<"方程有两个相同实根:";
cout<<"x1=x2="<<-b/(2*a)<<endl;
}
else if(delta>0){
delta=sqrt(delta);
x1=(-b+delta)/(2*a);
x2=(-b-delta)/(2*a);
cout<<"方程有两个不同实根:";
cout<<"x1="<<x1<<'\t'<<"x2="<<x2<<endl;
}
else cout<<"方程无实根!"<<endl;//delta<0
return 0;
}
相关文章推荐
- SHELL编程之执行过程
- 构建之法阅读笔记09
- 面试总结之数据结构
- Quartus II建立工程及其仿真
- java学习笔记之类加载器
- 2.2 分支结构-if语句
- 面向对象中的——static
- 2.1 算法的概念与表示方法
- OpenGL ES 2.0Shader相关介绍
- 1.12 输入输出格式的控制
- vSphere部署系列之04――ESXi的安装和配置
- HTML+CSS3-》第1阶段:Web前端开发基础环境配置
- bzoj2453
- Mybatis配置详解
- 1.11 输入输出
- 博客地址更新
- python基础学习--购物车小程序
- install minicom in ubuntu
- 1.10 数组与字符数组
- document.body.innerHTML用jquery如何表示