鱼C论坛

 找回密码
 立即注册
查看: 412|回复: 6

[已解决]定义一个函数,实现计算器功能

[复制链接]
发表于 2023-12-29 17:01:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义一个函数,实现计算器功能
例如
用户输入3+2 输出5
若用户继续输入 1+9 输出10
最佳答案
2023-12-30 20:04:28
  1. #include <stdio.h>

  2. float result(char ch,float num1, float num2){
  3.         switch(ch){
  4.                 case '+':
  5.                         return num1 + num2;
  6.                 case '-':
  7.                         return num1 - num2;
  8.                 case 'x':
  9.                         return num1 * num2;
  10.                 case '/':
  11.                         return num1 / num2;
  12.                 default:
  13.                         printf("无效的运算符:\n");
  14.                         return 0.0;
  15.         }
  16. }
  17. int main(){
  18.         float num1,num2;
  19.         char ch;
  20.         printf("请你输入你要计算的两个数:");
  21.         scanf("%f %c %f", &num1, &ch, &num2);

  22.         printf("答案是:%.2f\n",result(ch,num1,num2));
  23.         return 0;
  24. }
复制代码

刚学,只会写一个加减乘除的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-29 17:01:53 | 显示全部楼层
好的,我们可以定义一个计算器函数来实现这个功能。这个函数将接受用户输入的表达式,并返回计算结果。

下面是一个简单的实现:
  1. def calculator():
  2.     while True:
  3.         expression = input("请输入表达式(例如3+2):")
  4.         
  5.         # 检查用户是否想要退出
  6.         if expression.lower() == 'q':
  7.             print("已退出计算器")
  8.             break
  9.         
  10.         # 分割表达式为操作数和运算符
  11.         try:
  12.             num1, operator, num2 = expression.split()
  13.             num1 = float(num1)
  14.             num2 = float(num2)
  15.         except:
  16.             print("请输入有效的表达式!")
  17.             continue
  18.         
  19.         # 根据运算符进行计算
  20.         if operator == '+':
  21.             result = num1 + num2
  22.         elif operator == '-':
  23.             result = num1 - num2
  24.         elif operator == '*':
  25.             result = num1 * num2
  26.         elif operator == '/':
  27.             if num2 != 0:
  28.                 result = num1 / num2
  29.             else:
  30.                 print("除数不能为零!")
  31.                 continue
  32.         else:
  33.             print("请输入有效的运算符(+ - * /)!")
  34.             continue
  35.         
  36.         print("计算结果:", result)
  37. # 调用计算器函数
  38. calculator()
复制代码

在这个实现中,我们使用一个无限循环来持续接收用户的输入。我们先检查用户是否想要退出计算器,如果用户输入的是"q",我们就结束循环并打印一条退出消息。否则,我们尝试通过`split()`函数将用户输入的表达式分割成操作数和运算符,并将它们转换为浮点数以进行计算。

接下来,我们根据运算符执行相应的计算,并将结果打印出来。如果用户输入的表达式不符合预期,我们会提示用户重新输入。如果用户输入的是除法并且除数为零,我们将给出错误提示。

你可以试着运行这段代码,测试一下它是否可以满足你的需求。希望对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-29 17:20:11 | 显示全部楼层
本帖最后由 jackz007 于 2023-12-30 09:18 编辑
  1. def calc(s):
  2.     return eval(s)

  3. while True:
  4.     s = input() . strip()
  5.     if s:
  6.         print(calc(s))
  7.     else:
  8.         break
复制代码


        上面的代码利用了 Python 的 eval() 函数来计算表达式的值,下面用自编代码实现了对包含有 +、-、*、/、//、% 的算式进行求值的功能。
  1. def getdat(p) :
  2.     p = p + ' '
  3.     k = 0
  4.     if p[k] == '+' or p[k] == '-' :
  5.         k += 1
  6.     while(k < len(p) and p[k] != '+' and p[k] != '-' and p[k] != '*' and p[k] != '/' and p[k] != '%' and p[k] != ' ') :
  7.         k += 1
  8.     return eval(p[: k]) , k

  9. def calcx(p) :
  10.     result , k = getdat(p)
  11.     while (k < len(p) and (p[k] == '*' or p[k] == '/' or p[k] == '%')) :
  12.         e = 1 if k < len(p) - 1 and p[k : k + 2] == '//' else 0
  13.         d , m = getdat(p[k + e + 1 :])
  14.         if p[k] == '*' or p[k] == '/' or p[k] == '%' :
  15.             if e :
  16.                 result //= d
  17.             else :
  18.                 if p[k] == '*' :      
  19.                     result *= d
  20.                 elif p[k] == '/' :
  21.                     result /= d
  22.                 else :
  23.                     result %= d
  24.             k += m + e + 1
  25.         else :
  26.             break
  27.     return result , k

  28. def calc(p):
  29.     result , k = calcx(p)
  30.     while(k < len(p)) :
  31.         d , m = calcx(p[k + 1 :])        
  32.         result = result + d if p[k] == '+' else result - d
  33.         k += m + 1
  34.     return result

  35. while True :
  36.     s = input() . strip()
  37.     if s :
  38.         s = '' . join(s . split())
  39.         print(calc(s))
  40.     else:
  41.         break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-30 20:04:28 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>

  2. float result(char ch,float num1, float num2){
  3.         switch(ch){
  4.                 case '+':
  5.                         return num1 + num2;
  6.                 case '-':
  7.                         return num1 - num2;
  8.                 case 'x':
  9.                         return num1 * num2;
  10.                 case '/':
  11.                         return num1 / num2;
  12.                 default:
  13.                         printf("无效的运算符:\n");
  14.                         return 0.0;
  15.         }
  16. }
  17. int main(){
  18.         float num1,num2;
  19.         char ch;
  20.         printf("请你输入你要计算的两个数:");
  21.         scanf("%f %c %f", &num1, &ch, &num2);

  22.         printf("答案是:%.2f\n",result(ch,num1,num2));
  23.         return 0;
  24. }
复制代码

刚学,只会写一个加减乘除的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 21:59:27 | 显示全部楼层
本帖最后由 yg飞许 于 2024-1-9 22:01 编辑
liyifeng295641 发表于 2023-12-30 20:04
刚学,只会写一个加减乘除的。

  1. #include <stdio.h>


  2. int Add(int num1,int num2){
  3. //        int num1,num2;
  4. //        scanf("%d%d",&num1,&num2);
  5. ////                printf("嘿嘿嘿!!");
  6.         return num1 + num2;        //1.将数据返回  2.结束函数
  7. }
  8. int Sub(int num1,int num2){
  9. //        int num1,num2;
  10. //        scanf("%d%d",&num1,&num2);
  11. //                printf("嘿嘿嘿!!");
  12.         return num1 - num2;        //1.将数据返回  2.结束函数
  13. }
  14. int Mul(int num1,int num2){
  15. //        int num1,num2;
  16. //        scanf("%d%d",&num1,&num2);
  17. //                printf("嘿嘿嘿!!");
  18.         return num1 * num2;        //1.将数据返回  2.结束函数
  19. }
  20. int Div(int num1,int num2){
  21. //        int num1,num2;
  22. //        scanf("%d%d",&num1,&num2);
  23. //                printf("嘿嘿嘿!!");
  24.         return num1 / num2;        //1.将数据返回  2.结束函数
  25. }

  26. int fun1(){
  27.         int num1,num2;
  28.         char opa;
  29.         scanf("%d%c%d",&num1,&opa,&num2);
  30.         switch(opa){
  31.                 case '+':return Add(num1,num2);break;
  32.                 case '-':return Sub(num1,num2);break;
  33.                 case '*':return Mul(num1,num2);break;
  34.                 case '/':return Div(num1,num2);break;
  35.         }
  36.        
  37. }
  38. main(){
  39.        
  40.         printf("%d",fun1());
  41.        
  42. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 22:02:31 | 显示全部楼层
本帖最后由 yg飞许 于 2024-1-9 22:49 编辑
  1. #include <stdio.h>
  2. int Add(int num1,int num2){
  3. //        int num1,num2;
  4. //        scanf("%d%d",&num1,&num2);
  5. ////                printf("嘿嘿嘿!!");
  6.         return num1 + num2;        //1.将数据返回  2.结束函数
  7. }
  8. int Sub(int num1,int num2){
  9. //        int num1,num2;
  10. //        scanf("%d%d",&num1,&num2);
  11. //                printf("嘿嘿嘿!!");
  12.         return num1 - num2;        //1.将数据返回  2.结束函数
  13. }
  14. int Mul(int num1,int num2){
  15. //        int num1,num2;
  16. //        scanf("%d%d",&num1,&num2);
  17. //                printf("嘿嘿嘿!!");
  18.         return num1 * num2;        //1.将数据返回  2.结束函数
  19. }
  20. int Div(int num1,int num2){
  21. //        int num1,num2;
  22. //        scanf("%d%d",&num1,&num2);
  23. //                printf("嘿嘿嘿!!");
  24.         return num1 / num2;        //1.将数据返回  2.结束函数
  25. }

  26. int fun1(){
  27.         int num1,num2;
  28.         char opa;
  29.         int  fin;
  30.         scanf("%d%c%d",&num1,&opa,&num2);
  31.         switch(opa){
  32.                 case '+':printf("%d",fin = Add(num1,num2));break;
  33.                 case '-':printf("%d",fin = Sub(num1,num2));break;
  34.                 case '*':printf("%d",fin = Mul(num1,num2));break;
  35.                 case '/':printf("%d",fin = Div(num1,num2));break;
  36.         }

  37.         while(1){
  38.                 scanf("%c%d",&opa,&num2);
  39.                 switch(opa){
  40.                         case '+':printf("%d",fin = Add(fin,num2));break;
  41.                         case '-':printf("%d",fin = Sub(fin,num2));break;
  42.                         case '*':printf("%d",fin = Mul(fin,num2));break;
  43.                         case '/':printf("%d",fin = Div(fin,num2));break;
  44.                         case 'q':return printf("嘿嘿");
  45.                 }
  46.         }       
  47. }
  48. main(){
  49.        

  50. //        例如
  51. //用户输入3+2  输出 5  
  52. //若用户继续输入 +3  输出 8

  53. //若用户输入 1+9 输出10       
  54. }
复制代码
liyifeng295641 发表于 2023-12-30 20:04
刚学,只会写一个加减乘除的。

点评

我很赞同!: 5.0 不,我坚决不同意楼主的看法!: 5.0
我很赞同!: 5 不,我坚决不同意楼主的看法!: 5
  发表于 2024-1-9 22:04
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 15:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表