我已经做过肆御笑了。具体思路:
把输入的算式当作一个链表,可以单链表,也可以双链表,随你。链表中有拆枯两种结点,数字结点和运算符结点。
数字结点:有一个double类型的数据域,有一个指针域,指向运算符结点。
运算符结裂含点:有一个char类型的数据域,存放运算符,还有一个指针域,指向下一个 *** 作数。
链表结构大概是: head——> *** 作数——>运算符——> *** 作数——>运算符——> *** 作数……………………——>运算符——> *** 作数——>NULL。
然后先计算乘除,后计算加减。
乘除运算:从表头开始查找运算符结点中,数据域是*或者/的,找到之后把他两边的数字结点的数据进行计算,结果放到它前一个数字结点中。然后删除该运算符结点和其后的一个数字结点。
相当于把…… *** 作数——>运算符1——> *** 作数——>运算符2……变成了…… *** 作数——>运算符2……
然后遍历链表执行上边的过程就可以完成乘除法了。
加减法与乘除同理
#include<stdio.h>
int main(){
int year,month
int a=0
printf("输入任意符合范围漏租搜(1月~12月)的月份和(1900年~9999年)年份,且两个值之间空返历格分隔。\n")
scanf("%d %d",&year,&month)
if(year%4==0&&型贺year%100!=0||year%400==0)
a=1//结果为1代表闰年
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("year =%d month =%d days=31\n",year,month)
break
case 2:
if(a==1)
printf("year =%d month =%d days=29\n",year,month)
else
printf("year =%d month =%d days=28\n",year,month)
break
case 4:
case 6:
case 9:
case 11:
printf("year =%d month =%d days=30\n",year,month)
break
}
return 0
}
/*工资计手歼算程序*/#include <stdio.h>
main()
{
float originWage /*应发工资*/
float realWage/*实发工资*/
float tax /*所缴税款*/
int i,hour,amount,money
printf("请选择工资种类:\n1.计时工资\n2.计件工资\n3.固定月工资\n")
scanf("%d",&i)
switch(i)
{
case 1:{
printf("请输入工作时间(单位:小时)\n")
scanf("%d",&hour)
printf("请输入单位时间的薪水(单位:元)郑启\n")
scanf("%f",&money)
originWage=money*hour
}
break
case 2:{
printf("请输入生产产品数量(单位:件)\n")
scanf("%d",&amount)
printf("请输入生产一件产品的薪水(单位:元)\n")
scanf("毕丛冲%f",&money)
originWage=money*amount
}
break
case 3: printf("请输入你的固定工资\n")
scanf("%f",&originWage)
break
default:printf("输入错误!\n")
return 0
}
if(originWage<0)
{
printf("数据错误!\n")
return 0
}
if(originWage<2000)
tax=0
else if(originWage>2000&&originWage<=2500)
tax=(originWage-2000)*0.05
else if(originWage>2500&&originWage<=4000)
tax=(originWage-2500)*0.1+500*0.05
else
tax=(originWage-4000)*0.15+1500*0.1+500*0.05
printf("应发工资: %f\n",originWage)
printf("所缴税款: %f\n",tax)
printf("实发工资: %f\n",originWage-tax)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)