我需要使用"循环"显示10个数字。像这样:
1
2 3
4 5 6
7 8 9 10
我设法使用下面的代码实现它。但我觉得必须有一个更简单的方法来做到这一点。如果我需要做同样的模式,但有1000个数字怎么办?这将是很多代码。
#include <stdio.h>
int main(){
int x;
x=1;
do {
printf("%i \n", x);
x++;
} while (x<=1);
do {
printf("%i ", x);
x++;
} while (x<=3); {
printf("\n");
}
do {
printf("%i ", x);
x++;
} while (x<=6); {
printf("\n");
}
do {
printf("%i ", x);
x++;
} while (x<=10); {
printf("\n");
}
return 0;
}
答案 0 :(得分:3)
为每一行写一个单独的循环是疯狂的。如果你一遍又一遍地做同样的事情而略有变化,这意味着你需要另一个包裹循环。这应该只需要一对for
循环:
unsigned maxval = ...;
for (unsigned rowlen = 1, val = 1; val <= maxval; ++rowlen) {
for (unsigned item = 0; item < rowlen && val <= maxval; ++item) {
printf("%u ", val++);
}
printf("\n");
}
答案 1 :(得分:3)
你可以用一个循环来完成。
void print_tri(unsigned int max_val) {
unsigned int row_lim = 1;
unsigned int row_len = 0;
for (unsigned int i = 1; i <= max_val; i++) {
printf("%u ", i);
if (++row_len == row_lim) {
putchar('\n');
row_lim++;
row_len = 0;
}
}
}
答案 2 :(得分:1)
如果你这样做是为了练习do,那么在使用这段代码的情况下,如果你不能使用@ ShadowRanger的答案,因为我觉得这对于这种情况更好
int x,y,counter, row;
row = 1;
counter = 0;
y=10;
x=1;
do {
do {
counter --;
printf("%i ", x);
x++;
} while(counter > 0);
printf("\n");
row++;
counter = row;
} while (x<=y);
每次第一次执行while循环时,row
变量会增加1,以检查您当前所在的行,然后将counter
设置为您当前所在的行号要知道该行中将有多少个数字,x
变量用于打印的数字,y
变量用于打印多少个数字。
注意:此代码将完成缺少数字的任何行示例: 如果要打印4个数字,则代码将打印出来: 1 2 3 4 5 6 如果您不希望发生这种情况,请更改第一个执行条件 this:while(counter&gt; 0&amp;&amp; x&lt; = y);
答案 3 :(得分:1)
#include <stdio.h>
void main() {
int row = 1;
int column = 1;
for (int i = 1; i <= 10; i++) {
printf("%d", i);
if (column == row) {
printf("\n");
row++;
column = 1;
}
else {
printf(" ");
column++;
}
}
}
答案 4 :(得分:0)
有很多方法可以接近逻辑,一切都很好。这是指定一个b
开始变量来控制间距逻辑(第一个没有,行前的其余部分之前是一个空格),并提供两个格式字符串(fmt1
和{{1 }}) 以适应。代码增加fmt2
- 每行打印的值计数,直到达到c
- 每行的计数数。
查看所有答案,如果您有任何疑问,请与我们联系:
n
示例使用/输出
#include <stdio.h>
int main (void) {
/* i, b - begin, c - count, n - num per row */
int i, b = 1, c = 0, n = 1;
char *fmt1 = "%d", *fmt2 = " %d";
for (i = 1; i < 11; i++) {
printf (i == b ? fmt1 : fmt2, i);
c++;
if (c == n) {
b = i + 1, c = 0, n++;
putchar ('\n');
}
}
return 0;
}
答案 5 :(得分:0)
感谢大家。我正在寻找的答案是Marcel Jacques Machado和Ivan发布的答案。我只是一个初学者。练习是练习嵌套循环。另一篇文章也很有帮助。