您的位置:首页 > 编程语言 > C语言/C++

C++ if语句的嵌套

2017-02-07 12:13 357 查看
如果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;

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