第1关:数据输入和计算
任务描述
本关任务:
-
编写函数
input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10])
,作用为输入职工的代号,岗位工资,薪级工资,其他补贴,水电费,其他扣款。 -
uid
: 职工代号。 -
salary
: 岗位工资。 -
csalary
: 薪级工资。 -
revenue
: 其他补贴。 -
_water_electricity
: 水电费。 -
_deductions
: 其他扣款。 -
编写函数
calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10])
,计算应发工资,扣款合计,实发工资。数据存储均为数组,且数组大小为10
,即职工数为10
。 -
uid
: 职工代号。 -
salary
: 岗位工资。 -
csalary
: 薪级工资。 -
revenue
: 其他补贴。 -
_water_electricity
: 水电费。 -
_deductions
: 其他扣款。 -
t_salary
: 应发工资。 -
deduction_count
: 扣款合计。 -
r_salary
: 实发工资。
测试输出为: 打印输出input_data()
函数输入数据。 打印输出calculate()
计算结果。
相关知识
相关知识略
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写数据输入和计算的小程序。
测试说明
平台会对你编写的代码进行测试:
测试输入:
U01 1000 800 400 97 100
U02 1200 800 400 82 100
U03 1500 1000 200 131 120
U04 1000 800 400 70 100
U05 1800 1000 200 120 120
U06 2500 1000 200 132 150
U07 2200 1000 200 147 120
U08 3000 1000 200 86 150
U09 1600 1000 200 111 100
U10 4000 1500 100 156 160
预期输出:
注意:
1.
输入数据如上面测试输入所示,实际评测集输入数据与之等同。 2.
输出间距为10
个字符。
void input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10]) {
/********** Begin **********/
int i;
for(i=0;i<10;i++)
scanf("%s%d%d%d%d%d",&uid[i],&salary[i],&csalary[i],&revenue[i],&_water_electricity[i],&_deductions[i]);
printf("代号: 岗位工资:薪级工资:其他补贴:水电费: 其他扣款:\n");
for(i=0;i<10;i++)
printf("%-10s%-10d%-10d%-10d%-10d%-10d\n",uid[i],salary[i],csalary[i],revenue[i],_water_electricity[i],_deductions[i]);
printf("\n");
/********** End **********/
}
void calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10],
int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10]){
/********** Begin **********/
printf("代号: 岗位工资:薪级工资:其他补贴:水电费: 其他扣款:应发工资:扣款合计:实发工资:\n");
int i;
for(i=0;i<10;i++)
{
t_salary[i]=salary[i]+csalary[i]+revenue[i];
deduction_count[i]=_water_electricity[i]+_deductions[i];
r_salary[i]=t_salary[i]-deduction_count[i];
}
for(i=0;i<10;i++)
printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[i],salary[i],csalary[i],revenue[i],_water_electricity[i],_deductions[i],t_salary[i],deduction_count[i],r_salary[i]);
/********** End **********/
}
第2关:工资排序
任务描述
本关任务:
-
编写
rank_r_salary(char uid[10][5], int r_salary[10])
函数对职工实发工资进行排序,按降序排列。 -
uid
:职工代号。 -
r_salary
:实发工资。 -
编写
rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10])
函数,按应发工资降序求出名次。 -
uid
:职工代号。 -
t_salary
:应发工资。 -
rid
:名次。
说明:以上参数均由系统给出,不用再从键盘获取。
相关知识
相关知识略
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写工资排序的小程序。
测试说明
平台会对你编写的代码进行测试:
预期输出为:
void rank_r_salary(char uid[10][5], int r_salary[10]) {
/********** Begin **********/
int i,j,item;
int k=0;
char a[5];
printf("代号: 实发工资:\n");
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(r_salary[i]<r_salary[j])
{
item=r_salary[i];
r_salary[i]=r_salary[j];
r_salary[j]=item;
while(uid[i][k]!='\0')
{
a[k]=uid[i][k];
k=k+1;
}
a[k]='\0';
k=0;
while(uid[i][k]!='\0')
{
uid[i][k]=uid[j][k];
k+=1;
}
uid[i][k]='\0';
k=0;
while(a[k]!='\0')
{
uid[j][k]=a[k];
k=k+1;
}
uid[j][k]='\0';
k=0;
}
}
}
for(i=0;i<10;i++)
{
printf("%s %d \n",uid[i],r_salary[i]);
}
/********** End **********/
}
void rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10]) {
/********** Begin **********/
int i,j;
printf("代号: 应发工资:名次: \n");
for(i=0;i<10;i++)
{
rid[i]=1;
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(t_salary[i]<t_salary[j])
rid[i]++;
}
}
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(rid[i]==rid[j])
rid[j]++;
}
}
for(i=0;i<10;i++)
{
printf("U%02d %d %-6d \n",i+1,t_salary[i],rid[i]);
}
/********** End **********/
}
第3关:打印工资表
任务描述
本关任务:定义数组进行职工工资的简单处理:
-
编写函数
input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10])
,作用为输入职工的代号,岗位工资,薪级工资,其他补贴,水电费,其他扣款。 -
uid
: 职工代号。 -
salary
: 岗位工资。 -
csalary
: 薪级工资。 -
revenue
: 其他补贴。 -
_water_electricity
: 水电费。 -
_deductions
: 其他扣款。 -
编写函数
calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10])
,计算应发工资,扣款合计,实发工资。数据存储均为数组,且数组大小为10
,即职工数为10
。 -
uid
: 职工代号。 -
salary
: 岗位工资。 -
csalary
: 薪级工资。 -
revenue
: 其他补贴。 -
_water_electricity
: 水电费。 -
_deductions
: 其他扣款。 -
t_salary
: 应发工资。 -
deduction_count
: 扣款合计。 -
r_salary
: 实发工资。 -
编写
rank_r_salary(int r_salary[10], int index[10])
函数对职工实发工资进行排序,按降序排列,将排序序号存入index[10]
数组中作为rank_t_salary_id()
中的r_rank[10]
降序索引输入。 -
r_salary
:实发工资。 -
index
: 实发工资降序索引。 -
编写
rank_t_salary_id(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10],int r_rank[10])
函数,按应发工资降序求出每个职工的名次,输出含有代号,岗位工资,薪级工资,其他补贴,应发工资,水电费,其他扣款,扣款合计,实发工资,名次共10
列信息的二维职工工资表。要求用数组存放所有数据。 -
uid
: 职工代号。 -
salary
: 岗位工资。 -
csalary
: 薪级工资。 -
revenue
: 其他补贴。 -
_water_electricity
: 水电费。 -
_deductions
: 其他扣款。 -
t_salary
: 应发工资。 -
deduction_count
: 扣款合计。 -
r_salary
: 实发工资。 -
r_rank
: 实发工资降序索引。
相关知识
相关知识略
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写打印工资表的小程序。
测试说明
平台会对你编写的代码进行测试:
测试输入:
U01 1000 800 400 97 100
U02 1200 800 400 82 100
U03 1500 1000 200 131 120
U04 1000 800 400 70 100
U05 1800 1000 200 120 120
U06 2500 1000 200 132 150
U07 2200 1000 200 147 120
U08 3000 1000 200 86 150
U09 1600 1000 200 111 100
U10 4000 1500 100 156 160
预期输出:
说明:第一张表为calculate()
函数输出结果共9
列。第二张表为rank_t_salary_id()
函数输出结果共10
列,以实发工资降序排序,名次为应发工资降序排序。每张表列宽为10
个字符。
注意:输入数据如上面测试输入所示,实际评测集输入数据与之等同。
void input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10]) {
/********** Begin **********/
int b;
for(b=0;b<10;b++)
scanf("%s%d%d%d%d%d",uid[b],&salary[b],&csalary[b],&revenue[b],&_water_electricity[b],&_deductions[b]);
/********** End **********/
}
void calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10],
int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10]){
/********** Begin **********/
int c,d;
for(c=0;c<10;c++)
{
t_salary[c]=salary[c]+csalary[c]+revenue[c];
deduction_count[c]=_water_electricity[c]+_deductions[c];
r_salary[c]=t_salary[c]-deduction_count[c];
}
printf("代号: 岗位工资:薪级工资:其他补贴:水电费: 其他扣款:应发工资:扣款合计:实发工资:\n");
d=0;
for(;d<10;d++)
{
if(d<9)
printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[d],salary[d],csalary[d],revenue[d],_water_electricity[d],_deductions[d],t_salary[d],deduction_count[d],r_salary[d]);
else
printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[d],salary[d],csalary[d],revenue[d],_water_electricity[d],_deductions[d],t_salary[d],deduction_count[d],r_salary[d]);
}
printf("\n");
/********** End **********/
}
void rank_r_salary(int r_salary[10], int index[10]) {
/********** Begin **********/
int max,i,k,j=0;int visit[10]={0};
max=r_salary[0];
for(k=0;k<10;k++)
{
for(i=0;i<10;i++)
{
if(r_salary[i]>max)
{
if(visit[i]==1)
continue;
else
{
max=r_salary[i];
j=i;
}
}
}
visit[j]=1;
index[j]=k+1;
j=0;
max=0;
}
/********** End **********/
}
void rank_t_salary_id(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10],
int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10],int r_rank[10]) {
/********** Begin **********/
int max,i,k,j=0;int visit[10]={0};
max=r_salary[0];
printf("代号: 岗位工资:薪级工资:其他补贴:水电费: 其他扣款:应发工资:扣款合计:实发工资:名次: \n");
for(k=0;k<10;k++)
{
for(i=0;i<10;i++)
{
if(r_salary[i]>max)
{
if(visit[i]==1)
continue;
else
{
max=r_salary[i];
j=i;
}
}
}
visit[j]=1;
if(r_rank[j]==9)
{
r_rank[j]=r_rank[j]+1;
printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[j],salary[j],csalary[j],revenue[j], _water_electricity[j],_deductions[j],t_salary[j],deduction_count[j],r_salary[j],r_rank[j]);
}
else if(r_rank[j]==10)
{
r_rank[j]=r_rank[j]-1;
printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[j],salary[j],csalary[j],revenue[j], _water_electricity[j],_deductions[j],t_salary[j],deduction_count[j],r_salary[j],r_rank[j]);
}
else if(r_rank[j]!=10&r_rank[j]!=9)
printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[j],salary[j],csalary[j],revenue[j], _water_electricity[j],_deductions[j],t_salary[j],deduction_count[j],r_salary[j],r_rank[j]);
j=0;
max=0;
}
/********** End **********/
}