Вывод в консоль - C (СИ)

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

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

Привет, всем! Задали задачку никак не могу решить. Программа выводит в консоль число и текст. Надо к тексту приделать нормальное окончание. Например: 1 монетА, 5 монет, 3 монетЫ.
#include <stdio.h>

int main(void)
{
    //Переменные
    float owed = 0.0;
    int CentCount;
    int rest = 0;
    int i;
    char s;
 
    //Массивы
    int MoneyCount[4] = {0, 0, 0, 0};
    int del[4] = {25, 10, 5, 1};
 
    printf("Привет! Сколько я должен сдачи?\n");
 
    //Ввод данных
    scanf("%f", &owed);
    printf("\n");
 
    if (owed <= 0.0){ printf("Я Вам ничего не должен!\n"); }
    else
    {
        //выясняем общее число центов в сдаче
        owed = owed * 100.0;
        CentCount = (int) owed;
 
        //считаем
        for(i=0; i<4; i++)
        {
            MoneyCount[i] = CentCount / del[i];
            CentCount = CentCount % del[i];
            rest = rest + MoneyCount[i];
 
            if(MoneyCount[i] > 0)       // добавим печать количества монет
            {
                if(MoneyCount[i] == 1)
                {
                    s = 'а';
                }
                else if(MoneyCount[i] % 2  || MoneyCount[i] % 3)
                {
                    s = 'ы';
                }
                else if(MoneyCount[i] % 5  || MoneyCount[i] % 7)
                {
                    s = ' ';
                }
 
                printf(" %i монет%c по %i \n", MoneyCount[i], s, del[i]);
            }
        }
        if(rest == 1)
        {
            s = 'а';
        }
        else if((rest % 2)  || (rest % 3))
        {
            s = 'ы';
        }
        else if(((rest % 5)  || (rest % 7)))
        {
            s = ' ';
        }
 
        //выводим результат на экран
        printf("\nВ нашей сдаче %i монет%c\n", rest, s);
    }
 
    return 0;
}
Может кто что-нибудь подскажет, что-то ничего в голову не приходит.

Решение задачи: «Вывод в консоль»

textual
Листинг программы
        if((rest%10 == 1) && ((rest%100<10) || (rest%100>20)))
        {
            s = 'а';
        }
        else if((rest%10 >= 2)  && (rest%10 <= 4) && ((rest%100<10) || (rest%100>20)))
        {
            s = 'ы';
        }
        else
        {
            s = ' ';
        }

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

В данном коде выполняется следующая последовательность действий:

  1. В условии if проверяется, является ли остаток от деления переменной rest на 10 равным 1, а также проверяется, является ли остаток от деления переменной rest на 100 меньше 10 или больше 20. Если оба условия выполняются, то переменной s присваивается значение 'а'.
  2. Если условие if не выполняется, то программа переходит к блоку else if, где проверяется, является ли остаток от деления переменной rest на 10 больше или равен 2 и меньше или равен 4, а также проверяется, является ли остаток от деления переменной rest на 100 меньше 10 или больше 20. Если оба условия выполняются, то переменной s присваивается значение 'ы'.
  3. Если ни одно из условий if и else if не выполняется, то программа переходит к блоку else, где переменной s присваивается значение ' '. Таким образом, в результате выполнения данного кода переменной s будет присвоено одно из трех значений: 'а', 'ы' или ' '.

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


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

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

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