手持计算器

本文介绍了一个C语言程序,用于接收用户在控制台上输入的数学表达式,包括数字、小数点、运算符,能进行加减乘除运算,并处理除数为0和非法字符的情况。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char c, x[20], p[20];
    int k = 0, l = 0, m = 0;
    float y[20], num1, num2, result;
    printf("请输入一个表达式:");
    while(1)
    {
        c = getchar();
        if (c >= '0' && c <= '9' || c == '.') // 数字或小数点
        {
            x[k] = c;
            k = k + 1;
        }
        else if (c == '*' || c == '/' || c == '+' || c == '-') // 运算符
        {
            p[l] = c;
            l = l + 1;
            x[k] = '\0'; // 结束字符数组
            y[m] = atof(x); // 将数字字符串转换为浮点数
            k = 0;
            m = m + 1;
        }
        else if (c == 'C') // 清零
        {
            memset(x, 0, sizeof(x)); // 将字符数组清零
            memset(p, 0, sizeof(p));
            k = 0;
            l = 0;
            m = 0;
            printf("请输入一个表达式:");
            continue;
        }
        else if (c == '=') // 计算表达式
        {
            x[k] = '\0';
            y[m] = atof(x);
            num1 = y[0];
            for (int i = 0; i < l; i++)
            {
                num2 = y[i + 1];
                switch(p[i])
                {
                    case '+':
                        result = num1 + num2;
                        break;
                    case '-':
                        result = num1 - num2;
                        break;
                    case '*':
                        result = num1 * num2;
                        break;
                    case '/':
                        if (num2 == 0)
                        {
                            printf("除数不能为0,请重新输入!\n");
                            goto CLEAR; // 跳转到清零操作
                        }
                        result = num1 / num2;
                        break;
                }
                num1 = result;
            }
            printf("计算结果为:%f\n", result);
            m = 0;
            k = 0;
            l = 0;
            memset(x, 0, sizeof(x));
            memset(p, 0, sizeof(p));
            printf("请输入一个表达式:");
        }
        else if (c == '\n') // 忽略回车
        {
            continue;
        }
        else // 非法字符
        {
            printf("输入错误,请重新输入!\n");
            CLEAR: // 跳转到清零操作
            memset(x, 0, sizeof(x)); // 将字符数组清零
            memset(p, 0, sizeof(p));
            k = 0;
            l = 0;
            m = 0;
            printf("请输入一个表达式:");
            continue;
        }
    }
    return 0;
}
 

  1. 运行程序后,输入一个表达式,例如:3.14+2.5*2-1/0.5

  2. 按下回车键后,程序会输出计算结果:计算结果为:9.140000

  3. 继续输入表达式,程序会一直运行,直到按下Ctrl+C结束程序

  4. 如果输入的表达式中有非法字符(除了数字、小数点、运算符和C),程序会提示输入错误并清零

  5. 如果输入的表达式中除数为0,程序会提示除数不能为0并清零

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值