Все четные элементы массива инвертировать умножением на -1 - C (СИ) (72174)
Формулировка задачи:
Ввести с клавиатуры количество элементов массива N, потом сами элементы массива – целые числа. Все четные элементы инвертировать умножением на -1. Вывести получившийся массив.
Требуется написать программу, осуществляющую работу с массивами, использующую функции. Требуется реализовать как минимум следующий набор функций:
InputArray – для ввода массива с клавиатуры
OutputArray – для вывода массива на экран
UpdateArray – для выполнения заданных операций над массивом.
Функция main () {} должна обеспечивать вызов этих функций. Массив должен передаваться в функцию в качестве параметра.
#include <stdio.h>
#include <conio.h>
int main ();
int InputArray (int arr[])
{
int n; //Количество элементов
scanf ("%d", &n);
for (int i = 0; i < n; i++)
{
scanf ("%d", &arr [i]); //Ввод элемента массива
}
_getch ();
return n; //Возвращаем количество элементов
}
int main();
int OutputArray (int arr[])
{
int arr[10];
int n = InputArray(arr); //Ввод масива a и количества элементов
for (int i = 0; i < n; i++)
{
printf ("%d", &arr[i], i++);
}
_getch ();
return n;
}
int main ();
int UpdateArray (int arr [10])
{
int n;
for(int i=0;i<n;i++)
printf("%d ", arr[i]);
for (int i = 0; i < n; i= i+1)
{
if (arr [i]%2 == 0)
arr [i] *= -1;
}
printf("\n Полученный массив:\n\n");
for(int i = 0;i < n; i++)
printf("%d ", arr [i]);
_getch ();
return 0;
}Решение задачи: «Все четные элементы массива инвертировать умножением на -1»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void InputArray(int arr[], unsigned size) {
if (size && (scanf("%d", arr) == 1)) {
InputArray(arr + 1, size - 1);
}
}
void OutputArray(int arr[], unsigned size) {
if (size && (0 < printf("%d ", *arr))) {
OutputArray(arr + 1, size - 1);
}
}
void UpdateArray(int arr[], unsigned size) {
if (size) {
if (*arr % 2 == 0) {
*arr *= -1;
}
UpdateArray(arr + 1, size - 1);
}
}
int main() {
int* arr;
unsigned n;
if ((scanf("%u", &n) != 1) || (arr = malloc(sizeof(int) * n)) == NULL) {
return EXIT_FAILURE;
}
InputArray(arr, n);
UpdateArray(arr, n);
OutputArray(arr, n);
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
В данном коде представлена реализация алгоритма инвертирования всех четных элементов в массиве с помощью языка программирования C. Список действий, выполняемых в данном коде:
- Ввод размера массива и его заполнение:
- Сначала пользователю предлагается ввести размер массива с помощью функции
scanf(). - Если ввод корректен, то вызывается функция
malloc(), которая выделяет память под массив заданного размера. - Затем вызывается функция
InputArray(), которая осуществляет ввод элементов массива. - После заполнения массива вызывается функция
UpdateArray(), которая инвертирует все четные элементы массива. - Наконец, вызывается функция
OutputArray(), которая выводит элементы массива на экран.
- Сначала пользователю предлагается ввести размер массива с помощью функции
- Алгоритм инвертирования четных элементов:
- Четность каждого элемента проверяется с помощью оператора
%(остаток от деления). - Если элемент четный, то он умножается на
-1с помощью оператора умножения*=. - Затем функция
UpdateArray()рекурсивно вызывается для следующего элемента массива.
- Четность каждого элемента проверяется с помощью оператора
- Ошибочные условия и выход из программы:
- Если пользователь вводит некорректный размер массива или не предоставляет достаточно памяти, то программа завершается с кодом ошибки
EXIT_FAILURE. - Если в процессе выделения памяти произошла ошибка, то программа также завершается с кодом ошибки
EXIT_FAILURE. - В случае успешного выполнения всех операций программа завершается с кодом успеха
EXIT_SUCCESS.
- Если пользователь вводит некорректный размер массива или не предоставляет достаточно памяти, то программа завершается с кодом ошибки