- C++ 开发 Web 服务框架
- 1 小时入门增强现实技术
- C++ 实现高性能内存池
- GDB 简明教程
- C++ 实现太阳系行星系统
- C++11/14 高速上手教程
- C 语言实现 Linux Shell 命令解释器
- C++ 打造 Markdown 解析器
- C 语言实现文件类型统计程序
- C 语言实现 Linux touch 命令
- C 语言入门教程
- C 语言实现多线程排序
- 多线程生产者消费者模型仿真停车场
- C++实现运动目标的追踪
- C 语言实现 Linux 网络嗅探器
- 100 行 C++ 代码实现线程池
- C 语言实现聊天室软件
- C 语言实现 Linux who 命令
- C 语言实现 Linux cp 命令
- C++实现第一人称射击游戏
- C++ 实现银行排队服务模拟
- 数据结构(新版)
- 软件工程(C 编码实践篇)
- C 语言制作简单计算器
- C 语言版 flappy_bird
- C 语言编写万年历
- C 语言版扫雷游戏
- C 语言实现一个支持 PHP 的简易 WEB 服务器
- C 语言制作 2048
- C 语言模拟 ATM 自动取款机系统
- Linux 系统编程
- C 语言利用 epoll 实现高并发聊天室
- C 语言快速实现五子棋
- C 语言实现 ping 程序
- 简单词法分析器(C++语言)
第 1 节 C 语言制作简单计算器
一. 项目说明
本实验环境采用带桌面的 Ubuntu Linux 环境,实验中会用到桌面上的程序:
- LX 终端(LXTerminal): Linux 命令行终端,打开后会进入 Bash 环境,可以使用 Linux 命令
- Firefox:浏览器,可以用在需要前端界面的课程里,只需要打开环境里写的 HTML/JS 页面即可
- GVim:非常好用的编辑器,最简单的用法可以参考课程 Vim 编辑器
1. 环境使用
使用 GVim 编辑器输入实验所需的代码及文件,使用 LX 终端(LXTerminal)运行所需命令进行操作。
实验报告可以在个人主页中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。
本课程中的所有源码可以通过以下方式下载:
$ git clone http://git.shiyanlou.com/shiyanlou/Calculator
二、项目介绍
我们要用 c 语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。我们需要检查输入,确保用户没有要求计算机完成不可能的任务。还必须允许用户一次输入一个计算式,例如: 32.4+32 或者 9*3.2
项目效果图
编写这个程序的步骤如下:
- 获得用户要求计算机执行计算所需的输入。
- 检查输入,确保输入可以理解。
- 执行计算。
- 显示结果。
三、解决方案
1.步骤 1
获得用户输入是很简单的,可以使用 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;
}
2.步骤 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\aDavision by zero error!\n");
else
printf("=%lf\n",number1/number2);
break;
case '%':
if((long)number2==0)
printf("\n\n\aDavision by zero error!\n");
else
printf("=%ld\n",(long)number1%(long)number2);
break;
default:
printf("\n\n\aDavision by zero error!\n");
break;
取余运算符对 float 或 double 类型是没有意义的,因为他们可以表示精确的结果。只有把%运算符应用于整数类型才有意义。因此在应用这个运算符前,把操作数转换为整数。当运算符是%时,将第二个操作数转换为一个整数,所以仅仅检查第二个操作数是否为 0 是不够的,还必须检查 number2 在转换为 long 时,值是否为 0.例如 0.5 不是 0,但是转换为整数时就是 0。
四、程序的完整代码
#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\aDavision by zero error!\n");
else
printf("=%lf\n",number1/number2);
break;
case '%':
if((long)number2==0)
printf("\n\n\aDavision by zero error!\n");
else
printf("=%ld\n",(long)number1%(long)number2);
break;
default:
printf("\n\n\aDavision by zero error!\n");
break;
}
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论