使用C语言制作一个简单的计算器

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,我们将学习如何使用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程序

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/BasicsGroup(["`Basics`"]) c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/BasicsGroup -.-> c/variables("`Variables`") c/BasicsGroup -.-> c/operators("`Operators`") c/ControlFlowGroup -.-> c/if_else("`If...Else`") c/ControlFlowGroup -.-> c/switch("`Switch`") c/UserInteractionGroup -.-> c/user_input("`User Input`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/variables -.-> lab-298833{{"`使用C语言制作一个简单的计算器`"}} c/operators -.-> lab-298833{{"`使用C语言制作一个简单的计算器`"}} c/if_else -.-> lab-298833{{"`使用C语言制作一个简单的计算器`"}} c/switch -.-> lab-298833{{"`使用C语言制作一个简单的计算器`"}} c/user_input -.-> lab-298833{{"`使用C语言制作一个简单的计算器`"}} c/output -.-> lab-298833{{"`使用C语言制作一个简单的计算器`"}} end

获取用户输入

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

取余运算符 % 对于 floatdouble 类型没有意义,因为它们可以表示精确的结果。% 运算符仅在应用于整数类型时才有意义。因此,在应用此运算符之前,操作数需要转换为整数。当运算符是 % 时,第二个操作数会被转换为整数。因此,仅检查第二个操作数是否为 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语言创建了一个简单的计算器。目前,这个计算器的功能有限,仅支持对两个操作数进行基本计算。同学们可以继续扩展这个计算器,比如增加对多个操作数的支持,或者引入运算符优先级机制。

您可能感兴趣的其他 C 教程