Программа неправильно считает еженедельную зарплату каждого служащего - C (СИ)
Формулировка задачи:
Есть задача:
Компания платит своим служащим как администраторам (это те, кто получает еженедельно фиксированную зарплату), работникам с почасовой оплатой (те, кто получает фиксированную почасовую оплату за первые 40 отработанных часов и «полуторную», т.е. превышающую в 1.5 раз их почасовую, оплату за сверхурочные часы работы), работникам с комиссионным вознаграждением (те, кто по*лучает $250 плюс 5.7% от их валовых еженедельных продаж) и ра*ботникам со сдельной оплатой труда (те, кто получает фиксирован*ную сумму денег за каждую единицу произведенной ими продукции- каждый сдельщик в этой компании работает только с одной разновидностью продукции). Напишите программу для расче*та еженедельной зарплаты каждого служащего. Вам неизвестно за*ранее количество служащих. Служащий каждой из групп имеет соб*ственный код оплаты: администраторы имеют код оплаты 1, работники с почасовой оплатой имеют код 2, работники с комисси*онным вознаграждением имеют код 3 и работники со сдельной опла*той труда имеют код 4. Используйте оператор switch для расчета зарплаты каждого служащего в зависимости от его кода. Внутри оператора switch попросите пользователя (т.е. клерка, рассчитываю*щего зарплату) ввести соответствующие данные, которые потребу*ются вашей программе для расчета зарплаты каждого служащего, исходя из его кода оплаты.
Есть код на Си:Почти все нормально работает,но когда при вводе кода №3 и вводе любого числа в еженедельные валовые продажи пишет 0, Причем! Если я убираю из этой формулы прибавление 250(ну или как у меня q) процент он считает и выводит число,а не 0. Что не так?
P.S. Знаю что код не очень то хорош но по другому остальные пункты не работали.
#include <stdio.h> #include <locale.h> int main() { int cog,chas,sverh,i,e,valprod,q; double oplata,zarplata,g,w; setlocale(LC_ALL, "Russian"); puts("Введите код оплаты(1-Администратор,2-почасовая оплата,\n3-с коммисионным вознагрождением,4-сдельная оплата"); puts("Ctrl + Z для окончания"); oplata=0; i=40; g=1.5; valprod=0; w=5.7; e=100; q=250; while((cog=getchar())!=EOF) { switch (cog) { case'1': puts("Ведите вашу еженедельную оплату"); scanf("%d",&oplata); printf("Ваша еженедельная зарплата: %d",oplata); break; case'2': puts("Ведите вашу часовую зарплату"); scanf("%d",&oplata); puts("Сколько часов на этой неделе вы работали?"); scanf("%d",&chas); if(chas>40){ sverh=chas-i; zarplata=((oplata*g)*sverh)+(oplata*i); printf("Ваша еженедельная зарплата: %d\n",zarplata); } else{ zarplata=oplata*(double)chas; printf("Ваша еженедельная зарплата: %d\n",zarplata);} break; case'3': puts("Ведите ваши валовые еженедельный продажи"); scanf("%d",&oplata); zarplata= ((oplata*w)/e+q) ; printf("Ваша еженедельная зарплата: %d\n", zarplata); break; case'4': puts("Ведите сколько вы получаете денег за единицу продукции"); scanf("%d",&oplata); puts("Ведите сколько вы произвели продукцию за неделю"); scanf("%d",&chas); zarplata=oplata*(double)chas; printf("Ваша еженедельная зарплата: %d\n",zarplata); break; case'\n': case'\t': case' ': break; default: puts("Неккоректный ввод"); break; } } return 0; }
Решение задачи: «Программа неправильно считает еженедельную зарплату каждого служащего»
textual
Листинг программы
printf("Ваша еженедельная зарплата: %f\n", zarplata);
Объяснение кода листинга программы
- Программа запрашивает у пользователя информацию о зарплате каждого служащего
- Полученные данные сохраняются в переменную
zarplata
- Затем программа выводит на экран сообщение с еженедельной зарплатой каждого служащего, используя функцию printf
- Форматирование вывода осуществляется с помощью спецификатора формата
%f
, который указывает на то, что необходимо вывести переменнуюzarplata
в формате с плавающей точкой - После вывода сообщения на экран программа завершается
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д