1,外层控制行数,内层控制列数。
2,当列数与行数挂钩时:
先判断行数与要打印的东西有无关系,
若有,依情况分析。(如 九九乘法表)
int main(void) { //1*1在左上角 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i ; j++) { printf("%dx%d=%d ", j, i, i*j); } printf("\n"); } //1*1在左下角 for (int i = 9; i >= 1; i--) { for (int j = 1; j <= i ; j++) { printf("%dx%d=%d ", j, i, i*j); } printf("\n"); } //1*1在右上角 for (int i = 1; i <= 9; i++) { for (int j = 9; j >i; j--) //打印空格 { printf("\t"); } for (int k = i; k >= 1; k--) //打印式子 { printf("%dx%d=%2d ", i, k, i*k); } printf("\n"); } //1*1在右下角 for (int i = 9; i >= 1; i--) { for (int j = 9; j > i; j--) //打印空格 { printf("\t"); } for (int k = i; k >= 1; k--) //打印式子 { printf("%dx%d=%2d ", i, k, i*k); } printf("\n"); } system("pause"); }
就像里面的 //1*1在左下角 外层循环初始条件已经被限定为 9了。
若无,本人习惯 默认外层循环递增(当然也可以外层循环递减,只是内层循环要反过来)
于是,若无
1,控制列数递增。
首先,外层循环递增,设好内层循环变量,再让内层循环的结束条件与外层循环变量挂钩。然后内层循环变量递增
2,控制列数递减。
首先,外层循环递增,设好内层循环变量,再让内层循环的结束条件与外层循环变量挂钩。然后内层循环变量递减
// * // * * * // * * * * * // * * * * * * * // * * * * * // * * * // * int main(void) { int i = 0; int j = 0; int k = 0; for (i = 0; i < 4; i++) //4代表有4行 { for (j = 0; j < 7-2*i; j++) //7代表第一行有7个 2代表每行差2个 { printf(" "); }
// for (j = 7 - 2 * i - 1; j >= 0; j--) //当然,初始条件不同,自然是要反过来
// {
// printf(" ");
// } for (k = 0; k < 1 + 2 * i; k++) { printf("* "); } printf("\n"); } for (i = 0; i < 3; i++) { for (j = 0; j < 3+2*i; j++) { printf(" "); } for (k = 0; k <=4-2*i; k++) { printf("* "); } printf("\n"); } system("pause"); return 0; }
注意这里与九九的区别,这里的递增是递增2的,对此可以控制循环增量,我用的是控制终止条件。
另外是打印随意行数菱形(有奇数偶数之分):
int main(void) { int n; while (scanf("%d", &n) != EOF) { int m = (n + 1) / 2; for (int i = 1; i <= m; i++) { for (int j = 1; j <= m - i; j++) { printf(" "); } for (int k = 1; k < 2 * i; k++) { printf("* "); } printf("\n"); } for (int i = 1; i <= m; i++) { for (int j = 1; j <= i - (n + 1) % 2; j++) { printf(" "); } for (int k = 1; k < 2 * m - 2 * i + 2 * ((n + 1) % 2); k++) { printf("* "); } printf("\n"); } } system("pause"); return 0; }