#include <stdio.h>int main() { char operator; double num1, num2, result; printf("请输入运算符 (+, -, *, /):"); scanf("%c", &operator); printf("请输入两个数:"); scanf("%lf %lf", &num1, &num2); switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': if (num2 == 0) { printf("除数不能为0!"); return 0; } else { result = num1 / num2; break; } default: printf("无效的运算符!"); return 0; } printf("%.2lf %c %.2lf = %.2lf", num1, operator, num2, result); return 0;}
时间: 2024-01-09 13:04:44 浏览: 94
这段代码是一个简单的计算器程序,用户可以输入运算符和两个数字,程序会根据用户输入的运算符进行相应的计算并输出结果。
其中,使用了scanf函数来获取用户输入的运算符和数字,使用了switch语句来根据不同的运算符进行不同的计算。如果用户输入的是除法运算符“/”,程序会判断除数是否为0,如果为0则输出错误信息并退出程序,否则进行除法计算。
最后,使用printf函数输出计算结果。
这段代码的问题可能是在除法运算时,如果用户输入的除数为0,程序会输出错误信息并退出,这样可能不太友好。可以考虑修改程序,让程序在发现除数为0时提示用户重新输入,避免程序退出。
相关问题
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> double deal_exp(char *exp) { } int main() { char expression[1024]; double result; printf("请输入一个算术表达式:(e退出)\n"); gets(expression); while(expression[0] != 'e') { result = deal_exp(expression); printf("%f\n", result); printf("请输入一个算术表达式:(e退出)\n"); gets(expression); } return 0; } 编写double deal_exp(char *exp)函数实现算术表达式的求值
这里提供一种基于栈的算法来实现算术表达式的求值。
具体实现步骤如下:
1. 定义一个栈来存储操作数和运算符,以及一个指针用来指向栈顶。
2. 遍历表达式中的每个字符,如果是数字则将其转换成实数并入栈;如果是运算符则将其与栈顶的运算符进行比较,如果优先级更高则入栈,否则弹出栈顶的运算符和两个操作数进行计算,并将结果入栈。
3. 最终栈中只剩下一个元素,即为表达式的计算结果。
下面是代码实现:
```c
typedef struct {
double num; // 操作数
char op; // 运算符
} Element;
Element stack[1024]; // 栈
int top = -1; // 栈顶指针
void push(Element e) {
stack[++top] = e;
}
Element pop() {
return stack[top--];
}
Element top_element() {
return stack[top];
}
int is_empty() {
return top == -1;
}
int is_operator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
int priority(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else {
return 0;
}
}
double calculate(double a, double b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0.0;
}
}
double deal_exp(char *exp) {
top = -1;
int i = 0;
while (exp[i] != '\0') {
if (exp[i] == ' ') {
i++;
continue;
}
if (isdigit(exp[i])) {
double num = 0.0;
while (isdigit(exp[i])) {
num = num * 10 + (exp[i] - '0');
i++;
}
if (exp[i] == '.') {
i++;
double frac = 0.1;
while (isdigit(exp[i])) {
num += frac * (exp[i] - '0');
frac /= 10;
i++;
}
}
Element e = {num, '\0'};
push(e);
} else if (is_operator(exp[i])) {
while (!is_empty() && priority(top_element().op) >= priority(exp[i])) {
Element e2 = pop();
Element e1 = pop();
double res = calculate(e1.num, e2.num, e2.op);
Element e = {res, '\0'};
push(e);
}
Element e = {0.0, exp[i]};
push(e);
i++;
} else {
printf("表达式中含有非法字符!\n");
return 0.0;
}
}
while (!is_empty()) {
Element e2 = pop();
if (e2.op != '\0') {
Element e1 = pop();
double res = calculate(e1.num, e2.num, e2.op);
Element e = {res, '\0'};
push(e);
} else {
return e2.num;
}
}
return 0.0;
}
```
注意,这里实现的算法只支持数字、四则运算和小数点,如果表达式中含有其他字符则会提示非法字符。同时,由于浮点数运算存在误差,可能会出现计算结果不精确的情况。
#include <stdio.h> int main() { char operator; double num1, num2, result; printf("Enter an operator (+, -, *, /): "); scanf("%c", &operator); printf("Enter the first number: "); scanf("%lf", &num1); printf("Enter the second number: "); scanf("%lf", &num2); switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; default: printf("Invalid operator!"); return 1; } printf("%.2lf %c %.2lf = %.2lf", num1, operator, num2, result); return 0; }在加上一个程序使输入特殊符号会显示运算错误
这段代码中,当输入的运算符不是"+", "-", "*", "/"时,会输出"Invalid operator!"。如果你想在输入特殊符号时显示错误,可以将"Invalid operator!"修改为你想要的错误提示信息。例如,你可以改为"Unsupported operator!"。修改后的代码如下所示:
```
#include <stdio.h>
int main() {
char operator;
double num1, num2, result;
printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operator);
printf("Enter the first number: ");
scanf("%lf", &num1);
printf("Enter the second number: ");
scanf("%lf", &num2);
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
default:
printf("Unsupported operator!");
return 1;
}
printf("%.2lf %c %.2lf = %.2lf", num1, operator, num2, result);
return 0;
}
```
这样修改后,如果输入特殊符号,就会输出"Unsupported operator!"的错误提示。
阅读全文