Top.Mail.Ru
Ответы
Аватар пользователя
11лет
Изменено

Вопрос к тем, кто разбирается в основах программирования. (на Си)

Скажите, почему этот код не работает должным образом? (Должен выводить массив, состоящий из степеней двойки заданного размера n)
int main()
{
int n = 5, i = 0, k = 1, j = 1;
int *mas[0];
while (i!=n)
{
if (k == 2*j)
{
mas[i] = k;
i++;
}
k++;
j += 2;
}
for (i = 0; i < n; i++)
printf("%d", mas[i]);
getch();
}

Дополнен

Всех благодарю за помощь.
Вышло составить рабочий код:
int main()
{
int n = 5, i, j = 2 ;
int mas[n];
mas[0] = 2;

for (i = 1; i <= n; i++)
{
mas[i] = pow(mas[0], j);
j++;
}

for (i = 0; i < n; i++)
printf("%d ", mas[i]);
getch();
}

По дате
По рейтингу
Аватар пользователя
Ученик
11лет

int const n = 5;
int i = 0, k = 1, j = 1;
int mas[n];
Это раз.

k == 2 * j
У тебя k ВСЕГДА меньше j
Это два.

И в дополнение. Рабочий цикл
for (i = 0; i < n; ++i)
{
if (i == 0) mas[i] = 2 * 2;
else mas[i] = mas[i - 1] * 2;
}

Аватар пользователя
Ученик
11лет

Вы немного неправильно поняли задание. Массив должен быть: 2, 4, 8, 16, … .

Аватар пользователя
Оракул
11лет

int *mas[0]; - массив из 0(нуля!) указателей. Соответственно, ничего в него записать нельзя (а тем более число), оно будет записано во что-то другое с непредсказуемым результатом.

Аватар пользователя
Ученик
11лет

Мне казалось, что это указатель на нулевой элемент массива. К тому же в первоначальном варианте программы (Когда просто выводились четные элементы) это работало.
Дело в том, что в dev c++ (я с ним работаю), варианты типа *mas, mas[] не принимаются.

Аватар пользователя
Мудрец
11лет

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

int main()
{
int n = 5, i;
int mas[n];
for (i = 0; i < n; i++) {
mas[i] = 2 << i;
}
for (i = 0; i < n; i++) {
printf("%d ", mas[i]);
}
printf("\n");

exit(EXIT_SUCCESS);
}

массив, в принципе, не нужен



Видео по теме