Попытка сделать эту звезду, используя цикл for в C - PullRequest
1 голос
/ 30 августа 2009

Я новичок в C и хочу создать программу, используя цикл for, который дает следующий вывод:

* * * * * * *
* * *   * * *
* *       * *
*           *

Ответы [ 6 ]

16 голосов
/ 30 августа 2009

Мне нравится писать однострочники для решения простых задач, подобных этой. ;)

for(int i=0;i<60;i++)putchar(" *\r\n"[i%15>=11?i%15-11:abs(i%15-6)>(i/15)*2-1&&i%15%2==0?1:0]);
8 голосов
/ 30 августа 2009

Вот дешевая версия, она делает свою работу, но не предлагает большой гибкости.

#include <stdio.h>

int main (int argc, char *argv[])
{
    char *strings[4] = { "* * * * * * *",
                         "* * *   * * *",
                         "* *       * *",
                         "*           *" };
    int i;

    for (i = 0; i < 4; i++)
    {
        puts (strings[i]);
    }

    return 0;
}
5 голосов
/ 30 августа 2009

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

Здесь есть две петли. Цикл с использованием r предназначен для строк. Цикл с использованием c предназначен для столбцов. Есть 7 столбцов, которые являются или звездами или пробелами. В первом ряду они все звезды. Во втором ряду столбец 3 - это пробел (имейте в виду, что мы нумеруем). Это достигается за счет того, что во второй строке r равно 1. Следовательно, условие if равно if (c>3-1 && c<3+1) или if (c>2 && c<4) - поэтому, когда c равно 3, будет напечатан пробел. Для других столбцов напечатана звезда. В следующем ряду он заканчивается как if (c>1 && c<5) - поэтому, если c равно 2, 3 или 4, печатаются пробелы.

Попробуйте поиграться с программой, изменить числа, изменить напечатанное, чтобы лучше понять, что она делает.

#include <stdio.h>

int main(void)
{
    int r,c;
    for (r=0; r!=4; r++)
    {
        for (c=0; c<7; c++)
        {
            if (c>3-r && c<3+r)
                printf("  ");
            else
                printf("* ");
        }
        printf("\n");
    }
    return 0;
}
2 голосов
/ 30 августа 2009

Как далеко вы продвинулись с этим сами? Вы знаете, как написать цикл for и оператор print? Какой у вас выход?

Программирование (частично) - дать вам лучший шанс на решение проблемы, пусть и грубо или не полностью, с учетом того, что вы смогли сделать, и постепенно улучшать свой код. Поэтому, если я не знаю, к чему вы уже пришли, я рискую испортить учебный опыт, раскрывая многое.

Как насчет того, чтобы показать нам свой код?

1 голос
/ 27 апреля 2017
#include < stdio.h >
int main() {
int i, j;
for (i = 0; i < 4; i++) {
  for (j = 0; j < 7; j++) {
    if (j <= 3 - i || j >= 3 + i)
      printf("*");
    else
      printf(" ");
  }
  printf("\n");
}
return 0;
}
1 голос
/ 30 августа 2009

Вы застряли с алгоритмом или как реализовать его в C? Алгоритм выглядит так:

Let `n` be the width of the rectange
Print n stars followed by a newline
For i from n/2 to 1 (counting down in steps of 1):
    Print i stars, then n-2*i spaces, then i stars, then a newline

Чтобы реализовать это в C, вам нужен цикл for и некоторая функция вывода, например printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...