请你用C语言写出键盘输入形如“A@B=C”的等式,其中A、B、C是实数,@表示可能输入的+、-、*、/、%五种运算符之一,请判断该等式是否成立,若成立输出“yes”,若不成立输出“no”。
时间: 2024-12-14 18:26:18 浏览: 8
在C语言中,你可以通过字符串处理函数和数学库来实现这个功能。首先,你需要读取用户输入的等式字符串,然后解析它并计算结果。这里是一个简单的示例,不过请注意这只是一个基础版的实现,实际应用中可能需要更复杂的错误检查和表达式解析:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double calculate(double a, char op, double b) {
switch (op) {
case '+':
return a + b;
case '- b;
case '*':
return a * b;
case '/':
if (b != 0)
return a / b;
else
return INFINITY; // 或者抛出错误
case '%':
if (b != 0)
return (int)a % (int)b;
else
return a; // 因为除法为0的情况,余数就是a本身
default:
printf("Invalid operator!\n");
exit(1);
}
}
int main() {
char equation[50];
fgets(equation, sizeof(equation), stdin); // 读取一整行
// 去掉末尾的换行符
equation[strlen(equation)-1] = '\0';
char* eq = strtok(equation, "="); // 分割等式为左右两边
if (!eq || !strtok(NULL, "@=")) { // 如果无法分割,说明无效的等式
printf("Invalid equation.\n");
return 1;
}
double left = atof(eq); // 转换左半部分为浮点数
char op = *strtok(NULL, "+-*/%");
double right = atof(strtok(NULL, "=")); // 同理转换右半部分
double result = calculate(left, op, right);
if (fabs(result - atof(eq)) < 1e-9) { // 比较结果和预期是否接近(允许一定误差)
printf("yes\n");
} else {
printf("no\n");
}
return 0;
}
```
阅读全文