Вычислить сумму всех элементов списка и поместить ее на место последнего положительного элемента - C (СИ)

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

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

задание: составить список А, содержащий вещественные числа. вычислить сумму всех элементов списка и поместить ее на место последнего положительного элемента. напишите, пожалуйста, код...

Решение задачи: «Вычислить сумму всех элементов списка и поместить ее на место последнего положительного элемента»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef struct node_t
{
   float value;
   struct node_t* next;
}  TList;
 
//-----------------------------------------------------------------------------
TList* Push(TList** list, float value)
{
   TList* node = (TList*) malloc(sizeof(TList));
   node->value = value;
   node->next = *list;
 
   *list = node;
 
   return *list;
}
//-----------------------------------------------------------------------------
void Clear(TList** list)
{
   TList* node;
 
   while (*list)
   {
      node = *list;
      (*list) = (*list)->next;
      free(node);
   }
}
//-----------------------------------------------------------------------------
float Random(int min, int max)
{
   return (float)(rand() % (max - min)) + ((float)(rand() % 100) / 100) + min;
}
//-----------------------------------------------------------------------------
TList* GetRandomList(size_t count)
{
   TList* list = NULL;
 
   while (count--)
   {
      Push(&list, Random(-10, 10));
   }
 
   return list;
}
//-----------------------------------------------------------------------------
double GetSum(TList* list)
{
   double sum = 0;
 
   for (; list; list = list->next)
   {
      sum += list->value;
   }
 
   return sum;
}
//-----------------------------------------------------------------------------
int IsPositive(float value)
{
   return (value > 0.0);
}
//-----------------------------------------------------------------------------
TList* FindLast(TList* list, int (*func)(float))
{
   TList* finded = NULL;
 
   for (; list; list = list->next)
   {
      if (func(list->value))
      {
         finded = list;
      }
   }
 
   return finded;
}
//-----------------------------------------------------------------------------
void Print(TList* list)
{
   for (; list; list = list->next)
   {
      printf("%.2f ", list->value);
   }
   printf("\n");
}
//-----------------------------------------------------------------------------
 
int main(int argc, const char* argv[])
{
   srand(time(NULL));
 
   TList* list = GetRandomList(10);
 
   Print(list);
 
   double sum = GetSum(list);
   printf("sum = %.2lf\n", sum);
 
   TList* node = FindLast(list, IsPositive);
 
   if (node)
   {
      printf("last = %.2lf\n",node->value);
      Push(&node->next, (float)sum);
   }
 
   Print(list);
 
   system("pause");
 
   Clear(&list);
 
   return EXIT_SUCCESS;
}

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

  1. Создание списка с помощью функций Push и GetRandomList.
  2. Вывод списка на экран с помощью функции Print.
  3. Вычисление суммы всех элементов списка с помощью функции GetSum.
  4. Поиск последнего положительного элемента списка с помощью функции FindLast и функции IsPositive.
  5. Добавление суммы на место последнего положительного элемента списка с помощью функции Push.
  6. Вывод списка на экран с помощью функции Print.
  7. Очистка списка с помощью функции Clear.

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


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

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

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