Используя динамическую структуру список подсчитать сумму отрицательных чисел в нем - C (СИ)

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

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

Друзья прошу у вас помощи буду очень признателен, уже в отчаянии. Помогите пожалуйста написать программы со списками. 1) Используя динамическую структуру список подсчитать сумму отрицательных чисел в нем. 2)используя динамическую структуру список подсчитать количество положительных и количество отрицательных чисел в списке. Заранее огромное человеческое спасибо!

Решение задачи: «Используя динамическую структуру список подсчитать сумму отрицательных чисел в нем»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef struct node_t
{
    int value;
    struct node_t *next;
}   TList;
 
//-----------------------------------------------------------------------------
TList* Push(TList** list, int value)
{
    TList* node = (TList*) malloc(sizeof(TList));
    node->value = value;
    node->next = *list;
 
    *list = node;
 
    return *list;
}
//-----------------------------------------------------------------------------
int Pop(TList** list)
{
    int value = 0;
 
    if (*list)
    {
        TList* node = *list;
        *list = (*list)->next;
        value = node->value;
        free(node);
    }
 
    return value;
}
//-----------------------------------------------------------------------------
void Clear(TList** list)
{
    while (*list)
    {
        Pop(list);
    }
}
//-----------------------------------------------------------------------------
void Print(TList* list)
{
    for (; list; list = list->next)
    {
        printf("%d ", list->value);
    }
    printf("\n");
}
//-----------------------------------------------------------------------------
TList* GetGenList(size_t count, int min, int max)
{
    TList* list = NULL;
 
    while (count--)
    {
        Push(&list, rand() % (max - min) + min );
    }
 
    return list;
}
//-----------------------------------------------------------------------------
int IsPositive(const TList* node)
{
    return (node->value >= 0);
}
//-----------------------------------------------------------------------------
int IsNegative(const TList* node)
{
    return (node->value < 0);
}
//-----------------------------------------------------------------------------
size_t Count(TList* list, int (*func)(const TList*))
{
    size_t count = 0;
 
    for (; list; list = list->next)
    {
        if (func(list))
        {
            count++;
        }
    }
 
    return count;
}
//-----------------------------------------------------------------------------
int Sum(TList* list, int (*func)(const TList*))
{
    int sum = 0;
 
    for (; list; list = list->next)
    {
        if (func(list))
        {
            sum += list->value;
        }
    }
 
    return sum;
}
//-----------------------------------------------------------------------------
 
int main()
{
    srand(time(NULL));
 
    TList* list = GetGenList(20, -100, 100);
 
    printf("list:  ");
    Print(list);
 
    printf("sum of negative numbers = %d\n", Sum(list, IsNegative));
 
    printf("count positive = %u\n", Count(list, IsPositive));
    printf("count negative = %u\n", Count(list, IsNegative));
 
    system("pause");
 
    Clear(&list);
 
    return 0;
}

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

В данном коде используется динамическая структура - список (реализованный с помощью структур и связывающих элементов). Список содержит элементы типа int, каждый элемент списка связан с другим с помощью указателя next. Функция Push добавляет новый элемент в начало списка. Функция Pop удаляет и возвращает последний элемент списка. Функция Clear полностью очищает список. Функция Print выводит все элементы списка на экран. Функция GetGenList создает список случайных целых чисел от min до max (включительно). Функции IsPositive и IsNegative определяют, является ли значение в списке положительным или отрицательным соответственно. Функция Count подсчитывает количество элементов в списке, удовлетворяющих заданному условию (функции). Функция Sum суммирует все элементы в списке, удовлетворяющие заданному условию (функции). В функции main создается список из 20 случайных чисел от -100 до 100. Затем этот список выводится на экран. Далее, с помощью функции Sum подсчитывается сумма всех отрицательных чисел в списке. Затем, с помощью функции Count подсчитывается количество положительных и отрицательных чисел в списке. После этого система приостанавливается до нажатия клавиши. Наконец, список очищается с помощью функции Clear и программа завершается.

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


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

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

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