Возможно ли создать пирамиду чисел пользовательского ввода, при которой пирамида отображается только от 0 до 9?

#c #loops

#c #циклы

Вопрос:

Я попытался отредактировать цикл для счетчика, чтобы последняя строка printf была неотрицательной, но я не слишком уверен, какую часть цикла редактировать.

 #include <stdio.h>

void printPatternHere(int height);

int main() {
    int height;
    printf("Enter the number of rows: ");
    scanf("%d", amp;height);
    printf("printPattern: n");
    printPatternHere(height);
    return 0;
}

void printPatternHere(int height) {
    int n, c, row, t = 1;
    int counter = 0;

    for (row = 1; row <= height; row  ) {

        for (c = 1; c <= height - row; c  )
            t = row; // start each line with row number

        for (c = 1; c <= row; c  ) {
            counter  ;

            if (counter > 9) {
                t = t % 10;
            }

            printf("%d ", t);
            t  ;
        }

        for (c = 1 ; c < row; c  ) {
            t--; //reset row number
        }

        printf("n");
    }
}
  

Если userinput равно 14, его вывод должен быть примерно таким:

 1 
2 3 
3 4 5 
4 5 6 7 
5 6 7 8 9 
6 7 8 9 0 1 
7 8 9 0 1 2 3 
8 9 0 1 2 3 4 5 
9 0 1 2 3 4 5 6 7 
0 1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 0 1 
2 3 4 5 6 7 8 9 0 1 2 3 
3 4 5 6 7 8 9 0 1 2 3 4 5 
4 5 6 7 8 9 0 1 2 3 4 5 6 7
  

Комментарии:

1. void printline(int n) { printf("%d", n % 10); for (k = 1; k < n; k ) printf(" %d", (n k) % 10); puts(""); }

Ответ №1:

Ваша функция слишком сильно загромождена, поскольку циклов более чем достаточно. Приведенного ниже кода будет достаточно. Лучше отлаживать, чтобы понять идею.

 // in "main"
    printPattern3(height); // wrong function name!
    printPatternHere(height); // corrected. 
  
 void printPatternHere(int height) {
    int c, row;

    for (row = 1; row <= height; row  ) {
        for (c = 0; c < row; c  ) {
            printf("%d ", (c   row) % 10);
        }

        printf("n");
    }
}
  

Комментарии:

1. Спасибо, но я новичок в программировании на C, какую программу вы рекомендуете для отладки? в настоящее время я использую codeblocks.

2. Я тоже использую кодовые блоки.

3. хорошо, я постараюсь разобраться с этим подробнее … большое спасибо!

4. @MTee : И еще один момент; вам лучше заключить for amp; if блоки в фигурные скобки, даже если они содержат всего одну строку. Таким образом, вы бы поняли, что ваш второй for цикл не нужен.

Ответ №2:

Ваш код слишком сложный. Вывод пирамиды можно сделать проще.

Например, этот цикл

     for (c = 1; c <= height - row; c  )
        t = row; // start each line with row number
  

не имеет смысла.

Вот вы где.

 #include <stdio.h>

int main(void) 
{
    while ( 1 )
    {
        const unsigned int Base = 10;
        
        printf( "Enter a non-negative number (0 - exit): " );
        
        unsigned int n;
        
        if ( scanf( "%u", amp;n ) != 1 || n == 0 ) break;
        
        putchar( 'n' );
        
        for ( unsigned int i = 0; i < n; i   )
        {
            for ( unsigned int j = 0; j < i   1; j   )
            {
                printf( "%u ", ( j   i   1 ) % Base );
            }
            
            putchar( 'n' );
        }
        
        putchar( 'n' );
    }

    return 0;
}
  

Вывод программы может выглядеть следующим образом

 Enter a non-negative number (0 - exit): 14

1 
2 3 
3 4 5 
4 5 6 7 
5 6 7 8 9 
6 7 8 9 0 1 
7 8 9 0 1 2 3 
8 9 0 1 2 3 4 5 
9 0 1 2 3 4 5 6 7 
0 1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 0 1 
2 3 4 5 6 7 8 9 0 1 2 3 
3 4 5 6 7 8 9 0 1 2 3 4 5 
4 5 6 7 8 9 0 1 2 3 4 5 6 7 

Enter a non-negative number (0 - exit): 0
  

Если вы хотите написать отдельную функцию, которая будет выводить шаблон, тогда программа может выглядеть следующим образом.

 #include <stdio.h>

FILE * display_pyramid( unsigned int n, FILE *fp )
{
    const unsigned int Base = 10;
        
    for ( unsigned int i = 0; i < n; i   )
    {
        for ( unsigned int j = 0; j < i   1; j   )
        {
            fprintf( fp, "%u ", ( j   i   1 ) % Base );
        }
            
        fputc( 'n', fp );
    }
    
    return fp;
}

int main(void) 
{
    while ( 1 )
    {
        printf( "Enter a non-negative number (0 - exit): " );
        
        unsigned int n;
        
        if ( scanf( "%u", amp;n ) != 1 || n == 0 ) break;
        
        putchar( 'n' );
        
        fputc( 'n', display_pyramid( n, stdout ) );
    }

    return 0;
}
  

Комментарии:

1. Спасибо! работает хорошо, но я все еще пытаюсь понять концепцию