Вычислить сумму всех элементов списка и поместить ее на место последнего положительного элемента - 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; }
Объяснение кода листинга программы
- Создание списка с помощью функций
Push
иGetRandomList
. - Вывод списка на экран с помощью функции
Print
. - Вычисление суммы всех элементов списка с помощью функции
GetSum
. - Поиск последнего положительного элемента списка с помощью функции
FindLast
и функцииIsPositive
. - Добавление суммы на место последнего положительного элемента списка с помощью функции
Push
. - Вывод списка на экран с помощью функции
Print
. - Очистка списка с помощью функции
Clear
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д