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 |
1111 | 2 |
1121 | 1 |
12344 | 4 |
结果说明:
只有“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 | /(空) |
10 | 2 |
11 | 1 |
![](https://i-blog.csdnimg.cn/blog_migrate/5f488c93295a09b9b846abc5c5e204e3.png)
你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;
}
结果:
输入 | 输出 |
110 | 1 |
111 | 1 |
101 | 2 |
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;
}