C程序的一个反向三角形图案



我想画一个这样的图案:

567898765
4567654
34543
232
1

但是我似乎不能弄清楚,因为这是我目前得到的输出:

567898765
45678987654
3456789876543
234567898765432
12345678987654321

这是我的代码:

#include <stdio.h>
int main() {
int a, b, c, s;
for (a = 5; a >= 1; a--) {
for (s = a; s <= 4; s++) {
printf(" ");
}
for (b = a; b <= 9; b++) {
printf("%d", b);
}
for (c = 8; c >= a; c--) {
printf("%d", c);
}
printf("n");
}
return 0;
}

你基本上是对的,只有bc循环中的恒定值98是不合适的,因为三角形的中心轴并不总是9;取值为2*a-12*a-2

始终尝试编写更通用的代码,而不要使用像59这样的神奇数字。对于某些幻数,无效代码可能会给出预期的结果,但对于其他幻数,它将不起作用。

也要在最小范围内声明变量。

程序输出不正确的主要原因是在这些for循环中使用了幻数98

for (b = a; b <= 9; b++) {
printf("%d", b);
}
for (c = 8; c >= a; c--) {
printf("%d", c);
}

我可以提出以下的解决方案。

#include <stdio.h>
int main( void )
{
const unsigned int MAX_HEIGHT = 50;
while (1)
{
unsigned int n;
printf( "Enter the height of a triangle not greater than %u (0 - exit): " , MAX_HEIGHT );
if (scanf( "%u", &n ) != 1 || n == 0) break;
int width = 1 + snprintf( NULL, 0, "%d", 2 * n - 1 );
putchar( 'n' );
for (unsigned int i = n; i != 0; --i)
{
printf( "%*u", ( n - i + 1 ) * width, i );
size_t j = 1;
for (; j < i; j++)
{
printf( "%*u", width, i + j );
}
--j;
while (j-- != 0)
{
printf( "%*u", width, i + j );
}
putchar( 'n' );
}
putchar( 'n' );
}
}

程序输出可能看起来像

Enter the height of a triangle not greater than 50 (0 - exit): 10
10 11 12 13 14 15 16 17 18 19 18 17 16 15 14 13 12 11 10
9 10 11 12 13 14 15 16 17 16 15 14 13 12 11 10  9
8  9 10 11 12 13 14 15 14 13 12 11 10  9  8
7  8  9 10 11 12 13 12 11 10  9  8  7
6  7  8  9 10 11 10  9  8  7  6
5  6  7  8  9  8  7  6  5
4  5  6  7  6  5  4
3  4  5  4  3
2  3  2
1
Enter the height of a triangle not greater than 50 (0 - exit): 5
5 6 7 8 9 8 7 6 5
4 5 6 7 6 5 4
3 4 5 4 3
2 3 2
1
Enter the height of a triangle not greater than 50 (0 - exit): 1
1
Enter the height of a triangle not greater than 50 (0 - exit): 0

相关内容

  • 没有找到相关文章

最新更新