关于 C++ Primer Exercise 4.12 的思考

本来觉得这道题很简单,就是从左往右,先有i!=j得出bool值,再与k比较。然而我想错了:

试验程序

#include <iostream>
using namespace std;
int main()
{
    
    
	for (int i = -2; i <= 2; i++)
	{
    
    
		for (int j = -2; j <= 2; j++)
		{
    
    
    	    for (int k = -2; k <= 2; k++)
		        if (i != j < k)
			        cout << "(i,j,k)=(" << i << "," << j << "," << k << ") true\n";
		        else cout << "(i,j,k)=(" << i << "," << j << "," << k << ") false\n";
		}
		cout << endl;
	}
	return 0;
}

Output:

(i,j,k)=(-2,-2,-2) true
(i,j,k)=(-2,-2,-1) true
(i,j,k)=(-2,-2,0) true
(i,j,k)=(-2,-2,1) true
(i,j,k)=(-2,-2,2) true
(i,j,k)=(-2,-1,-2) true
(i,j,k)=(-2,-1,-1) true
(i,j,k)=(-2,-1,0) true
(i,j,k)=(-2,-1,1) true
(i,j,k)=(-2,-1,2) true
(i,j,k)=(-2,0,-2) true
(i,j,k)=(-2,0,-1) true
(i,j,k)=(-2,0,0) true
(i,j,k)=(-2,0,1) true
(i,j,k)=(-2,0,2) true
(i,j,k)=(-2,1,-2) true
(i,j,k)=(-2,1,-1) true
(i,j,k)=(-2,1,0) true
(i,j,k)=(-2,1,1) true
(i,j,k)=(-2,1,2) true
(i,j,k)=(-2,2,-2) true
(i,j,k)=(-2,2,-1) true
(i,j,k)=(-2,2,0) true
(i,j,k)=(-2,2,1) true
(i,j,k)=(-2,2,2) true

(i,j,k)=(-1,-2,-2) true
(i,j,k)=(-1,-2,-1) true
(i,j,k)=(-1,-2,0) true
(i,j,k)=(-1,-2,1) true
(i,j,k)=(-1,-2,2) true
(i,j,k)=(-1,-1,-2) true
(i,j,k)=(-1,-1,-1) true
(i,j,k)=(-1,-1,0) true
(i,j,k)=(-1,-1,1) true
(i,j,k)=(-1,-1,2) true
(i,j,k)=(-1,0,-2) true
(i,j,k)=(-1,0,-1) true
(i,j,k)=(-1,0,0) true
(i,j,k)=(-1,0,1) true
(i,j,k)=(-1,0,2) true
(i,j,k)=(-1,1,-2) true
(i,j,k)=(-1,1,-1) true
(i,j,k)=(-1,1,0) true
(i,j,k)=(-1,1,1) true
(i,j,k)=(-1,1,2) true
(i,j,k)=(-1,2,-2) true
(i,j,k)=(-1,2,-1) true
(i,j,k)=(-1,2,0) true
(i,j,k)=(-1,2,1) true
(i,j,k)=(-1,2,2) true

(i,j,k)=(0,-2,-2) false
(i,j,k)=(0,-2,-1) true
(i,j,k)=(0,-2,0) true
(i,j,k)=(0,-2,1) true
(i,j,k)=(0,-2,2) true
(i,j,k)=(0,-1,-2) false
(i,j,k)=(0,-1,-1) false
(i,j,k)=(0,-1,0) true
(i,j,k)=(0,-1,1) true
(i,j,k)=(0,-1,2) true
(i,j,k)=(0,0,-2) false
(i,j,k)=(0,0,-1) false
(i,j,k)=(0,0,0) false
(i,j,k)=(0,0,1) true
(i,j,k)=(0,0,2) true
(i,j,k)=(0,1,-2) false
(i,j,k)=(0,1,-1) false
(i,j,k)=(0,1,0) false
(i,j,k)=(0,1,1) false
(i,j,k)=(0,1,2) true
(i,j,k)=(0,2,-2) false
(i,j,k)=(0,2,-1) false
(i,j,k)=(0,2,0) false
(i,j,k)=(0,2,1) false
(i,j,k)=(0,2,2) false

(i,j,k)=(1,-2,-2) true
(i,j,k)=(1,-2,-1) false
(i,j,k)=(1,-2,0) false
(i,j,k)=(1,-2,1) false
(i,j,k)=(1,-2,2) false
(i,j,k)=(1,-1,-2) true
(i,j,k)=(1,-1,-1) true
(i,j,k)=(1,-1,0) false
(i,j,k)=(1,-1,1) false
(i,j,k)=(1,-1,2) false
(i,j,k)=(1,0,-2) true
(i,j,k)=(1,0,-1) true
(i,j,k)=(1,0,0) true
(i,j,k)=(1,0,1) false
(i,j,k)=(1,0,2) false
(i,j,k)=(1,1,-2) true
(i,j,k)=(1,1,-1) true
(i,j,k)=(1,1,0) true
(i,j,k)=(1,1,1) true
(i,j,k)=(1,1,2) false
(i,j,k)=(1,2,-2) true
(i,j,k)=(1,2,-1) true
(i,j,k)=(1,2,0) true
(i,j,k)=(1,2,1) true
(i,j,k)=(1,2,2) true

(i,j,k)=(2,-2,-2) true
(i,j,k)=(2,-2,-1) true
(i,j,k)=(2,-2,0) true
(i,j,k)=(2,-2,1) true
(i,j,k)=(2,-2,2) true
(i,j,k)=(2,-1,-2) true
(i,j,k)=(2,-1,-1) true
(i,j,k)=(2,-1,0) true
(i,j,k)=(2,-1,1) true
(i,j,k)=(2,-1,2) true
(i,j,k)=(2,0,-2) true
(i,j,k)=(2,0,-1) true
(i,j,k)=(2,0,0) true
(i,j,k)=(2,0,1) true
(i,j,k)=(2,0,2) true
(i,j,k)=(2,1,-2) true
(i,j,k)=(2,1,-1) true
(i,j,k)=(2,1,0) true
(i,j,k)=(2,1,1) true
(i,j,k)=(2,1,2) true
(i,j,k)=(2,2,-2) true
(i,j,k)=(2,2,-1) true
(i,j,k)=(2,2,0) true
(i,j,k)=(2,2,1) true
(i,j,k)=(2,2,2) true

从中观察出规律可得:事实上这句话实际为:

i != (j < k)

因而如果j<k,输出1,再与i比较;如果j<k不成立,输出0再与i比较。


【C++ Primer(5th Edition) Exercise】练习程序 - Chapter4(第四章)

猜你喜欢

转载自blog.csdn.net/weixin_50012998/article/details/108219720