这个计算器自己前前后后大概写了有将近两周的时间,期间也有做过优化,虽然还是有很多地方不是很理想,但总体来说还算是比较满意了,而且这个程序的除法的非整除数可以同时输出分式结果和小数结果,小学的时候整这种约分之类的就感觉很麻烦也算是圆了自己小时候的梦吧,素数计算器网上有大佬写的比我更好,我就不把程序发出来丢人了。
用VC2022编写的,用了
#define _CRT_SECURE_NO_WARNINGS
解除了scanf的安全限制,如果运行不了的话记得加上这个预编译
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
main() {
double a, b;
char c;
double d = 1, e = 0;
int a1, b1, x1; //除法计算使用
printf("四则运算计算器 v1.2\n");
out: //入口位置
printf("请输入要计算的式子\n");
scanf("%lf %c %lf",&a,&c,&b); //读入数据
if (c != '+' && c != '-' && c != '*' && c != '/') //判断运算符是否合法
{
printf("该输入不合法,请重新输入\n");
goto out; //返回入口
}
double x, y; //除法计算需要使用
switch (c) //运算过程
{
case '+': //加法
e = a + b;
break;
case '-': //减法
e = a - b;
break;
case'*': //乘法
e = a * b;
break;
case'/': //除法
e = a / b;
while (a < 1 || b < 1) //化整,防止强制转换成int时丢数据
{
a *= 10;
b *= 10;
}
x = a, y = b;
while (d != 0) //最大公因数判断
{
d = (int)x % (int)y;
x = y;
y = d;
}
x1 = x; //x为最大公因数
a1 = a / x; //a1,b1为约分后的分子分母
b1 = b / x;
break;
}
if (c == '/') //输出计算结果
{ //除法计算因为涉及到了约分所以单独把除法拎出来了
if (a1 % b1 != 0) //不可以整除
{
printf("%g%c%g=", a, c, b);
printf("%g/%g或%g", a / x1, b / x1, a / b);
}
else //可以整除
{
printf("%g%c%g=", a, c, b);
printf("%g", e);
}
}
else //非除法运算
{
printf("%g%c%g=", a, c, b);
printf("%g", e);
}
return 0;
}
//该程序除法因使用了强制转换成int类型后再取余运算导致小数之间的除法无法正常计算
//但由于水平不足暂时搁置,等待未来优化。(2023年11月21日)
//提示用户输入提示符提示因程序读回车会出问题所以目前实现不了,但是外界硬件,或单独设置按钮输入应该是可以实现的(2023年11月30日)
//更新了除法模块,解决了小数除法问题(2023年11月30日)
//有可能可以通过getchar()解决(2023年11月30日)