Вопрос к тем, кто разбирается в основах программирования. (на Си)
Скажите, почему этот код не работает должным образом? (Должен выводить массив, состоящий из степеней двойки заданного размера 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();
}
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;
}
Вы немного неправильно поняли задание. Массив должен быть: 2, 4, 8, 16, … .
int *mas[0]; - массив из 0(нуля!) указателей. Соответственно, ничего в него записать нельзя (а тем более число), оно будет записано во что-то другое с непредсказуемым результатом.
Мне казалось, что это указатель на нулевой элемент массива. К тому же в первоначальном варианте программы (Когда просто выводились четные элементы) это работало.
Дело в том, что в dev c++ (я с ним работаю), варианты типа *mas, mas[] не принимаются.
#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);
}
массив, в принципе, не нужен