-3

このパターンを直角三角形のように印刷したい

0   
909   
89098   
7890987    
678909876   
56789098765   
4567890987654   
345678909876543   
23456789098765432   
1234567890987654321 

次のコードを書きました。


    #include <stdio.h>
    #include <conio.h>

    void main()
    {
        clrscr();
        int i,j,x,z,k,f=1;

        for ( i=10;i>=1;i--,f++)
        {
            for(j=1;j<=f;j++,k--)
            {
                k=i;

                if(k!=10)
                {
                    printf("%d",k);
                }

                if(k==10)
                {
                    printf("0");
                }

            }

            for(x=1;x<f;x++,z--)
            {
                z=9;
                printf("%d",z);
            }

            printf("%d/n");
        }

        getch();
    }

このコードの何が問題になっていますか? 手動で確認すると正しいようですが、コンパイルすると異なるパターンが得られます

4

7 に答える 7

2

H2CO3 と同様ですが、1 桁しか出力していないため、使用しない理由は次のputchar()とおりです。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int i, j;

  for(i = 0; i < 10; ++i)
  {
    // Left half.
    for(j = 0; j < i; ++j)
      putchar('9' - i + j + 1);
    // Center zero.
    putchar('0');
    // Right half.
    for(j = 0; j < i; ++j)
      putchar('9' - i + j + 1);
    putchar('\n');
  }
  return EXIT_SUCCESS;
}
于 2013-07-01T11:18:27.770 に答える
0

C# バージョンは次のとおりです。

static void DrawNumberTriangle()
{
    for (int line = 10; line >=1; line--)
    {
        for (int number = line; number < 10; number++)
        {
            System.Console.Write(number);
        }
        System.Console.Write("0");
        for (int number = 9; number > line - 1; number--)
        {
            System.Console.Write(number);
        }

        System.Console.WriteLine();
    }
}

i、j、x、z、k、f変数の名前を、私が使用したものと同じような意味を持つものに変更することをお勧めします。これにより、コードを理解しやすくなります。

于 2013-07-01T11:18:33.233 に答える
0

変更されたコード: エラーを確認してください:

# include<stdio.h>
# include<conio.h>

int main()
{
// clrscr();
 int i,j,x,z,k,f=1;

 for ( i=10;i>=1;i--,f++)
 {
     k=i;                    // K=i should be outside of loop.
     for(j=1;j<=f;j++,k++)
     {

         if(k!=10)
         {
             printf("%d",k);
         }

         if(k==10)
         {
        printf("0");
         }
}
     z=9;                    //z=9 should be outside loop.
     for(x=1;x<f;x++,z--)
     {
         printf("%d",z);
     }

printf("\n");

}
//getch();
return 0;
}

forループ(jを持つループ)内でk = iを定義しているため、kがiの値を取得するたびに、常にiの値を取得してその値を出力し、別の条件(if(k == 10))はk が i の値を取り、ループの最初の反復後に i が 10 未満であり、ループ内で z=9 になるたびに true になることはありません。

于 2013-07-01T11:14:20.703 に答える
0

printf を使用して mid 0 を出力するのではなく、ループ自体を使用して出力してみませんか。次の短く単純なコードを使用できます。

int main()
{
    int m = 10, n, p;
    while(m >= 1)
    {
        for(n = m; n <= 10; n++)
            printf("%d", n % 10);
        for(p = n - 2; p >= m; p--)
            printf("%d", p );
        printf("\n");
        m--;
    }
    return 1;
}
于 2013-07-01T11:20:19.077 に答える