Вывод в консоль - 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 = ' ';
}
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- В условии if проверяется, является ли остаток от деления переменной rest на 10 равным 1, а также проверяется, является ли остаток от деления переменной rest на 100 меньше 10 или больше 20. Если оба условия выполняются, то переменной s присваивается значение 'а'.
- Если условие if не выполняется, то программа переходит к блоку else if, где проверяется, является ли остаток от деления переменной rest на 10 больше или равен 2 и меньше или равен 4, а также проверяется, является ли остаток от деления переменной rest на 100 меньше 10 или больше 20. Если оба условия выполняются, то переменной s присваивается значение 'ы'.
- Если ни одно из условий if и else if не выполняется, то программа переходит к блоку else, где переменной s присваивается значение ' '. Таким образом, в результате выполнения данного кода переменной s будет присвоено одно из трех значений: 'а', 'ы' или ' '.