Создать динамический массив. Заполнить его числами от 1 до n и записать его в файл. - C (СИ)
Формулировка задачи:
создать динамический массив. Заполнить его числами от 1 до n и записать его в файл.
Решение задачи: «Создать динамический массив. Заполнить его числами от 1 до n и записать его в файл.»
textual
Листинг программы
#include <stdio.h> // подключаем библиотеку ввода вывода #include <stdlib.h> #include <malloc.h> // библиотека для динамического выделения памяти int main() { int *p; // указатель на массив int n, a, b, i, r_write; // размер массива, заменяемый элемент, заменяющий элемент, идентификатор успешного открытия файла. system("chcp 1251"); // поддержка русского языка system("cls"); // очистка экрана printf("Введите размер массива: "); scanf_s("%d", &n); // ввод размерности массива if (n <= 0) { printf("ошибка, массив должен состоять хотя бы из одного элемента"); return 0; //выход из программы } p = (int*)malloc(n * sizeof(int)); // выделение памяти for (i = 0; i<n; i++) p[i] = i + 1; //заполнение массива printf("введите заменяемый элемент: "); scanf_s("%d", &a); // ввод заменяемого элемента if (a <= 0 || a > n) { printf("ошибка, заменяемый элемент должен быть в границах массива"); free(p); // освобождение памяти return 0; //выход из программы } printf("введите заменяющий элемент: "); scanf_s("%d", &b); // ввод заменяющего элемента p[a - 1] = b; //замена элемента FILE *output; // идентификатор файла записи char output_name[] = "d:\\test.txt"; // путь к файлу записи, если не существует, будет создан. r_write = fopen_s(&output, output_name, "w"); // открываем выходной файл if (r_write != 0) // выходной файл не создался { printf("не удалось открыть файл"); free(p); // освобождение памяти return 0; //выход из программы } for (i = 0; i <n; i++) fprintf(output, "%d", p[i]); // взапись массива в файл fclose(output); // закрываем файл free(p); // освобождение памяти return 0; //выход из программы }
Объяснение кода листинга программы
В этом коде:
- #include
, #include , #include - подключаем необходимые библиотеки для работы с вводом/выводом, стандартной библиотекой и динамическим выделением памяти. - int main() - функция main(), в которой и происходит весь код программы.
- system(
chcp 1251
); - переводим консоль на русский язык. - system(
cls
); - очищаем экран перед выводом информации. - printf(
Введите размер массива:
);, scanf_s(%d
, &n); - запрашиваем у пользователя размер будущего массива и сохраняем его в переменной n. - p = (int)malloc(n sizeof(int)); - выделяем память под массив p динамически.
- for (i = 0; i<n; i++) - начинаем цикл заполнения массива.
- p[i] = i + 1; - заполняем массив значениями от 1 до n.
- printf(
введите заменяемый элемент:
);, scanf_s(%d
, &a); - запрашиваем у пользователя заменяемый элемент и сохраняем его в переменной a. - if (a <= 0 || a > n) - проверяем, чтобы заменяемый элемент был в границах массива.
- printf(
введите заменяющий элемент:
);, scanf_s(%d
, &b); - запрашиваем у пользователя заменяющий элемент и сохраняем его в переменной b. - p[a - 1] = b; - заменяем элемент массива с индексом a-1 на значение b.
- *FILE output;, char output_name[] =
d:\\test.txt
;** - объявляем переменные для работы с файлами. - r_write = fopen_s(&output, output_name,
w
); - пытаемся открыть файл для записи и сохраняем результат в переменной r_write. - if (r_write != 0) - если файл не удалось открыть, выходим из программы.
- for (i = 0; i <n; i++) - начинаем цикл записи массива в файл.
- fprintf(output,
%d
, p[i]); - записываем в файл значение i-го элемента массива. - fclose(output); - закрываем файл после записи.
- free(p); - освобождаем память, выделенную под массив.
- return 0; - выход из программы.