求大神给一个C语言的程序代码做简易计算器?

求大神给一个C语言的程序代码做简易计算器?,第1张

更好看的代码

#include <stdio.h>

#include <math.h>

double sum(double a, double b) { return a + b }

double minu(double a, double b) { return a - b }

double mult(double a, double b) { return a * b }

double div(double a, double b) { return a / b }

int mod(int a, int b) { return a % b }

long long fact(int a)

{

long long ans = 1

for (int i = 2 i <= a ++i)

ans *= i

return ans

}

double squ(double a) { return a * a }

double sqr(double a) { return sqrt(a) }

double ABS(double a) { return a < 0 ? -a : a }

int main()

{

puts("欢迎使用我的计算器。请根兄扒旅据提示,完成计算")

while (1)

{

puts("****************")

puts("请输入第一个数")

double a

fflush(stdin)

scanf("%lf", &a)

puts("请输入 *** 作(加(0)、减(1)、乘(2)、此埋除(3)、求余(4)、阶乘(5)、平方(6)、开平方(7)、绝对值(8))")

fflush(stdin)

int ope

scanf("%d", &ope)

while (ope < 0 || ope > 8)

{

fflush(stdin)

puts("请重新输入")

scanf("%d", &ope)

}

double b

switch (ope)

{

case 0:

puts("请输入第羡凳二个数")

fflush(stdin)

scanf("%lf", &b)

printf("答案是:%lf\n", sum(a, b))

break

case 1:

puts("请输入第二个数")

fflush(stdin)

scanf("%lf", &b)

printf("答案是:%lf\n", minu(a, b))

break

case 2:

puts("请输入第二个数")

fflush(stdin)

scanf("%lf", &b)

printf("答案是:%lf\n", mult(a, b))

break

case 3:

puts("请输入第二个数")

fflush(stdin)

scanf("%lf", &b)

printf("答案是:%lf\n", div(a, b))

break

case 4:

puts("请输入第二个数")

fflush(stdin)

scanf("%lf", &b)

printf("答案是:%d\n", mod(a, b))

break

case 5:

printf("%lld\n", fact(a))

break

case 6:

printf("答案是:%lf\n", squ(a))

break

case 7:

printf("答案是:%lf\n", sqr(a))

break

case 8:

printf("答案是:%lf\n", ABS(a))

break

default:

puts("错误")

break

}

puts("****************")

}

return 0

}

// 代码原创,希望能对你有帮助

这种运算比较麻烦,不过4种运算符号优先级相同应该简单写,我这里有个算法判手旁,能进行简单的四则运算,delphi的,供参考

Function Math_Evaluate(S0:string):Extended

Function Evaluate(S0:String):ExtendedForward

Procedure CleanUp(var s0:string)

Var

I:integer

Begin

S0:=LowerCase(s0)

I:=Pos(' ',s0)

While I>0 Do

Begin

Delete(S0,I,1)

I:=Pos(' ',S0)

End

End

Function GetFirstOpp(Tot:IntegerS0:String):Integer

Const

Sopps:String=('+-*/^')

Var

I:Integer

Begin

If Tot=0 Then Tot:=Length(S0)

For I:=1 To 5 Do

Begin

Result:=Pos(Sopps[i],S0)

If ((I<3) And (Result>0)) Then

If ((Result=1) Or (Pos(S0[Result-1],Sopps)>0)) Then

Result:=0

If Result>0 Then

If Result<掘橡Tot Then

Exit

End

If Result>Tot Then

Result:=0

End

Function SpecialF(P1:IntegerS0:String):Extended

Var

Operstr:String

Arg:Extended

Begin

Result:=0

Operstr:=Copy(S0,1,P1-1)

If S0[Length(S0)]<>薯雹')' Then

Exit

Operstr:=LowerCase(Operstr)

Arg:=Evaluate(Copy(S0,P1+1,Length(S0)-P1-1))

if Operstr ='sin' Then

Result:=Sin(Arg)

Else if Operstr ='cos' Then

Result:=Cos(Arg)

Else if Operstr ='tan' Then

Result:=Sin(Arg)/Cos(Arg)

Else if Operstr ='arctan' Then

Result:=Arctan(Arg)

Else if Operstr ='log' Then

Result:=Ln(Arg)/Ln(10)

Else if Operstr ='ln' Then

Result:=Ln(Arg)

Else if Operstr ='exp' Then

Result:=Exp(Arg)

Else if Operstr ='sqrt' Then

Result:=Sqrt(Arg)

{enter additional functions here}

Else Exit

End

Function GetValue(S0:String):Extended

Begin

Result:=0

If Length(S0)<1 Then Exit

If Length(S0)=1 Then

Result:=StrToFloat(S0)

Else

Case s0[1] Of

'x':Result:=1

'y':Result:=1

'z':Result:=1

Else Result:=StrToFloat(S0)

End

End

Procedure MatchBracket(Var I:IntegerS0:String)

Var

J,Len:Integer

Begin

J:=1

Len:=Length(S0)

Repeat Inc(I)

If I>Len Then Exit

If S0[I]='(' Then Inc(J)

If S0[I]=')' Then Dec(J)

If J<0 Then Exit

Until J=0

End

Function Calculate(P1:IntegerS0:String):Extended

Var

V1,V2:Extended

Begin

Result:=0

V1:=Evaluate(Copy(S0,1,P1-1))

V2:=Evaluate(Copy(S0,P1+1,Length(s0)-P1))

Case S0[P1] Of

'+': Result:=V1+V2

'-': Result:=V1-V2

'/': Result:=V1/V2

'*': Result:=V1*V2

'^': Result:=Exp(V2*Ln(V1))

Else Exit

End

End

Function Evaluate(S0:string):Extended

Var

P1,P2,Q1:Integer

Begin

P1:=Pos('(',S0)

P2:=P1

If P2>0 Then

MatchBracket(P2,S0)

If P1=1 Then

Begin

If P2=Length(S0) Then

Begin

Delete(S0,P2,1)

Delete(S0,1,1)

Result:=Evaluate(S0)

End Else

Result:=Calculate(P2+1,S0)

Exit

End

Q1:=GetFirstOpp(P1,S0)

If (P1+Q1=0) Then

Begin

Result:=GetValue(S0)

Exit

End

If Q1<>0 Then

Result:=Calculate(Q1,S0)

Else If Length(S0)>P2 Then

Result:=Calculate(P2+1,S0)

Else

Result:=SpecialF(P1,S0)

End

Begin

Try

CleanUp(S0)

Result:=Evaluate(S0)

Except

Result:=0

End

End

1、中尘首先准备好软件即eclipse和java,下载安装完成后打开eclipse。

2、点击左上角的file 新建一个project。

3、给project取一个名字,其他的选项都是默认然后点击finish。

4、接下来是新建一个class。

5、在给class取名字的时候注意用英文名亏培猛的首字母要大写。完成后点击finish。

6、这就是开销桥始写代码的工作台,将代码写在绿字下。

7、这就是第一个hello world程序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12470432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存