鱼C论坛

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

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

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

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

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

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

float result(char ch,float num1, float num2){
        switch(ch){
                case '+':
                        return num1 + num2;
                case '-':
                        return num1 - num2;
                case 'x':
                        return num1 * num2;
                case '/':
                        return num1 / num2;
                default:
                        printf("无效的运算符:\n");
                        return 0.0;
        }
}
int main(){
        float num1,num2;
        char ch;
        printf("请你输入你要计算的两个数:");
        scanf("%f %c %f", &num1, &ch, &num2);

        printf("答案是:%.2f\n",result(ch,num1,num2));
        return 0;
}
刚学,只会写一个加减乘除的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

下面是一个简单的实现:
def calculator():    while True:        expression = input("请输入表达式(例如3+2):")                # 检查用户是否想要退出        if expression.lower() == 'q':            print("已退出计算器")            break                # 分割表达式为操作数和运算符        try:            num1, operator, num2 = expression.split()            num1 = float(num1)            num2 = float(num2)        except:            print("请输入有效的表达式!")            continue                # 根据运算符进行计算        if operator == '+':            result = num1 + num2        elif operator == '-':            result = num1 - num2        elif operator == '*':            result = num1 * num2        elif operator == '/':            if num2 != 0:                result = num1 / num2            else:                print("除数不能为零!")                continue        else:            print("请输入有效的运算符(+ - * /)!")            continue                print("计算结果:", result)# 调用计算器函数calculator()
在这个实现中,我们使用一个无限循环来持续接收用户的输入。我们先检查用户是否想要退出计算器,如果用户输入的是"q",我们就结束循环并打印一条退出消息。否则,我们尝试通过`split()`函数将用户输入的表达式分割成操作数和运算符,并将它们转换为浮点数以进行计算。

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

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

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

使用道具 举报

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

while True:
    s = input() . strip()
    if s:
        print(calc(s))
    else:
        break

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

def calcx(p) :
    result , k = getdat(p)
    while (k < len(p) and (p[k] == '*' or p[k] == '/' or p[k] == '%')) :
        e = 1 if k < len(p) - 1 and p[k : k + 2] == '//' else 0
        d , m = getdat(p[k + e + 1 :])
        if p[k] == '*' or p[k] == '/' or p[k] == '%' :
            if e :
                result //= d
            else :
                if p[k] == '*' :      
                    result *= d
                elif p[k] == '/' :
                    result /= d
                else :
                    result %= d
            k += m + e + 1
        else :
            break
    return result , k

def calc(p):
    result , k = calcx(p)
    while(k < len(p)) :
        d , m = calcx(p[k + 1 :])        
        result = result + d if p[k] == '+' else result - d
        k += m + 1
    return result

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

使用道具 举报

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

float result(char ch,float num1, float num2){
        switch(ch){
                case '+':
                        return num1 + num2;
                case '-':
                        return num1 - num2;
                case 'x':
                        return num1 * num2;
                case '/':
                        return num1 / num2;
                default:
                        printf("无效的运算符:\n");
                        return 0.0;
        }
}
int main(){
        float num1,num2;
        char ch;
        printf("请你输入你要计算的两个数:");
        scanf("%f %c %f", &num1, &ch, &num2);

        printf("答案是:%.2f\n",result(ch,num1,num2));
        return 0;
}
刚学,只会写一个加减乘除的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#include <stdio.h>


int Add(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
////                printf("嘿嘿嘿!!");
        return num1 + num2;        //1.将数据返回  2.结束函数 
}
int Sub(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
//                printf("嘿嘿嘿!!");
        return num1 - num2;        //1.将数据返回  2.结束函数 
}
int Mul(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
//                printf("嘿嘿嘿!!");
        return num1 * num2;        //1.将数据返回  2.结束函数 
}
int Div(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
//                printf("嘿嘿嘿!!");
        return num1 / num2;        //1.将数据返回  2.结束函数 
}

int fun1(){
        int num1,num2;
        char opa; 
        scanf("%d%c%d",&num1,&opa,&num2); 
        switch(opa){
                case '+':return Add(num1,num2);break; 
                case '-':return Sub(num1,num2);break;
                case '*':return Mul(num1,num2);break;
                case '/':return Div(num1,num2);break;
        } 
        
} 
main(){
        
        printf("%d",fun1());
        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 22:02:31 | 显示全部楼层
本帖最后由 yg飞许 于 2024-1-9 22:49 编辑
#include <stdio.h>
int Add(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
////                printf("嘿嘿嘿!!");
        return num1 + num2;        //1.将数据返回  2.结束函数 
}
int Sub(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
//                printf("嘿嘿嘿!!");
        return num1 - num2;        //1.将数据返回  2.结束函数 
}
int Mul(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
//                printf("嘿嘿嘿!!");
        return num1 * num2;        //1.将数据返回  2.结束函数 
}
int Div(int num1,int num2){
//        int num1,num2;
//        scanf("%d%d",&num1,&num2);
//                printf("嘿嘿嘿!!");
        return num1 / num2;        //1.将数据返回  2.结束函数 
}

int fun1(){
        int num1,num2;
        char opa;
        int  fin;
        scanf("%d%c%d",&num1,&opa,&num2); 
        switch(opa){
                case '+':printf("%d",fin = Add(num1,num2));break; 
                case '-':printf("%d",fin = Sub(num1,num2));break;
                case '*':printf("%d",fin = Mul(num1,num2));break;
                case '/':printf("%d",fin = Div(num1,num2));break;
        } 

        while(1){
                scanf("%c%d",&opa,&num2); 
                switch(opa){
                        case '+':printf("%d",fin = Add(fin,num2));break; 
                        case '-':printf("%d",fin = Sub(fin,num2));break;
                        case '*':printf("%d",fin = Mul(fin,num2));break;
                        case '/':printf("%d",fin = Div(fin,num2));break;
                        case 'q':return printf("嘿嘿"); 
                } 
        }        
} 
main(){
        

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

//若用户输入 1+9 输出10        
}
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-12-23 03:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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