如何使用一个for循环输出九九乘法表
問題引入
很多人剛接觸C語言的時候一定會遇到這樣一個題目,在屏幕上輸出九九乘法表。我相信大多數人的解法都會是使用兩個for循環,兩個變量,一個if判斷語句用來判斷什么時候換行。
問題1:在屏幕上輸出一個九九乘法表。
代碼
int main() {int i = 0;int j = 0;for (i = 1; i <= 9; i++){for (j = 1; j <= i; j++){printf("%d*%d=%d ", i, j, i*j);if (i == j)printf("\n");}}return 0; }結果如圖
上面這種解法是正常解法,這樣實現起來可能對很多人來說都沒有問題,但是前段時間網上有人提出是否能只用一個for循環語句做出同樣的效果。這是個很有趣的問題,仔細想想其實也不難實現,很多人給出了解法。
問題2:如何使用一個for循環輸出九九乘法表。
思路
網上給出的大多數答案基本思路是使用兩個變量,在一個for循環中一個控制每行有多少個算式,另一個控制有多少行。然后在這個for循環內加入一個if判斷語句,用來判斷是否要換行。
這樣改過之后同樣也可以實現輸出九九乘法表,但其實這種解法可以算只是把兩個for循環合并,大體思路還是一樣的,還是利用了if去判斷是否要換行。那么是否可以給出另一種不用if的語句的解法呢?
問題三:在只能使用一個for語句且不能用if判斷語句的情況下輸出九九乘法表。
思路
既然題目給出只能使用一個for語句,那么是否可以用遞歸來代替另一個for語句呢?
當然是可以的,那么又要怎么才能判斷什么時候換行呢?
這里我采取另一種思路,每打印一行就換一次行。每一層遞歸中都給出一個換行操作,在當整個一行輸出完成之后換行。再在函數的最后調用函數本身,再打印下一行。最后當打印完第九行的時候跳出遞歸。
不過這里不能使用if語句,那么又如何判斷是否達到第九行呢?
這里就想到了C語言里面有一種叫做短路的現象,即a || b ,如果a 的值為真,整個表達式的值就為真。b 的真假由最初的真假來判斷,也就是說,當a 為真時,b 則不進行運算了。這就可以完美的實現題目的要求。
代碼
bool printTable(int n) {for (int i = 1; i <= n; i++){printf("%d*%d=%d ", i, n, i*n);}printf("\n");return n == 9 || printTable(++n);//n等于9那么跳出遞歸,否則進入下一層遞歸 }int main() {int n = 1;printTable(n);return 0; }總結
以上是生活随笔為你收集整理的如何使用一个for循环输出九九乘法表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D数据---未来数字世界的物质基础
- 下一篇: 新浪微博终于完成多数ui