화폐 단위 급여 계산기
추천 자료: ASP.NET Core 인증 및 권한 부여
문제 설명:
A 상사는 사원들의 급여를 지급할 때, 필요한 화폐의 종류별 매수를 계산하여 출력하려고 합니다. 다음 입력 형식과 처리 조건 그리고 출력 예시를 사용하여 프로그램을 작성하세요.
입력 형식:
- 프로그램은 사용자 입력을 받지 않습니다. 대신,
Employee
구조체 배열에 미리 정보를 초기화하여 사용합니다. - 화폐 단위: 50000 10000 5000 1000 500 100 50 10 5 1
처리 조건:
- 초과수당은 시간당 5000원입니다. 40시간 초과시 1.5배를 지급합니다.
- 총급여 = 기본급 + 초과수당
- 세율은 총급여가 40만원 이상일 경우 12%, 그렇지 않을 경우 10%로 계산합니다.
- 수령액 = 총급여 - 세금
출력 예시:
월급여 명세서
번호 이름 기본급 수당 총급여 세금 수령액
1 철수 450000 330000 780000 93600 686400
2 영희 390000 175000 565000 67800 497200
3 병욱 520000 315000 835000 100200 734800
4 지민 510000 195000 705000 84600 620400
5 수진 335000 352500 687500 82500 605000
합계 - - 3572500 428700 3143800
50000 원권 = 62 장
10000 원권 = 4 장
5000 원권 = 0 장
1000 원권 = 3 장
500 원권 = 1 장
100 원권 = 3 장
50 원권 = 0 장
10 원권 = 0 장
5 원권 = 0 장
1 원권 = 0 장
정답:
코드: salary_calculator.c
#include <stdio.h>
// 상수 정의
#define N 5 // 처리할 직원 수
#define OVERTIME_THRESHOLD 40 // 초과 근무 시간 기준 (이 시간을 초과할 경우 초과수당 적용)
#define OVERTIME_RATE 1.5 // 초과 근무 수당 비율 (기본 시급에 대한 비율로 계산됨)
#define STANDARD_PAY_PER_HOUR 5000 // 기본 시급
#define HIGH_TAX_RATE 0.12 // 높은 세율 (총 급여가 특정 임계값을 초과할 경우 적용됨)
#define LOW_TAX_RATE 0.1 // 낮은 세율 (총 급여가 특정 임계값 이하일 경우 적용됨)
#define HIGH_TAX_THRESHOLD 400000 // 높은 세율이 적용되는 급여 임계값
// 직원 정보를 담을 구조체 정의
typedef struct
{
char name[6]; // 직원 이름
long basicSalary; // 기본급
int overtimeHours; // 초과 근무 시간
} Employee;
// 월급여 명세서를 출력하는 함수 선언
void printSalaryDetails(const Employee employees[], int count);
int main(void)
{
// 직원 정보 초기화
Employee employees[N] =
{
{ "철수", 450000, 44 },
{ "영희", 390000, 35 },
{ "병욱", 520000, 42 },
{ "지민", 510000, 39 },
{ "수진", 335000, 47 }
};
// 월급여 명세서 출력
printSalaryDetails(employees, N);
return 0;
}
void printSalaryDetails(const Employee employees[], int count)
{
static long currencyUnits[10] = { 50000, 10000, 5000, 1000, 500, 100, 50, 10, 5, 1 }; // 화폐 단위 배열
long totalSalary = 0, totalTax = 0, totalTakeHome = 0; // 총급여, 총세금, 총수령액 초기화
printf("\t\t월급여 명세서\n");
printf("번호\t이름\t기본급\t수당\t총급여\t세금\t수령액\n");
for (int i = 0; i < count; i++)
{
// 초과수당 계산
long overtimePay = (employees[i].overtimeHours > OVERTIME_THRESHOLD)
? (long)employees[i].overtimeHours * STANDARD_PAY_PER_HOUR * OVERTIME_RATE
: (long)employees[i].overtimeHours * STANDARD_PAY_PER_HOUR;
long totalEarnings = employees[i].basicSalary + overtimePay; // 총 급여
float taxRate = (totalEarnings >= HIGH_TAX_THRESHOLD) ? HIGH_TAX_RATE : LOW_TAX_RATE; // 세율 결정
long tax = totalEarnings * taxRate; // 세금 계산
long takeHome = totalEarnings - tax; // 수령액 계산
printf("%d\t%5s\t%ld\t%ld\t%ld\t%ld\t%ld\n", i + 1, employees[i].name, employees[i].basicSalary, overtimePay, totalEarnings, tax, takeHome);
// 합계 계산
totalSalary += totalEarnings;
totalTax += tax;
totalTakeHome += takeHome;
}
// 합계 출력
printf("합계\t\t-\t-\t%ld\t%ld\t%ld\n\n", totalSalary, totalTax, totalTakeHome);
// 화폐별 매수 출력
for (int i = 0; i < 10; i++)
{
int notes = totalTakeHome / currencyUnits[i];
printf("%10ld 원권 = %2d 장\n", currencyUnits[i], notes);
totalTakeHome %= currencyUnits[i];
}
}
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!