别有洞天——三个数是否相等
2017-11-21 本文已影响0人
莫一是
明解C语言的练习3-9要求如下:
输入三个整数,如果三个数相等,显示“三个值都相等”;如果其中有两个数相等,则显示“有两个值相等”;如果三个数都不相等,则显示“三个数各不相同”。
乍一看,这好像是一道送分题 ( ̄▽ ̄)"
你也许和我一样,迫不及待地写下了这段代码:
第一感觉
然而,机智如我敏锐地察觉到了不对。按数学定义a==b||a==c||b==c是包含a==b==c的情况的!
也就是说,这段代码的选择分支重叠了。
运行结果是
运行结果2
上网查了下,有一位刷过明解C的前辈,晒出的练习代码也和上文有着一样的问题。
既然有了问题,就要动手解决它。
最后,我的代码如下:
最终代码
事实上,我最先改过的代码是这样的
#include <stdio.h>
int main(){
int a,b,c;
puts("请输入三个整数。");
printf("整数A:"); scanf("%d",&a);
printf("整数B:"); scanf("%d",&b);
printf("整数C:"); scanf("%d",&c);
if(a==b==c)
puts("三个值都相等。");
else if((a==b&&a!=c)||(a==c&&a!=b)||(b==c&&a!=b))
puts("有两个值相等。");
else
puts("三个值各不相同。");
return 0;
}
但不知道为什么,a==b==c的条件在运行时,总是不能正确计算a=2,b=2,c=2的情况。无奈,改为了最终代码的形式。为什么不能正确计算?现在的我也不知道 ━━( ̄ー ̄*|||━━
总之,这个练习告诉我们:没学好概率论的程序员不是一个好的程序员!
o( ̄▽ ̄)ブ