Динамическое распределение памяти - C (СИ) (154648)
Формулировка задачи:
Дан массив действительных случайных чисел а размером n=100. Выве-сти на экран те элементы массива, индексы которых являются степеня-ми двойки 2, 4, 8, 16
Изменить программу так, чтобы память под массивы выделялась динамически в ходе выполнения программы. При этом размеры массивов следует запрашивать у пользователя.
Пытался изменить, но прога работает не правильно. Подскажите плиз в чем ошибка
#include <stdio.h>
#include <stdlib.h>
int main()
{ int const n=20;
int A[n]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int i=2;
while(i<n)
{i++;
printf("%d ",A[i]);
i*=2;
}
return 0;
}#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int i=2;
int *ttt;
printf("Vvedite kolichestvo elementov massiva\n");
scanf("%d",&n);
ttt=(int*)malloc(n*sizeof(int));
while(i<n)
{ttt[n]=rand()%100;
i++;
printf("%d ",ttt[n]);
i*=2;
}
return 0;
}Решение задачи: «Динамическое распределение памяти»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int i;
int *mas;
printf("Vvedite kolichestvo elementov massiva\n");
scanf("%d",&n);
mas=(int*)malloc(n*sizeof(int));
for (i = 1; i < n; i*=2)
{
mas[i]=rand()%50+50;
printf("%d ",mas[i]);
}
return 0;
}
Объяснение кода листинга программы
- Объявление переменных:
- n - количество элементов массива;
- i - счётчик для цикла;
- mas - указатель на начало блока памяти для массива.
- Запрос на ввод количества элементов массива с помощью функции scanf.
- Выделение памяти под массив с помощью функции malloc. Значение n умножается на размер int, так как мы выделяем память под массив целых чисел.
- Установка значений элементов массива с помощью цикла for.
- i изменяется от 1 до n с шагом 2 (поскольку при каждом проходе цикла значение i умножается на 2).
- В каждой итерации цикла в массив записывается случайное число от 50 до 100 с помощью функции rand.
- При каждой итерации цикла выводится на экран значение элемента массива с помощью функции printf.
- Конец программы (возврат 0).