很多人剛接觸c語言的時候一定會遇到這樣乙個題目,在螢幕上輸出九九乘法表。我相信大多數人的解法都會是使用兩個for迴圈,兩個變數,乙個if判斷語句用來判斷什麼時候換行。
**
int main()
} return 0;
}
結果如圖
上面這種解法是正常解法,這樣實現起來可能對很多人來說都沒有問題,但是前段時間網上有人提出是否能只用乙個for迴圈語句做出同樣的效果。這是個很有趣的問題,仔細想想其實也不難實現,很多人給出了解法。
思路
網上給出的大多數答案基本思路是使用兩個變數,在乙個for迴圈中乙個控制每行有多少個算式,另乙個控制有多少行。然後在這個for迴圈內加入乙個if判斷語句,用來判斷是否要換行。
int main()
} return 0;
}
這樣改過之後同樣也可以實現輸出九九乘法表,但其實這種解法可以算只是把兩個for迴圈合併,大體思路還是一樣的,還是利用了if去判斷是否要換行。那麼是否可以給出另一種不用if的語句的解法呢?
思路
既然題目給出只能使用乙個for語句,那麼是否可以用遞迴來代替另乙個for語句呢?
當然是可以的,那麼又要怎麼才能判斷什麼時候換行呢?
這裡我採取另一種思路,每列印一行就換一次行。每一層遞迴中都給出乙個換行操作,在當整個一行輸出完成之後換行。再在函式的最後呼叫函式本身,再列印下一行。最後當列印完第九行的時候跳出遞迴。
不過這裡不能使用if語句,那麼又如何判斷是否達到第九行呢?
這裡就想到了c語言裡面有一種叫做短路的現象,即a || b ,如果a 的值為真,整個表示式的值就為真。b 的真假由最初的真假來判斷,也就是說,當a 為真時,b 則不進行運算了。這就可以完美的實現題目的要求。
**
bool printtable(int n)
printf("\n");
return n == 9 || printtable(++n);//n等於9那麼跳出遞迴,否則進入下一層遞迴
}int main()
如何逆序輸出乙個整數
給出乙個整數,將它逆序輸出,首先求出它是乙個幾位數,利用for迴圈將數字從高位到低位分別輸出。例如1234這個數,首先通過for迴圈求出,它是乙個4位數,然後1234第一次除以1000,得到1並輸出,1234再對1000取餘,去掉1得到234,第二次234除以100,得到2並輸出,234再對100取...
如何實現乙個迴圈佇列
下面是乙個迴圈佇列的完整實現,歡迎讀者朋友參考和指正 template class cyclicqueue cyclicqueue cyclicqueue const cyclicqueue copy m poppos 0 m count 0 cyclicqueue operator const c...
如何實現乙個迴圈佇列
template class cyclicqueue cyclicqueue cyclicqueue const cyclicqueue copy m poppos 0 m count 0 cyclicqueue operator const cyclicqueue other return thi...