您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: