【本文鏈接】
http://www.cnblogs.com/hellogiser/p/max-of-numbers-without-comparations.html
【題目】
不使用if-else和比較運算符,求解2個整數中的較大數。
【分析】
(1) 如果a>=b,那麼返回a,否則返回b。
(2) 也就是說,如果a-b>=0,那麼返回a,否則返回b。
(3)如果a-b>=0,讓k=0,否則讓k=1,返回a-k*(a-b)。
(4)從(3)中可以看出,如果讓k等於a-b這個數字的符號位,那麼剛好可以滿足要求。
(5)讓c=a-b,k等於c的符號位,返回a-k*c。
【代碼】
C++ Code 1【本文鏈接】
http://www.cnblogs.com/hellogiser/p/max-of-numbers-without-comparations.html
if中的判斷語句判斷錯誤.
是 if(ch == '+') 而不是 if(ch = '+')
if(ch = '+')恆為真.下面的3個if同理,所以無論是哪種運算符,全部會執行.
正確代碼如下:
#include <stdio.h>
int main(void)
{
int a,b,s;
char ch;
printf("請輸入兩個數及其關系:\n");
scanf("%d%c%d",&a,&ch,&b);
if(ch=='+')
printf("%d+%d=%d\n",a,b,s=a+b);
if(ch=='-')
printf("%d-%d=%d\n",a,b,s=a-b);
if(ch=='*')
printf("%d*%d=%d\n",a,b,s=a*b);
if(ch=='/')
printf("%d/%d=%d\n",a,b,s=a/b);
}
最後, 要避免此類錯誤,最好把常量寫前面. 這樣寫if('+' == ch).這樣寫的好處在於如果寫成了if('+' = ch)會出現編譯錯誤.而if(ch = '+')編譯器發現不了此類錯誤.
用if else方便,你用switch更麻煩
如果要取大的話可用max
c=max(a,b);
就不用這個了
if (a>b)
{
}
else
{
}