邏輯或 ‘||’ ,原來你是這樣的
阿新 • • 發佈:2018-12-11
前兩天做了一道題:輸出 1~100 之間出現 9 的次數。
這道題算是讓我差點掉到 或 ‘||’ 的坑裡,所幸我一開始的程式是對的,對比之後發現了問題所在,我們來看程式:
int main()
{
int i, count = 0;
for(i = 1; i <= 100; i++)
{
if(i%10 == 9)
count++;
if(i/10 == 9)
count++;
}
printf("%d\n", count);
system("pause");
return 0;
}
我當時就想的是兩者中間用 或 ‘||’ 豈不是能使程式更簡單,但是執行出來結果少了一次:
int main()
{
int i, count = 0;
for(i = 1; i <= 100; i++)
{
if((i%10 == 9)||(i/10 == 9))
count++;
}
printf("%d\n", count);
system("pause");
return 0;
}
原因是 || 的第一個運算元為真時就不會計算第二個操作數了。僅當第一個運算元的計算結果為 false (0) 時計算第二個運算元。在邏輯"或"表示式為 true 時,這將消除對第二個運算元的不必要的計算。 所以在計算 99 的時候,第一個運算元為真,就不會計算第二個操作數了,也就是少計算了一次出現9的次數。