简易计算器
嗨,我是长安!
这是我当年学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语句
- ✅ 数组存储数据
- ✅ 结构体
- ✅ 循环和菜单
- ✅ 错误处理
扩展练习
可以尝试添加:
- 支持括号运算
- 支持更多运算(幂、平方根等)
- 保存历史到文件
- 支持连续运算
下一步
👉 学生管理系统