急求教:C语言的一个经典例题

3、假设工资税率如下,其中s代表工资,r代表税率:

s<500 r=0%

500<=s<1000 r=5%

1000<=s<2000 r=8%

2000<=s<3000 r=10%

3000<=s r=15%
编一程序实现从键盘输入一个工资数,输出实发工资数。要求使用switch语句。

//(int)s/500,主要算法思想
#include<stdio.h>
int main()
{
float s,sum=0;
printf("输入工资数:");
scanf("%f",&s);
switch((int)s/500)
{
case 0:sum=s;break;
case 1:sum=s*0.95;break;
case 2:
case 3:sum=s*0.92;break;
case 4:
case 5:sum=s*0.90;break;
case 6:sum=s*0.85;break;
default:sum=s*0.85;
}
printf("实发工资数:%.2f\n",sum);
return 0;

}
/*
我试了两次,仅供参考:

输入工资数:4000
实发工资数:3400.00

输入工资数:2500
实发工资数:2250.00

至于输入工资到实发工资的公式可以根据题意写出来,可能跟yanh0606写的公式差不多
*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-09-07
#include<stdio.h>
#include<math.h>
int
main(void)
{
double
a,b,c;
double
x1,x2,x3,y1,y2,y3;
double
cosa,sina,square;
printf("请输入第一个点\n");
scanf("%lf,%lf",&x1,&y1);
printf("请输入第二个点\n");
scanf("%lf,%lf",&x2,&y2);
printf("请输入第三个点\n");
scanf("%lf,%lf",&x3,&y3);
/*
注意:
对于double类型来说
当用scanf给double类型赋值时
转换说明符应该是%lf,
或者%lf
而不是%f,
而是用printf给double
类型输出时,
则可以是用%f作为转换
说明符,
不过因此会缺失精度.
也就是类型反向提升
(类型降级)
所以为了准确度考虑,
建议是用%lf
*/
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
c=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
cosa
=
(b*b+c*c-a*a)/(2*b*c);
sina
=
sqrt(1-cosa*cosa);
square
=
b*c*sina/2;
/*
此处三角形面积公式为s
=
b*c*sina/2
*/
/*
而不是a*b*sina/2,
这点是值得注意的
*/
printf("三角形的面积为:%.2lf\n",
square);
/*
square的类型是double,
因此使用%lf输出
*/
return
0;
}
/*
程序测试,
粗体
代表输入
*/
请输入第一个点
0,0
请输入第二个点
3,0
请输入第三个点
3,4
三角形的面积为:6.00
第2个回答  2020-03-02
#include<stdio.h>
void
mian()
{
float
s,s1;
printf("输入原始知工资道数");
csanf("%f",&s);
if(s<=500)
s1=s;
else
s1=s/100;
switch(s)
{
case
5:
s1=500+(s-500)*0.05;
break;
case
10:
s1=500+(1000-500)*0.05+(s-1000)*0.08;
break;
case
20:
s1=500+(1000-500)*0.05+(2000-1000)*0.08+(s-2000)*0.1;
break;
default:
s1=500+(1000-500)*0.05+(2000-1000)*0.08+(3000-2000)*0.1+(s-3000)*0.15;
break;
}
printf("实发工专资数是属:%f",s1);
}
第3个回答  2010-05-17
#include<stdio.h>
void mian()
{
float s,s1;
printf("输入原始工资数");
csanf("%f",&s);
if(s<=500)
s1=s;
else
s1=s/100;
switch(s)
{
case 5:
s1=500+(s-500)*0.05; break;
case 10:
s1=500+(1000-500)*0.05+(s-1000)*0.08;
break;
case 20:
s1=500+(1000-500)*0.05+(2000-1000)*0.08+(s-2000)*0.1;
break;
default:
s1=500+(1000-500)*0.05+(2000-1000)*0.08+(3000-2000)*0.1+(s-3000)*0.15;
break;
}
printf("实发工资数是:%f",s1);
}
相似回答