题目描述
给你一个简单的四则运算表达式,包含两个实数和一个运算符,请编程计算出结果
输入
表达式的格式为:s1 op s2, s1和s2是两个实数,op表示的是运算符(+,-,*,/),也可能是其他字符。注意运算符两侧各有一个空格。
输出
如果运算符合法,输出表达式的值;若运算符不合法或进行除法运算时除数是0,则输出"Wrong input!"。最后结果小数点后保留两位。
样例输入 Copy
1.0 + 1.0
样例输出 Copy
2.00
提示
除数是0,用|s2|<1e-10(即10的-10次方)判断
#include <stdio.h> // 包含标准输入输出头文件
#include <stdlib.h> // 包含标准库头文件
#include <math.h> // 包含数学库头文件,用于数学计算
int main() { // 主函数,程序入口
double s1, s2, answer; // 声明两个双精度浮点数用于存储输入的数字以及计算结果
char op; // 声明字符变量用于存储运算符
int result; // 声明整型变量,用于判断输入是否合法
// 从标准输入读取表达式,格式为 "数1 运算符 数2"
result = scanf("%lf %c %lf", &s1, &op, &s2); // 读取两个实数和一个运算符
// 检查输入是否有效,result 应该等于 3
if (result != 3)
{
printf("Wrong input!\n"); // 如果读取不成功,输出错误信息
return 0; // 结束程序
}
// 根据运算符进行不同的操作
switch (op)
{
case '+': // 如果运算符是加法
answer = s1 + s2; // 执行加法操作,并将结果赋值给 answer
break; // 退出 switch 语句
case '-': // 如果运算符是减法
answer = s1 - s2; // 执行减法操作,并将结果赋值给 answer
break; // 退出 switch 语句
case '*': // 如果运算符是乘法
answer = s1 * s2; // 执行乘法操作,并将结果赋值给 answer
break; // 退出 switch 语句
case '/': // 如果运算符是除法
// 除法时检查除数是否接近零
if (fabs(s2) < 1e-10) // 使用 fabs() 函数检查 s2 的绝对值是否小于 1e-10 ,1e-10是10 ^ (-10)即十的负十次方, 1e10是10 ^ 10即十的十次方
{
printf("Wrong input!\n"); // 如果是零,输出错误信息
return 0; // 结束程序
}
answer = s1 / s2; // 执行除法操作,并将结果赋值给 answer
break; // 退出 switch 语句
default: // 如果运算符不是上述任何一种
printf("Wrong input!\n"); // 输出错误信息
return 0; // 结束程序
}
// 输出结果,保留两位小数
printf("%.2lf\n", answer); // 使用 %.2lf 格式输出 answer,保留两位小数
return 0; // 正常结束程序
}