Среднее арифметическое четных элементов целочисленного файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите доделать задачу. У меня пока только получилось найти количество чётных элементов в файле, а вот со средним арифметическим пока туговато...
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int k=0;                           /* vneshnyaya peremennaya */
int sum=0;
int sr_arifm=0;
int main()
  {
    FILE * file;
    char namef[18];                /* stroka dlya imeni faila */
    /* ========= prototypi ========= */
    void read_print_icx(FILE * );  /* chtenie i vivod vxodnogo faila */
    void job(char []);             /* obrabotka vxodnogo faila */
    void uslovie();                /* yuslovie zadachi */
 
    uslovie();
    printf("Vvedite imya faila:");
    scanf("%s", namef);
 
/*     printf("\nnamef=%s\n", namef);*/
 
    if((file=fopen(namef, "r"))==NULL)
      {printf("File %s ne otkrit!!\n", namef);
       exit(-1);
      }
 
    read_print_icx(file);
    job(namef);
    if(k)
       printf("k=%d\n", k);
       
    else
       printf("net chetnih elementov\n");
    if (sr_arifm)
        printf("sr_arifm=%d\n", sr_arifm);
    getch();
    return 0;
}
/* ===== vspomogatel'nie algoritmi: ===== */
void uslovie()
  {
  printf("Naytu srednee arifmeticheskoe chetnih chisel tselochislennogo faila.\n");
  }
/* chtenie i vivod vxodnogo faila */
void read_print_icx(FILE * filein)
 {int el;
  printf("\n");
  while  (fscanf(filein, "%d", &el)!= EOF)
    printf("!  %d ", el);
  fclose(filein);
}
/* obrabotka vxodnogo faila */
void job(char namef[])
 {int el;
  FILE * filein;
  if((filein=fopen(namef, "r"))==NULL)
     {printf("File %s ne otkrit!!\n", namef);
       exit(-1);
      }
  printf("\n");
  while  (fscanf(filein, "%d", &el)!= EOF)
       if (el%2==0) 
           k++;
 //   sum=el;
//         sr_arifm=sum/k;
  fclose(filein);
}

Решение задачи: «Среднее арифметическое четных элементов целочисленного файла»

textual
Листинг программы
#include <stdio.h>
#include <assert.h>
 
int main() {
    FILE* f;
    float summ = 0;
    unsigned count = 0;
    int value;
 
    assert(f = fopen("file.txt", "r"));
 
    while ((fscanf(f, "%d", &value)) == 1) {
        if (value % 2 == 0) {
            summ += value;
            count++;
        }
    }
 
    printf("%f", summ / count);
 
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и проверки assert-ов.
  2. Объявление переменных: — summ - переменная для хранения суммы четных чисел; — count - переменная для хранения количества четных чисел.
  3. Открытие файла с помощью fopen и проверка на успешное открытие с помощью assert.
  4. Чтение чисел из файла с помощью fscanf и сохранение их в переменной value.
  5. Проверка числа на четность с помощью оператора % (остаток от деления на 2).
  6. Если число четное, то прибавляем его к summ и увеличиваем count на 1.
  7. После чтения всех чисел из файла, выводим среднее арифметическое с помощью printf.
  8. Закрытие файла с помощью fclose.
  9. Возвращение 0, означающее успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы