C语言快速入门教程
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
  • 实战案例

    • 简易计算器
    • 学生管理系统
    • 小游戏项目
    • 文件管理器

简易计算器

嗨,我是长安!

这是我当年学C语言时做的第一个像样的项目。虽然功能简单,但做完后那种成就感真的难以言表。今天我把这个项目分享给你,希望你也能感受到编程的乐趣!

一个功能完整的命令行计算器项目!

项目介绍

我当年花了两天时间完成这个项目,它能实现:

  • ✅ 基本四则运算
  • ✅ 历史记录功能
  • ✅ 菜单系统
  • ✅ 错误处理

说实话,做完这个项目后,我对函数、结构体的理解都上了一个台阶。

完整代码

#include <stdio.h>
#include <stdlib.h>

#define MAX_HISTORY 100

// 历史记录结构
typedef struct {
    float num1;
    float num2;
    char op;
    float result;
} History;

// 全局变量
History history[MAX_HISTORY];
int historyCount = 0;

// 函数声明
void printMenu();
void calculate();
void showHistory();
void clearHistory();
float add(float a, float b);
float subtract(float a, float b);
float multiply(float a, float b);
float divide(float a, float b);
void saveHistory(float a, float b, char op, float result);

int main() {
    int choice;
    
    printf("=================================\n");
    printf("     欢迎使用简易计算器!       \n");
    printf("=================================\n\n");
    
    while (1) {
        printMenu();
        printf("请选择:");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                calculate();
                break;
            case 2:
                showHistory();
                break;
            case 3:
                clearHistory();
                break;
            case 4:
                printf("\n感谢使用!再见!\n");
                return 0;
            default:
                printf("\n❌ 无效选择,请重试!\n\n");
        }
    }
    
    return 0;
}

// 打印菜单
void printMenu() {
    printf("=== 主菜单 ===\n");
    printf("1. 计算\n");
    printf("2. 查看历史\n");
    printf("3. 清空历史\n");
    printf("4. 退出\n");
    printf("=============\n");
}

// 计算功能
void calculate() {
    float num1, num2, result;
    char op;
    
    printf("\n请输入表达式(如:5 + 3):");
    scanf("%f %c %f", &num1, &op, &num2);
    
    switch (op) {
        case '+':
            result = add(num1, num2);
            break;
        case '-':
            result = subtract(num1, num2);
            break;
        case '*':
            result = multiply(num1, num2);
            break;
        case '/':
            if (num2 == 0) {
                printf("❌ 错误:除数不能为0!\n\n");
                return;
            }
            result = divide(num1, num2);
            break;
        default:
            printf("❌ 错误:不支持的运算符!\n\n");
            return;
    }
    
    printf("✅ %.2f %c %.2f = %.2f\n\n", num1, op, num2, result);
    saveHistory(num1, num2, op, result);
}

// 显示历史记录
void showHistory() {
    printf("\n=== 计算历史 ===\n");
    
    if (historyCount == 0) {
        printf("暂无历史记录\n");
    } else {
        for (int i = 0; i < historyCount; i++) {
            printf("%d. %.2f %c %.2f = %.2f\n", 
                   i + 1,
                   history[i].num1,
                   history[i].op,
                   history[i].num2,
                   history[i].result);
        }
    }
    printf("===============\n\n");
}

// 清空历史
void clearHistory() {
    historyCount = 0;
    printf("\n✅ 历史记录已清空!\n\n");
}

// 加法
float add(float a, float b) {
    return a + b;
}

// 减法
float subtract(float a, float b) {
    return a - b;
}

// 乘法
float multiply(float a, float b) {
    return a * b;
}

// 除法
float divide(float a, float b) {
    return a / b;
}

// 保存历史
void saveHistory(float a, float b, char op, float result) {
    if (historyCount < MAX_HISTORY) {
        history[historyCount].num1 = a;
        history[historyCount].num2 = b;
        history[historyCount].op = op;
        history[historyCount].result = result;
        historyCount++;
    } else {
        printf("⚠️  历史记录已满!\n");
    }
}

运行示例

=================================
     欢迎使用简易计算器!       
=================================

=== 主菜单 ===
1. 计算
2. 查看历史
3. 清空历史
4. 退出
=============
请选择:1

请输入表达式(如:5 + 3):10 + 5
✅ 10.00 + 5.00 = 15.00

=== 主菜单 ===
1. 计算
2. 查看历史
3. 清空历史
4. 退出
=============
请选择:1

请输入表达式(如:5 + 3):20 * 3
✅ 20.00 * 3.00 = 60.00

=== 主菜单 ===
1. 计算
2. 查看历史
3. 清空历史
4. 退出
=============
请选择:2

=== 计算历史 ===
1. 10.00 + 5.00 = 15.00
2. 20.00 * 3.00 = 60.00
===============

知识点总结

这个项目用到了:

  • ✅ 函数封装
  • ✅ switch语句
  • ✅ 数组存储数据
  • ✅ 结构体
  • ✅ 循环和菜单
  • ✅ 错误处理

扩展练习

可以尝试添加:

  1. 支持括号运算
  2. 支持更多运算(幂、平方根等)
  3. 保存历史到文件
  4. 支持连续运算

下一步

👉 学生管理系统

最近更新: 2025/12/26 14:29
Next
学生管理系统