Переведите с языка C++ на Си - C (СИ)
Формулировка задачи:
В одномерном массиве, состоящем из n вещественных элементов,вычислить:
- среднее арифметическое положительных элементов массива, разположенных на нечетных местах;
- количество элементов массива,лежащих в диапозоне от A до B.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от минимального не менее чем на 30%, а потом-все остальные.
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <memory.h> #include <locale.h> #define N 10 void swap(int& n1, int& n2); int main() { setlocale(LC_ALL,"Russian"); int* X = new int[N]; memset((void*)X, 0x00, sizeof(int) * N); for (int k = 0; k < N; k++) { printf("X[%d] = ",k); scanf("%d",&X[k]); } int count = 0; double nAvg = 0.0; for (int i = 0; i < N; i++) if (X[i] > 0 && i % 2) { nAvg+=X[i]; count++; } nAvg /= count; printf("\nСреднее арифметическое nAvg = %4.2f\n\n",nAvg); int a = -1, b = a; printf("A = "); scanf("%d",&a); printf("B = "); scanf("%d",&b); printf("\n"); int cnt = 0; for (int q = 0; q < N; q++) if (X[q] >= a && X[q] <= b) { printf("%d ",X[q]); cnt++; } printf("\n\n"); printf("Количество элементов в диапазоне от %d до %d равно %d\n\n",a,b,cnt); int min_i = 0; for (int j = 0; j < N; j++) min_i = (X[j] < X[min_i]) ? j : min_i; int d = 0; double p = X[min_i] * 0.33; for (int t = 0; t < N; t++) if (abs(X[t] - X[min_i]) >= p) swap(X[d++],X[t]); for (int z1 = 0; z1 < N; z1++) printf("%d ",X[z1]); printf("\n\n"); _getch(); } void swap(int& n1, int& n2) { int _tn = n1; n1 = n2; n2 = _tn; }
Решение задачи: «Переведите с языка C++ на Си»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <memory.h> #define N 10 void swap(int* n1, int* n2); int main(void) { int q = 0; int a = 0; int b = 0; int k = 0; int i = 0; int j = 0; int t = 0; int d = 0; int z1 = 0; int cnt = 0; int min_i = 0; int count = 0; double p = 0.0; double nAvg = 0.0; int* X = malloc(N * sizeof(int)); memset((void*)X, 0x00, sizeof(int) * N); for (k = 0; k < N; k++) { printf("X[%d] = ",k); scanf("%d",&X[k]); } for (i = 0; i < N; i++) { if (X[i] > 0 && i % 2) { nAvg += X[i]; count++; } } nAvg /= count; printf("\nСреднее арифметическое nAvg = %4.2f\n\n",nAvg); printf("A = "); scanf("%d",&a); printf("B = "); scanf("%d",&b); printf("\n"); for (q = 0; q < N; q++) { if (X[q] >= a && X[q] <= b) { printf("%d ",X[q]); cnt++; } } printf("\n\n"); printf("Количество элементов в диапазоне от %d до %d равно %d\n\n",a,b,cnt); for (j = 0; j < N; j++) { min_i = (X[j] < X[min_i]) ? j : min_i; } p = X[min_i] * 0.33; for (t = 0; t < N; t++) { if (abs(X[t] - X[min_i]) >= p) { swap(&X[d++], &X[t]); } } for (z1 = 0; z1 < N; z1++) { printf("%d ",X[z1]); } printf("\n\n"); free(X); return 0; } void swap(int* n1, int* n2) { int _tn = *n1; *n1 = *n2; *n2 = _tn; }
Объяснение кода листинга программы
- Объявлены переменные: q, a, b, k, i, j, t, d, z1, cnt, min_i, count, p, nAvg, X, N
- Выделена память под массив X, его размер равен N (10)
- Заполнение массива X с помощью scanf, значения не проверяются на корректность
- Инициализация переменных для хранения суммы и количества чисел в диапазоне
- Основной цикл программы, в котором происходит подсчет суммы чисел, которые больше нуля и четных
- Вычисление среднего арифметического nAvg
- Ввод значений a и b с помощью scanf
- Подсчет количества чисел в диапазоне от a до b
- Поиск индекса минимального элемента в массиве X
- Вычисление порогового значения p как 1/3 от минимального элемента
- Основной цикл программы для перестановки чисел, начиная с минимального, которые больше или равны p
- Вывод массива X на экран
- Освобождение памяти, выделенной под массив X
- Возврат 0 из функции main, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д