#include <stdio.h>
int main(int argc,char* argv[])
{
int nBase = 1500,nPerformance = 0,nTemp = 0,nRes = 0;
int nDuty = 0,nInvigilate = 0,nClass = 0;
double fReserve = 0.0;
printf("输入老师值班天数(不少于5天,不能超过22天):");
nRes = scanf("%d",&nDuty);
while(nRes == 1)
{
if (nDuty >= 5 && nDuty <= 22)
{
break;
}
else if (nDuty < 0)
{
printf("输入数据有误,请输入整数!\n");
}
else
{
printf("输入范围有误,请输入整数!\n");
}
printf("输入老师值班天数(不少于5天,不能超过22天):");
nRes = scanf("%d",&nDuty);
}
printf("输入老师监考次数(不能超过10次):");
nRes = scanf("%d",&nInvigilate);
while(nRes == 1)
{
if (nInvigilate >= 0 && nInvigilate <= 10)
{
break;
}
else if (nInvigilate < 0)
{
printf("输入数据有误,请输入整数!\n");
}
else
{
printf("输入范围有误,请输入整数!\n");
}
printf("输入老师监考次数(不能超过10次):");
nRes = scanf("%d",&nInvigilate);
}
printf("输入老师上课次数(不能超过30次):");
nRes = scanf("%d",&nClass);
while(nRes == 1)
{
if (nClass >= 0 && nClass <= 30)
{
break;
}
else if (nClass < 0)
{
printf("输入数据有误,请输入整数!\n");
}
else
{
printf("输入范围有误,请输入整数!\n");
}
printf("输入老师上课次数(不能超过30次):");
nRes = scanf("%d",&nClass);
}
nPerformance = (nDuty * 60) + (nInvigilate * 30) + (nClass * 64);
nTemp = nPerformance + nBase;
if (nTemp > 5000)
{
fReserve = (nTemp - 5000) * 0.25 + 1000 * 0.2 + 2000 * 0.15 + 2000 * 0.1;
}
else if (nTemp > 4000 && nTemp < 5000)
{
fReserve = (nTemp - 4000) * 0.2 + 2000 * 0.15 + 2000 * 0.1;
}
else if (nTemp > 2000 && nTemp < 4000)
{
fReserve = (nTemp - 2000) * 0.15 + 2000 * 0.1;
}
else if (nTemp < 2000)
{
fReserve = (float)(nTemp * 0.1);
}
printf("绩效工资总额是%d\n",nPerformance);
printf("工资总额是%d\n",nTemp);
printf("需要缴纳的公积金是%0.2f\n",fReserve);
return 0;
}
进一步实现其他任何非整型输入的情况,比如输入字符,用单独的函数实现判断,在主函数中调用此函数判断
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
8条回答 默认 最新
- 看得到你的人头 2016-12-07 03:09关注
可以参考参考
#include <stdio.h> #include <windows.h> void Input(int &nDuty, int &nInvigilate,int &nClass);//获取值班天数、监考次数、上课次数 void Calclate(int nDuty, int nInvigilate,int nClass);//计算工资、公积金等 int main(int argc,char* argv[]) { int nDuty = 0,nInvigilate = 0,nClass = 0; Input(nDuty, nInvigilate, nClass); Calclate(nDuty, nInvigilate, nClass); return 0; } //输入是否为合法数据 str为获取的字符串,minValue为合法的最小值,maxValue为合法的最大值 //返回值 合法,返回输入的整数,不合法返回0 int IsLegalInput(const char * str, int minValue, int maxValue) { int i = 0; int strValue = 0; int strLength = strlen(str);//数据长度 for (i = 0; i < strLength; i++) { if(('0' == str[i]) || ('1' == str[i]) || ('2' == str[i]) || ('3' == str[i]) || ('4' == str[i]) || ('5' == str[i]) || ('6' == str[i]) || ('7' == str[i]) || ('8' == str[i]) || ('9' == str[i])) { break; } else // 输入的不是整数 { printf("输入数据有误,请输入整数!\n"); return 0; } } //确认是整数了 strValue = atoi(str); if (strValue < minValue || maxValue < strValue ) { printf("输入范围有误,请输入%d到%d的整数!\n", minValue, maxValue); return 0; } return strValue; } void Input(int &nDuty, int &nInvigilate,int &nClass) { int rt; char input[10]; //输入老师值班天数 do { printf("输入老师值班天数(不少于5天,不能超过22天):"); scanf("%s",input); rt = nDuty = IsLegalInput(input, 5, 22);//是否为合法输入 } while (!rt); //输入老师监考次数 do { printf("输入老师监考次数(不能超过10次):"); scanf("%s",input); rt = nInvigilate = IsLegalInput(input, 1, 10);//是否为合法输入 } while (!rt); //输入老师上课次数 do { printf("输入老师上课次数(不能超过30次):"); scanf("%s",input); rt = nClass = IsLegalInput(input, 1, 30);//是否为合法输入 } while (!rt); } //计算工资、公积金等 void Calclate(int nDuty, int nInvigilate,int nClass) { int nPerformance = 0; int nTemp = 0; int nBase = 1500; nPerformance = (nDuty * 60) + (nInvigilate * 30) + (nClass * 64); nTemp = nPerformance + nBase; double fReserve = 0.0; if (nTemp > 5000) { fReserve = (nTemp - 5000) * 0.25 + 1000 * 0.2 + 2000 * 0.15 + 2000 * 0.1; } else if (nTemp > 4000 && nTemp < 5000) { fReserve = (nTemp - 4000) * 0.2 + 2000 * 0.15 + 2000 * 0.1; } else if (nTemp > 2000 && nTemp < 4000) { fReserve = (nTemp - 2000) * 0.15 + 2000 * 0.1; } else if (nTemp < 2000) { fReserve = (float)(nTemp * 0.1); } printf("绩效工资总额是%d\n",nPerformance); printf("工资总额是%d\n",nTemp); printf("需要缴纳的公积金是%0.2f\n",fReserve); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
- ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
- ¥50 rk3588板端推理
- ¥250 opencv怎么去掉 数字0中间的斜杠。
- ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
- ¥250 paddleocr带斜线的0很容易识别成9
- ¥15 电子档案元素采集(tiff及PDF扫描图片)
- ¥15 flink-sql-connector-rabbitmq使用
- ¥15 zynq7015,PCIE读写延时偏大
- ¥15 使用spss做psm(倾向性评分匹配)遇到问题