用C++看這個規律1/2 2/3 3/5 5/8 8/13一直寫到第20個的值?
#include &
void main()
{
int a,b,i;
a=1;
b=2;
for(i=1;i&<=20;i++)
{
b=a,a=a+b;
printf("%d/%d ",b,a);
}
}
上面是我寫的,為什麼答案是這樣的
你可能以為:
b=a,a=a+b;
會先求值兩個賦值的右側,然後在分號處再進行這兩個賦值工作。
但是,C++ 的逗號運算符[1]並不是這樣工作的,只會首先求值逗號左側表達式(b=a
),再求值右側表達式(a=a+b
),然後返回右方表達式的值(a
),這裡沒用到該返回值。
所以,修正的方法是,先在循環里列印 a/b,然後備分b
到一個臨時變數,才更新b
,最後用備份的值更新a
。
[1] 其他運算符 - cppreference.com §內建的逗號運算符
題外話,Lua 可用多重賦值,做到把右側先求值,再一次賦值:
local a, b = 1, 2
for i = 1, 20 do
print(a .. "/" .. b)
a, b = b, a + b
end
b=a,a=a+b;等效於
b=a;//b複製aa+=b;//a變成2倍,也就是說 a=2*b了,所以是2,4,8,16,32......了改成
fenzi = a;
fenmu = a+b;b = fenzi;a = fenmu;#include &
int main( void )
{
for( unsigned i=0,a=1,b=1; i!=20; ++i )
{
b = b+a;
a = b-a;
printf( "%u/%u ", a, b );
}
}
斐波那契數列了解一下
你這數列就是
嘛
如果單看分子或分母難道不是斐波那契數列?
推薦閱讀:
※現在C++開發是不是都遵守C++11標準,Linux下的多線程編程是優先考慮C++11的線程庫,還是用系統線程API封裝?
※如何評價Qt Lite Project?
※什麼時候用指針形參?什麼時候用引用形參?
※G++和Clang對於這個模板別名的處理哪個正確?