Перевести с С# на С - C (СИ)
Формулировка задачи:
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] arr = Enumerable.Repeat(new Random(), 24).Select(r => r.Next(-10, 26)).ToArray();
Console.WriteLine(String.Join(", ", arr));
int[] negativeIndexes = Enumerable.Range(0, arr.Length).Where(i => arr[i] < 0).ToArray();
for (int i = 0, j = negativeIndexes.Length - 1; i < j; i++, j--)
{
int t = arr[negativeIndexes[i]];
arr[negativeIndexes[i]] = arr[negativeIndexes[j]];
arr[negativeIndexes[j]] = t;
}
Console.WriteLine(String.Join(", ", arr));
}
}Решение задачи: «Перевести с С# на С»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 24
int main(void)
{
srand(time(NULL));
int arr[N];
int neg[N];
int neg_count = 0;
for (int i = 0; i < N; i++)
{
arr[i] = rand() % 36 - 10;
if (arr[i] < 0) { neg[neg_count++] = i; }
printf("%d ", arr[i]);
}
putchar('\n');
for (int i = 0, j = neg_count - 1; i < j; i++, j--)
{
int t = arr[neg[i]];
arr[neg[i]] = arr[neg[j]];
arr[neg[j]] = t;
}
for (int i = 0; i < N; i++)
{
printf("%d ", arr[i]);
}
putchar('\n');
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы со стандартными функциями, генерацией случайных чисел и временем.
- Определяем размер массива N = 24.
- Инициализируем генератор случайных чисел с помощью функции srand(time(NULL)).
- Создаем массив arr[N] для хранения случайных чисел и массив neg[N] для хранения индексов отрицательных чисел.
- Инициализируем переменную neg_count = 0 для подсчета количества отрицательных чисел.
- Запускаем цикл for от 0 до N-1 для заполнения массива arr[N] случайными числами в диапазоне от -10 до 25 (включительно) с шагом 36.
- Если полученное случайное число отрицательное, то добавляем его индекс в массив neg[N] и увеличиваем значение переменной neg_count на 1.
- Выводим на экран значения массива arr[N] с помощью функции printf(
%d, arr[i]);. - Вставляем пустую строку с помощью функции putchar('\n');.
- Запускаем цикл for для перестановки отрицательных чисел в начало массива arr[N].
- Для этого, мы используем два вложенных цикла for, где внешний цикл идет от 0 до neg_count-1, а внутренний от neg_count-1 до 0.
- Внутренний цикл меняет значения элементов массива arr[N] с помощью функций arr[neg[i]] = arr[neg[j]]; и arr[neg[j]] = t;.
- Выводим на экран значения массива arr[N] с помощью функции printf(
%d, arr[i]);. - Вставляем пустую строку с помощью функции putchar('\n');.
- Завершаем программу с помощью функции return 0;.