C/C++
Помогите решить задачу на СИ желательно с объяснением
Замена всех элементов, меньших среднего квадратического, на 0.
#include
#include
#include
int main()
{
int i, n; double a = 0.;
printf("n: "); scanf("%d", &n);
double *A = (double*)malloc(8 * n);
for (i = 0; i < n; i++)
{
scanf("%lf", &A[i]);
a += A[i] * A[i];
}
a = sqrt(a / n);
printf("Average: %f\n", a);
for (i = 0; i < n; i++)
{
if (A[i] < a) A[i] = 0.;
printf("%3d)%20g\n", i + 1, A[i]);
}
free(A); getchar(); getchar(); return 0;
}
Не знаю что тут объяснять, но надо заметить, что здесь сравниваются вещественные числа, что всегда не очень хорошо ибо чревато непридвиденностями. На возникающие вопросы отвечу. А вот пример работы кода:
Формула среднего квадратического корня последовательности элементов - Квадратный корень из частного суммы всех квадратов элементов и количества элементов.
Подключаем нужные заголовки для работы с консолью - stdio.h и использования sqrt - math.h :
Вынесем формулу в отдельную функцию:
Введём удобную функцию для вывода массива в консоль:
Ну и собственно функция main с небольшим define, для удобства:
Подключаем нужные заголовки для работы с консолью - stdio.h и использования sqrt - math.h :
#include
#include
Вынесем формулу в отдельную функцию:
void foo(int array[], int size) {
double RMS = 0.;
for (int i = 0; i < size; i++)
RMS += (double)(array[i] * array[i]);
RMS = sqrt(RMS / (double)size);
for (int i = 0; i < size; i++)
if (array[i] < RMS)
array[i] = 0;
}
Тут мы делаем ровно то, что сказала нам формула. Находим сумму всех квадратов, далее делим её на количество элементов и берём квадратный корень из полученного числа.Введём удобную функцию для вывода массива в консоль:
void arrprint(int array[], int size) {
printf("ARRAY[%i]: { %i", size, *array);
for (int i = 1; i < size; i++)
printf(", %i", array[i]);
printf(" }\n");
}
Ну и собственно функция main с небольшим define, для удобства:
#define ARRSIZE(arr) (sizeof(arr)/sizeof(*arr))
int main() {
int array[] = { 10, 15, 20, 25, 30, 35, 40 };
arrprint(array, ARRSIZE(array));
foo(array, ARRSIZE(array));
arrprint(array, ARRSIZE(array));
return 0;
}
P.S define работает только с массивами определёнными в статической памяти. С указателями, по которыми выделялась память при помощи malloc/calloc данный макрос работать не будетПохожие вопросы
- Помогите решить задачу на си!!!
- Помогите решить задачу на СИ!
- Помогите пожалуйста решить задачу на Си
- Помогите решить задачу на структуры в Си.
- Помогите решить задачу по программированию на C++
- Помогите решить задачу, пожалуйста. (Язык Си)
- Помогите решить задачу, пожалуйста. Сам не понимаю. (Язык Си)
- Помогите решить задачу на языке программирования Си, пожалуйста
- Помогите решить задачу по C++!
- Написать код на си .Желательно с объяснением