2014-10-29 4 views
-7

Ваша задача - использовать петли, чтобы печатать пирамиды звезд. Ваша программа должна принимать целое число и аргумент, а также распечатывать пирамиду звездочки с базой заданного размера. Например, если пользовательский ввод был 3, ваша программа должна быть распечатана:Пирамида звезд

* 
** 
*** 

Вот что я сделал. У программы нет ошибок, но она не распечатывает пирамиду и не возвращается, как ожидалось. Как только я получу его работу, я добавлю дополнительные операторы if для учета больших пирамид.

#include <stdio.h> 

void main(int size){ 
if (size == 0) 
{return; 
}; 
if (size == 1) 
{printf("*\n"); 
}; 
if (size == 2) 
{printf("**\n"); 
}; 
if (size == 3) 
{printf("***\n"); 
}; 
if (size = 4) 
{printf("****\n"); 
}; 
if (size == 5) 
{printf("*****\n"); 
}; 
if (size ==6) 
{printf("******\n"); 
}; 

main(size-1);} 
+5

«Я добавлю больше утверждений для учета больших пирамид» - нет, вы должны использовать ['for' loops] (http://en.wikipedia.org/wiki/For_loop), чтобы сделать это , очевидно. – unwind

+2

'Ваша задача использовать' ... –

+0

Пожалуйста, присылайте некоторое время вашему инструктору или TA, чтобы уточнить ваше задание. Любой, кто здесь может написать, что нужно сделать для вас, но кажется, что вам не хватает слишком много оснований для справедливости для вас или ваших современников. – psaxton

ответ

0

Это ни в сторону симпатичной, но она должна работать

#include <stdio.h> 

void main(){ 
    int size = 3,i;  //you can't just pass a value into main like that so I've initialised size here 
    while (size){  //loop controlling line output 
     i = 0; 
     while (i++<size){//loop controlling * output within line 
      putchar('*');//output a * 
     } 
     putchar('\n'); //output a newline (go to next line) 
     size--; 
    } 
} 

Если проверить синтаксис for петель, вы должны быть в состоянии перевести это использовать их довольно легко (я но я все равно не собираюсь давать вам все свое задание на тарелке).

+0

@CoolGuy ха-ха да, опечатка. – Baldrickk

+0

В этой ситуации, как указано в исходной задаче, оптимальным выбором являются строки 'for': Внешний цикл должен выглядеть примерно так:' for (i = 1; i <= size; i ++) ', а внутренний цикл должен выглядеть чем-то например 'for (j = 1; j <= i; j ++)' – RPGillespie

+0

@RPGillespie yup. но я не собираюсь выполнять все задания OP для него. Этого достаточно, чтобы дать ему представление о том, что делать. Однако я упомянул об этом в ответе. – Baldrickk

0

переверните это потому, что позиция основного вызова завершается.

#include <stdio.h> 

int main(int argc, char **argv){ 
    if(argc){ 
     int i; 
     (void)main(argc-1, argv); 
     for(i=0;i<argc;++i) 
      putchar('*'); 
     putchar('\n'); 
    } 
    return 0; 
} 
0

Печать строки колонки «графика» представляет собой двумерную задачу, так что вам потребуется 2D решение: две петли, один вложен в другой. Вы можете уйти с одним циклом - напечатать звезды (звездочки) по строке и повторно запустить программу, как вы пробовали, за исключением того, что результат будет уменьшаться каждый раз. Чтобы получить больше, вам понадобится два аргумента программы: максимальный размер и текущая строка. В этом случае вы не можете избавиться от необходимости в двух частях данных.

Попробуйте использовать две петли, как кто-то еще предложил в комментарии.

Я бы назвал желаемый результат «треугольником», потому что для меня «пирамида» должна быть симметричной слева направо, поэтому могут иметь только строки нечетного размера.

+0

Wow: как сказал BLUEPIXY, он мог бы рекурсивно вызывать main() * перед * печать строки, так что это заставило бы ее увеличить каждую строку, как и предполагалось. Думаю, я никогда не думал о том, чтобы использовать ОС для выполнения задания, которое может выполнять цикл for ... Но аргумент main() не был рассмотрен кем-либо. Это должна быть строка символов. –