介绍
在这个项目中,我们将学习如何使用 C 编程语言创建一个简单的计算器。这个计算器将能够执行基本的算术运算,如加法、减法、乘法和除法。我们还将进行检查,以确保用户输入有效,并处理输入导致未定义行为的情况。
👀 预览
$./Calculator
32+11
=43.000000
$./Calculator
41-34.9
=6.100000
$./Calculator
10/2
=5.000000
$./Calculator
2*4
=8.000000
$./Calculator
10%3
=1
🎯 任务
在这个项目中,你将学习:
- 如何使用
scanf()在 C 中获取用户输入 - 如何检查输入算术表达式的格式
- 如何根据用户输入进行算术计算
- 如何处理除零错误
- 如何仅对整数操作数实现取余运算符
🏆 成果
完成这个项目后,你将能够:
- 理解如何在 C 中获取用户输入
- 在 C 中实现不同的算术运算
- 进行错误检查并处理无效输入
- 使用
gcc编译器编译和运行 C 程序
获取用户输入
获取用户输入非常简单,你可以使用 C 语言的格式化输入输出函数printf()和scanf()。
以下是负责读取用户输入的程序代码:
#include<stdio.h>
int main()
{
double number1=0.0; // 定义第一个操作数
double number2=0.0; // 定义第二个操作数
char operation=0; // operation 应为'+' '-' '*' '/' 或 '%'
printf("\n输入计算式\n");
scanf("%lf%c%lf",&number1,&operation,&number2);
return 0;
}
检查格式并执行计算
我们的程序需要实现的下一个功能是检查输入算术表达式的格式。
最基本的检查是确定输入表达式中指定的操作是否有效。有效的操作是 +, -, *, /, %,所以我们需要检查输入的操作是否属于这个集合。
此外,需要注意的是,当操作是 / 或 % 时,第二个操作数不能为 0。如果是 0,则该操作无效。
这些检查的逻辑可以使用 if 语句来实现。或者,switch 语句提供了一种更好、更简洁的方式来处理这个问题。与一系列 if 语句相比,它更容易理解且更简洁。
switch(operation)
{
case '+':
printf("=%lf\n",number1+number2);
break;
case '-':
printf("=%lf\n",number1-number2);
break;
case '*':
printf("=%lf\n",number1*number2);
break;
case '/':
if(number2==0)
printf("\n\n\a除零错误!\n");
else
printf("=%lf\n",number1/number2);
break;
case '%':
if((long)number2==0)
printf("\n\n\a除零错误!\n");
else
printf("=%ld\n",(long)number1%(long)number2);
break;
default:
printf("\n\n\a无效操作!\n");
break;
}
取余运算符 % 对于 float 或 double 类型没有意义,因为它们可以表示精确的结果。% 运算符仅在应用于整数类型时才有意义。因此,在应用此运算符之前,操作数需要转换为整数。当运算符是 % 时,第二个操作数会被转换为整数。因此,仅检查第二个操作数是否为 0 是不够的,还需要检查 number2 转换为 long 类型时的值是否为 0。例如,0.5 不是 0,但转换为整数时会变为 0。
编译和运行文件
编写完程序文件后,你可以编译源文件以获得可执行文件。编译命令如下:
gcc -o Calculator Calculator.c
注意:上面的
gcc命令格式是gcc -o output_filename source_filename.c。如果未提供“output_filename”,默认输出文件名是a.out。
此时,你会在目录中注意到一个名为Calculator的新文件。这是我们在编译和链接源文件后获得的可执行文件。要运行它,使用命令./Calculator。
./Calculator
$./Calculator
32+11
=43.000000
$./Calculator
41-34.9
=6.100000
$./Calculator
10/2
=5.000000
$./Calculator
2*4
=8.000000
$./Calculator
10%3
=1
总结
在这个项目中,我们使用 C 语言创建了一个简单的计算器。目前,这个计算器的功能有限,仅支持对两个操作数进行基本计算。同学们可以继续扩展这个计算器,比如增加对多个操作数的支持,或者引入运算符优先级机制。



