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