Оператор return в C (или на любом другом языке, который я могу придумать) возвращает значение из функции. Это означает, что после оператора return больше не выполняется код этой функции, и следующая инструкция будет следующей после вашей функции. Если вы вернетесь из main, вызывается функция выхода, которая, помимо прочего, завершает процесс и обеспечивает доступность возвращаемого значения процесса.
On bash, если вы делаете:
./a.out
echo $?
вы можете увидеть возвращаемое значение вашей программы C.
Вам нужно продолжать добавлять как можно большую монету как можно дольше (жадный алгоритм), а затем переключаться на следующую меньшую монету.
Хороший способ, использовать целые числа и вычислять все в центах.
#include "stdio.h"
#define NUM_COIN_TYPES 4
int main(void)
{
int coins[NUM_COIN_TYPES] = {25, 10, 5, 1};
float change_owed_float = 13.37; //insert your read from commandline code here
int change_owed = (int)(change_owed_float * 100.f);
int num_coins = 0;
for(int ctr = 0; ctr < NUM_COIN_TYPES && change_owed > 0; ++ctr)
{
while(change_owed - coins[ctr] >= 0)
{
change_owed -= coins[ctr];
++num_coins;
}
}
printf("Number of coins required: %d\nChange owed: %d\n", num_coins, change_owed);
return 0; //could be void main and no return
}
Путь с плавающей точкой, который может привести к странностям:
#include "stdio.h"
#define NUM_COIN_TYPES 4
int main(void)
{
float coins[NUM_COIN_TYPES] = {.25,.10,.05, .01};
float change_owed = 13.37; //insert your read from commandline code here
int num_coins = 0;
for(int ctr = 0; ctr < NUM_COIN_TYPES && change_owed > 0.0; ++ctr)
{
while(change_owed - coins[ctr] >= -.009) //floats are weird
{
change_owed -= coins[ctr];
++num_coins;
}
}
if(change_owed > -.01 && change_owed <= 0.0)
{
//sanity check
printf("It works!\n");
change_owed = 0;
}
printf("Number of coins required: %d\nChange owed: %f\n", num_coins, change_owed);
return 0; //could be void main and no return
}
РЕДАКТИРОВАТЬ: Возможно, самый простой способ избежать странностей арифметики с плавающей точкой c, это просто использовать целые числа после умножения всего на 100.
HTH