开始
实验
我要
提问
我要
纠错
C语言制作简单计算器

C 语言制作简单计算器

一、实验介绍

1.1 实验内容

本次课程我们要使用 C 语言做一个简单的计算器,能执行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。因为我们需要检查输入,确保用户没有要求计算机完成不可能的任务。还必须允许用户一次输入一个计算式,例如:

32.4 + 32 或者 9 * 3.2

1.2 实验知识点

  • C语言基本语法
  • C语言输入与输出

1.3 实验环境

本实验环境采用带桌面的 Ubuntu Linux 环境,实验中会使用到以下程序(均位于桌面):

  1. Xfce 终端(Xfce Terminal)
  2. GVim:非常好用的编辑器,最简单的用法可以参考课程《Vim 编辑器》

1.4 适合人群

适合涉及C语言的基本语法,与输入与输出。适合初学者学习。

1.5 代码获取

$ git clone https://github.com/shiyanlou/Calculator
#进入目录
$ cd Calculator 
#编译
$ gcc -o Calculator Calculator.c
#运行
./Calculator

1.6 实验效果

最终我们实现的计算器的运行效果如下图:

此处输入图片的描述

二、实验原理

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

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

三、实验步骤

3.1 获取用户输入

获得用户输入非常简单,可以使用 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;  
}

3.2 检查格式并进行运算

接下来我们程序所要实现的功能是对输入的运算表达式进行格式检查。

最基本检查的是我们必须要判断输入表达式所要执行的操作是否有效。有效的操作有 +, -, *, /, % ,所以需要检查输入的操作是否是属于定义中的一个。

另外值得注意的一点是,当输入的操作为 / 或者 % 时,第二个操作数不能为 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;
  }

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

3.3 编译文件

编写完程序文件之后,就可以对源文件进行编译获得可执行文件,编译的命令如下:

$ gcc -o Calculator Calculator.c

注意:上方 gcc 指令的格式为,gcc -o 生成文件名 源文件名.c 如果没有提供“生成文件名”,则默认生成文件名为 a.out

这时候发现目录底下多出了一个 Calculator 文件,这就是我们通过编译链接源文件之后所得到的可执行文件,执行 ./Caculator 指令进行运行。

此处输入图片的描述

3.4 程序的完整代码

#include<stdio.h>
int main()
{
   double number1=0.0;
   double number2=0.0;
   char operation=0;

   printf("\nEnter the calculation\n");
   scanf("%lf%c%lf",&number1,&operation,&number2);

   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;          
    }
    return 0;
}

四、实验总结

本次课程我们使用 C 语言实现了一个简易的计算器。当然目前计算器能实现的功能还相当简陋,仅能支持两个操作数的简单计算。在这个计算器的基础上,同学们还可以继续扩展,比如能支持任意多个操作数的运算,或者引入运算符优先关系机制等等。

0% Complete

加载中,精彩就在后面...

卡住了?点击重试