#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. Спасибо! работает хорошо, но я все еще пытаюсь понять концепцию