如何使用一个for循环输出九九乘法表
2017-03-08 17:45
441 查看
问题引入
很多人刚接触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判断语句,用来判断是否要换行。
int main() { int i, j; for (int i = 1, j = 1; j <= 9; i++) {//i控制每行算式个数,j控制共有多少行。 printf("%d*%d=%d ", i, j, i*j); if (i == j) {//当i = j 这一行输入结束,换行。再把i置0。 i = 0; j++; printf("\n"); } } return 0; }
这样改过之后同样也可以实现输出九九乘法表,但其实这种解法可以算只是把两个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 || fun(++n);//n等于9那么跳出递归,否则进入下一层递归 } int main() { int n = 1; printTable(n); return 0; }
相关文章推荐
- 如何使用一个循环打印九九乘法表
- 例题:把一个超市购物的题做成函数。这个题做成函数没有必要,但可以了解输入参数,输出参数,返回值,函数体,还有结构体,ArryList集合,for循环算结果,以及集合里 .count的使用
- 关于java一个for循环输出九九乘法表
- 使用FOR循环语句在屏幕上输出一个由星号组成的直角三角形
- 只用一个for循环输出九九乘法表
- 使用for循环语句输出九九乘法表
- 09-使用for循环输出空心菱形(循环)
- 编写程序,用一个 for 循环计算1+3+5+7 + ……+99的值,并输出计算结果。
- 循环与递归--不使用if,while,for,do—while语句来输出所有比已知数N小的自然数
- 一个For循环打印九九乘法表
- 如何用一个 FOR 循环打印出一个二(三)维数组
- 用一个for循环打印九九乘法表
- Java使用简单循环输出一个小写字母表
- 一个for循环打印九九乘法表
- 面试题-一个for循环输出一个棱形
- 09-使用for循环输出空心菱形(循环)
- 练习2-2 在不使用运算符&&或者||的条件下编写一个与上面的for循环语句等价的循环语句。
- C#--第2周实验--任务四--编写一个控制台应用--分别使用for,while,do-while循环语句计算 n!
- 一个for循环输出二维数组
- 创建一个基于for 的简单的循环。使其循环10 次,并且使用fmt 包打印 出计数器的值