C 语言制作简单计算器

227 阅读2分钟

本文已参加[新人创作礼]活动,一起开启掘金创作之路。

课程实践:C 语言实现简单计算器_C

我们将要实现的计算器的执行流程如下:

获取用户输入的计算表达式。
检查输入的表达式格式,确保表达式对应的实际操作可以执行。
执行计算。
返回计算结果并在终端打印。

 

获取用户输入

获得用户输入非常简单,可以使用 C 语言提供的格式化输入输出函数 printf() 和 scanf() 即可。

下面是负责读取用户输入部分的程序代码:

#include<stdio.h>
int main()
{
   double number1=0.0;     // 定义第一个操作数
   double number2=0.0;     // 定义第二个操作数
   char operation=0;       // operation 必须是 '+' '-' '*' '/' 或 '%'


   printf("\nEnter the calculation\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\aDivision by zero error!\n");
           else
             printf("=%lf\n",number1/number2);
           break;


      case '%':
           if((long)number2==0)
             printf("\n\n\aDivision by zero error!\n");
           else
             printf("=%ld\n",(long)number1%(long)number2);
           break;


      default:
          printf("\n\n\aDivision by zero error!\n");
          break;
}

/*
注意:如果要写中文了,注意把编码格式变为GBK
*/

 

取余运算符对 float 或 double 类型是没有意义的,因为它们可以表示精确的结果。 只有把 % 运算符应用于整数类型才有意义。因此在应用这个运算符前,把操作数转换为整数( 这里选用的是long整形,因为范围大)。当运算符是 % 时,将第二个操作数转换为一个整数,所以仅仅检查第二个操作数是否为 0 是不够的,还必须检查 number2 在转换为 long 时,值是否为 0. 例如 0.5 不是 0,但是转换为整数时就是 0

 

image.png