#include <stdio.h>
// Constants
#define SIZE 5
#define OVERTIME_RATE 1.5
#define STD_WORK_WEEK 40.0
// Function prototypes
float getHours( long int clockNumber) ;
void printHeader( void ) ;
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) ;
float calculateOvertime( float hours) ;
float calculateGrossPay( float wageRate, float hours, float overtimeHrs) ;
int main( ) {
// Employee data
long int clockNumber[ SIZE] = { 98401 , 52648 , 76534 , 34645 , 12761 } ;
float grossPay[ SIZE] ;
float hours[ SIZE] ;
float overtimeHrs[ SIZE] ;
float wageRate[ SIZE] = { 10.60 , 9.75 , 10.50 , 12.25 , 8.35 } ;
// Process each employee
for ( int i = 0 ; i < SIZE; i++ ) {
// Read hours for employee
hours[ i] = getHours( clockNumber[ i] ) ;
// Calculate overtime hours
overtimeHrs[ i] = calculateOvertime( hours[ i] ) ;
// Calculate gross pay
grossPay[ i] = calculateGrossPay( wageRate[ i] , hours[ i] , overtimeHrs[ i] ) ;
}
// Print the header info
printHeader( ) ;
// Print all employees
for ( int i = 0 ; i < SIZE; i++ ) {
printEmp( clockNumber[ i] , wageRate[ i] , hours[ i] , overtimeHrs[ i] , grossPay[ i] ) ;
}
return 0 ;
}
// Function: getHours
// Purpose: Obtains input from user, the number of hours worked per employee and stores the result.
float getHours( long int clockNumber) {
float hoursWorked;
printf ( "Enter hours worked for employee ID %ld: " , clockNumber
) ; scanf ( "%f" , & hoursWorked
) ; return hoursWorked;
}
// Function: printHeader
// Purpose: Prints the header for the employee summary output
void printHeader( void ) {
printf ( "\n Employee Summary:\n " ) ; printf ( "---------------------------------------------------------\n " ) ; printf ( "Employee ID | Wage Rate | Hours Worked | Overtime Hours | Gross Pay\n " ) ; printf ( "---------------------------------------------------------\n " ) ; }
// Function: printEmp
// Purpose: Prints the details for each employee
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) {
printf ( "%10ld | %9.2f | %12.2f | %14.2f | %9.2f\n " , clockNumber
, wageRate
, hours
, overtimeHrs
, grossPay
) ; }
// Function: calculateOvertime
// Purpose: Calculates the overtime hours worked
float calculateOvertime( float hours) {
if ( hours > STD_WORK_WEEK) {
return hours - STD_WORK_WEEK;
}
return 0.0 ;
}
// Function: calculateGrossPay
// Purpose: Calculates the gross pay based on wage rate, hours worked, and overtime
float calculateGrossPay( float wageRate, float hours, float overtimeHrs) {
float regularPay = wageRate * ( hours - overtimeHrs) ;
float overtimePay = overtimeHrs * wageRate * OVERTIME_RATE;
return regularPay + overtimePay;
}
CiNpbmNsdWRlIDxzdGRpby5oPgoKLy8gQ29uc3RhbnRzCiNkZWZpbmUgU0laRSA1CiNkZWZpbmUgT1ZFUlRJTUVfUkFURSAxLjUKI2RlZmluZSBTVERfV09SS19XRUVLIDQwLjAKCi8vIEZ1bmN0aW9uIHByb3RvdHlwZXMKZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpOwp2b2lkIHByaW50SGVhZGVyKHZvaWQpOwp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSk7CmZsb2F0IGNhbGN1bGF0ZU92ZXJ0aW1lKGZsb2F0IGhvdXJzKTsKZmxvYXQgY2FsY3VsYXRlR3Jvc3NQYXkoZmxvYXQgd2FnZVJhdGUsIGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycyk7CgppbnQgbWFpbigpIHsKICAgIC8vIEVtcGxveWVlIGRhdGEKICAgIGxvbmcgaW50IGNsb2NrTnVtYmVyW1NJWkVdID0gezk4NDAxLCA1MjY0OCwgNzY1MzQsIDM0NjQ1LCAxMjc2MX07CiAgICBmbG9hdCBncm9zc1BheVtTSVpFXTsKICAgIGZsb2F0IGhvdXJzW1NJWkVdOwogICAgZmxvYXQgb3ZlcnRpbWVIcnNbU0laRV07CiAgICBmbG9hdCB3YWdlUmF0ZVtTSVpFXSA9IHsxMC42MCwgOS43NSwgMTAuNTAsIDEyLjI1LCA4LjM1fTsKICAgIAogICAgLy8gUHJvY2VzcyBlYWNoIGVtcGxveWVlCiAgICBmb3IgKGludCBpID0gMDsgaSA8IFNJWkU7IGkrKykgewogICAgICAgIC8vIFJlYWQgaG91cnMgZm9yIGVtcGxveWVlCiAgICAgICAgaG91cnNbaV0gPSBnZXRIb3VycyhjbG9ja051bWJlcltpXSk7CiAgICAgICAgCiAgICAgICAgLy8gQ2FsY3VsYXRlIG92ZXJ0aW1lIGhvdXJzCiAgICAgICAgb3ZlcnRpbWVIcnNbaV0gPSBjYWxjdWxhdGVPdmVydGltZShob3Vyc1tpXSk7CiAgICAgICAgCiAgICAgICAgLy8gQ2FsY3VsYXRlIGdyb3NzIHBheQogICAgICAgIGdyb3NzUGF5W2ldID0gY2FsY3VsYXRlR3Jvc3NQYXkod2FnZVJhdGVbaV0sIGhvdXJzW2ldLCBvdmVydGltZUhyc1tpXSk7CiAgICB9CgogICAgLy8gUHJpbnQgdGhlIGhlYWRlciBpbmZvCiAgICBwcmludEhlYWRlcigpOwogICAgCiAgICAvLyBQcmludCBhbGwgZW1wbG95ZWVzCiAgICBmb3IgKGludCBpID0gMDsgaSA8IFNJWkU7IGkrKykgewogICAgICAgIHByaW50RW1wKGNsb2NrTnVtYmVyW2ldLCB3YWdlUmF0ZVtpXSwgaG91cnNbaV0sIG92ZXJ0aW1lSHJzW2ldLCBncm9zc1BheVtpXSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCi8vIEZ1bmN0aW9uOiBnZXRIb3VycwovLyBQdXJwb3NlOiBPYnRhaW5zIGlucHV0IGZyb20gdXNlciwgdGhlIG51bWJlciBvZiBob3VycyB3b3JrZWQgcGVyIGVtcGxveWVlIGFuZCBzdG9yZXMgdGhlIHJlc3VsdC4KZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpIHsKICAgIGZsb2F0IGhvdXJzV29ya2VkOwogICAgcHJpbnRmKCJFbnRlciBob3VycyB3b3JrZWQgZm9yIGVtcGxveWVlIElEICVsZDogIiwgY2xvY2tOdW1iZXIpOwogICAgc2NhbmYoIiVmIiwgJmhvdXJzV29ya2VkKTsKICAgIHJldHVybiBob3Vyc1dvcmtlZDsKfQoKLy8gRnVuY3Rpb246IHByaW50SGVhZGVyCi8vIFB1cnBvc2U6IFByaW50cyB0aGUgaGVhZGVyIGZvciB0aGUgZW1wbG95ZWUgc3VtbWFyeSBvdXRwdXQKdm9pZCBwcmludEhlYWRlcih2b2lkKSB7CiAgICBwcmludGYoIlxuRW1wbG95ZWUgU3VtbWFyeTpcbiIpOwogICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgcHJpbnRmKCJFbXBsb3llZSBJRCB8IFdhZ2UgUmF0ZSB8IEhvdXJzIFdvcmtlZCB8IE92ZXJ0aW1lIEhvdXJzIHwgR3Jvc3MgUGF5XG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKfQoKLy8gRnVuY3Rpb246IHByaW50RW1wCi8vIFB1cnBvc2U6IFByaW50cyB0aGUgZGV0YWlscyBmb3IgZWFjaCBlbXBsb3llZQp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSkgewogICAgcHJpbnRmKCIlMTBsZCB8ICU5LjJmIHwgJTEyLjJmIHwgJTE0LjJmIHwgJTkuMmZcbiIsIGNsb2NrTnVtYmVyLCB3YWdlUmF0ZSwgaG91cnMsIG92ZXJ0aW1lSHJzLCBncm9zc1BheSk7Cn0KCi8vIEZ1bmN0aW9uOiBjYWxjdWxhdGVPdmVydGltZQovLyBQdXJwb3NlOiBDYWxjdWxhdGVzIHRoZSBvdmVydGltZSBob3VycyB3b3JrZWQKZmxvYXQgY2FsY3VsYXRlT3ZlcnRpbWUoZmxvYXQgaG91cnMpIHsKICAgIGlmIChob3VycyA+IFNURF9XT1JLX1dFRUspIHsKICAgICAgICByZXR1cm4gaG91cnMgLSBTVERfV09SS19XRUVLOwogICAgfQogICAgcmV0dXJuIDAuMDsKfQoKLy8gRnVuY3Rpb246IGNhbGN1bGF0ZUdyb3NzUGF5Ci8vIFB1cnBvc2U6IENhbGN1bGF0ZXMgdGhlIGdyb3NzIHBheSBiYXNlZCBvbiB3YWdlIHJhdGUsIGhvdXJzIHdvcmtlZCwgYW5kIG92ZXJ0aW1lCmZsb2F0IGNhbGN1bGF0ZUdyb3NzUGF5KGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBob3VycywgZmxvYXQgb3ZlcnRpbWVIcnMpIHsKICAgIGZsb2F0IHJlZ3VsYXJQYXkgPSB3YWdlUmF0ZSAqIChob3VycyAtIG92ZXJ0aW1lSHJzKTsKICAgIGZsb2F0IG92ZXJ0aW1lUGF5ID0gb3ZlcnRpbWVIcnMgKiB3YWdlUmF0ZSAqIE9WRVJUSU1FX1JBVEU7CiAgICByZXR1cm4gcmVndWxhclBheSArIG92ZXJ0aW1lUGF5Owp9