C语言日记 10 if的嵌套语句(分支结构程序设计)

本文详细讨论了C++中if语句的嵌套和else配对规则,通过实例解释了else总是与它前面最近的未配对过的if匹配。同时,通过代码示例展示了if-else结构的流程图,强调了理解else配对的重要性,避免在编程中产生误解和错误。
摘要由CSDN通过智能技术生成

if语句的嵌套

同样的,在这里,我们又遇到(犯)了和之日记9相同的错误:

#include <iostream>
using namespace std;
int main()
{
    int a, b;
    cin >> a, b;
    if (a == 1)
        if(b==2)
        a = a + 1;
    cout << a;
}

一.

if(<表达式1>)

if(<表达式2>)语句

例:

#include <iostream>
using namespace std;
int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a == b)//表达式1
        if (c == 1)//表达式2
            d = d + 1;//语句1
    cout << d;
}

结果:

输入输出
1211

1

11112
11211
123444

结果说明:

只有“if (a == b)//表达式1”,“if (c == 1)//表达式2”同时满足时,

才执行“d = d + 1;//语句1” ,即:

 二.

    if (<表达式 1>)
        if(<表达式2>)
        语句1; 
        else 
          if (<表达式3>)
            语句2;

例:

#include <iostream>
using namespace std;
int main()
{
    int a, b, c;
    cin >> a >> b >> c ;
    if (a == 1)
        if (b == 1)
            cout << "1" << endl;
        else
            if (c == 1 )
                cout << "2" <<endl;
}

这里,就涉及到嵌套配对问题。

嵌套配对问题: 

书P42:

    if (表达式 1)
    if (表达式2)
        语句 1; 
    else 
        语句 2;

其else与哪个if配对?

应理解为

    if (表达式 1)
        if (表达式2)
            语句 1; 
    else 
        语句 2;

还是理解为

    if (表达式 1)
        if (表达式2)
            语句 1;
        else 
        语句 2;

转化为具体程序,即:

    if (a==1)
    if (b==1)
        cout << 1 << endl;
    else
        cout << 2 << endl;

等价于

        if (b == 1)
            cout << 1 << endl;
    else
        cout << 2 << endl;

还是

    if (a == 1)
        if (b == 1)
            cout << 1 << endl;
        else
        cout << 2 << endl;

书P42:

为了避免这种二义性,C++语言规定:

else 总是与它前面最近的未配对过的if迁配。

因此对上述例子应按后一种情况理解。

实践出真知:

有意思的是:

tm这两种编译方式最后结果输入一样的输入我们会得到同样的输出

也就是说,这两种方式在运行时没有任何区别。即:

输入

输出

00

/(空)

01

/(空)

102
111
cnmd
你tm把老子当傻逼是吧?
耍得老子团团转
 

 当然,经过半天的费尽周折,这里作者想要表达的意思我们是明白了:

即:

对上面的if嵌套程序,

"认为else后的语句对应表示的是:

上面所有条件(两个if语句)都被满足(为真)

以外的所有情况

都执行的操作"

这样的理解方式是错的

 如书P42所言:

C++语言规定:

else 总是与它前面最近的未配对过的if迁配。

(同理)同样的,对于前面我们最开始提到的(有关于嵌套)的:

 二.

    if (<表达式 1>)
        if(<表达式2>)
        语句1; 
        else 
          if (<表达式3>)
            语句2;

例:

#include <iostream>
using namespace std;
int main()
{
    int a, b, c;
    cin >> a >> b >> c ;
    if (a == 1)
        if (b == 1)
            cout << "1" << endl;
        else
            if (c == 1 )
                cout << "2" <<endl;
}

结果:

输入

输出

1101
1111
1012
010/(空)
001/(空)

画出流程图,即:

 

  书P42例3-6:

#include <iostream>
using namespace std;
int main()
{
    int a, b;
    cout << "please input a,b:      ";
        cin>>a>>b;
        if (a != b)
            if (a > b)
                cout << "a>b" << endl;
            else
                cout << "a<b" << endl;
        else
            cout << "a=b" << endl;
}

流程图如下:

  书P43例3-7:

#include <iostream>
using namespace std;
int main()
{
    int a, b;
    cout << "please input a,b:   ";
        cin>>a>>b;
        if (a > b)   cout << "a>b" << endl;
        else if (a < b)   cout << "a<b" << endl; 
        else   cout << "a=b" << endl;
}

流程图如下:

例3-8:

用条件表达式对例3-4重新编程。源程序:

#include <iostream>
using namespace std;
int main()
{
    int a, b, max;
    cout << "Please input two numbers: " << endl;
    cin >> a >> b;
    max = a > b ? a : b;
    cout << "max=" << max << endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值