键盘输入形如“A@B=C”的等式,其中A、B、C是实数,@表示可能输入的+、-、*、/、%五种运算符之一,请判断该等式是否成立,若成立输出“yes”,若不成立输出“no”。用C语言实现
时间: 2024-12-20 15:30:06 浏览: 8
要解决这个问题,我们可以设计一个函数,接收用户输入的字符串,然后逐步解析并计算。以下是一个简单的C语言实现示例,采用递归的方式来处理表达式的计算:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
double apply_operator(double num1, double num2, char op) {
switch (op) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/':
if (num2 != 0) return num1 / num2;
else return INFINITY; // 避免除以零错误
case '%':
if (num2 != 0) return (double)(num1 % num2);
else return INFINITY;
}
}
double calculate(const char* token, const char* end) {
double num1 = atof(token);
while (isdigit(*end)) {
token = end;
end++;
}
char op = *end++;
if (op == '=' && end[0] == '\0') {
return apply_operator(num1, atof(end), op);
} else {
double num2 = atof(end);
return apply_operator(num1, calculate(end, end + strlen(end)), op);
}
}
int main() {
char input[100];
scanf("%s", input);
char* end = input;
double result = calculate(input, end);
if (result == INFINITY)
printf("Invalid expression: Division by zero detected.\n");
else if (end[0] == ' ')
printf("yes\n");
else
printf("no\n");
return 0;
}
```
这个程序会尝试将整个输入字符串当作一个表达式,并通过`calculate`函数递归地处理每个部分。注意,这里假设了输入格式总是正确的,即等号两侧都有有效的数字。在实际应用中,你需要添加更多的错误检查和边界条件。
阅读全文