#include<stdio.h> int main() { double x,y; int a,b=1; do { printf(" 计算器 \n"); printf(" 1.加法计算 \n"); printf(" 2.减法计算 \n"); printf(" 3.乘法计算 \n"); printf(" 4.除法计算 \n"); printf(" 5.退出 \n"); scanf("%d",&a); if(1<=a<=5) { switch(a) { case 1: printf("请输入x和y:"); scanf("%lf %lf",&x,&y); printf("x+y=%f\n",x+y); break; case 2: printf("请输入x和y:"); scanf("%lf %lf",&x,&y); printf("x-y=%f\n",x-y); break; case 3: printf("请输入x和y:"); scanf("%lf %lf",&x,&y); printf("x*y=%f\n",x*y); break; case 4: printf("请输入x和y:"); scanf("%lf %lf",&x,&y); printf("x/y=%f\n",x/y); break; case 5: b= 0; break; } else { printf("程序已退出"); } }while(b); printf("程序已退出"); return 0; }
时间: 2024-03-11 20:44:22 浏览: 45
这段代码是一个简单的计算器程序,用户可以选择加法、减法、乘法、除法或退出。用户输入数字代表操作,然后输入两个浮点数进行计算,最后输出结果。具体实现如下:
1. 定义两个双精度浮点数变量x、y,一个整型变量a,一个整型变量b并初始化为1。
2. 使用do-while循环,循环体内打印菜单,让用户选择操作并输入数字。
3. 使用if-else语句判断输入的数字是否在1-5之间,如果是则进入switch-case语句进行相应的计算,并打印结果。
4. 如果输入的数字不在1-5之间,则打印“程序已退出”。
5. 如果用户选择退出,则将b的值赋为0,跳出循环。
6. 程序结束,打印“程序已退出”。
需要注意的是,scanf函数中读取浮点数应该使用"%lf"格式化字符串。此外,if语句中的判断条件需要使用逻辑运算符&&连接两个判断条件,即if(1<=a && a<=5)。
相关问题
#include <stdio.h> #include <string.h> #include <stdlib.h> #define maxn 1000 char buf[maxn], str[maxn], signStack[maxn], ch[2]; int len, id, idSign, idAns, i, n; double ans[maxn]; void checkSign(char sign){ if(sign == '(') signStack[idSign++] =
'('; //如果是左括号,则将其入栈
else if (sign == ')') { //如果是右括号,则将栈顶元素弹出,直到遇到左括号
while (signStack[idSign - 1] != '(') {
idSign--;
switch (signStack[idSign]) {
case '+': ans[idAns - 2] += ans[idAns - 1]; break; //加法
case '-': ans[idAns - 2] -= ans[idAns - 1]; break; //减法
case '*': ans[idAns - 2] *= ans[idAns - 1]; break; //乘法
case '/': ans[idAns - 2] /= ans[idAns - 1]; break; //除法
}
idAns--;
}
idSign--; //将左括号弹出
}
else if (sign == '+' || sign == '-') { //如果是加减号
while (idSign > 0 && signStack[idSign - 1] != '(') { //如果栈顶元素不是左括号,则进行运算
idSign--;
switch (signStack[idSign]) {
case '+': ans[idAns - 2] += ans[idAns - 1]; break; //加法
case '-': ans[idAns - 2] -= ans[idAns - 1]; break; //减法
case '*': ans[idAns - 2] *= ans[idAns - 1]; break; //乘法
case '/': ans[idAns - 2] /= ans[idAns - 1]; break; //除法
}
idAns--;
}
signStack[idSign++] = sign; //将当前符号入栈
}
else if (sign == '*' || sign == '/') { //如果是乘除号
while (idSign > 0 && (signStack[idSign - 1] == '*' || signStack[idSign - 1] == '/')) { //如果栈顶元素是乘除号,则进行运算
idSign--;
switch (signStack[idSign]) {
case '*': ans[idAns - 2] *= ans[idAns - 1]; break; //乘法
case '/': ans[idAns - 2] /= ans[idAns - 1]; break; //除法
}
idAns--;
}
signStack[idSign++] = sign; //将当前符号入栈
}
}
int main() {
while (fgets(buf, maxn, stdin)) { //读入一行字符串
if (strcmp(buf, "0\n") == 0) break; //如果读入的字符串是 0,则退出循环
len = strlen(buf);
buf[len - 1] = '\0'; //将换行符替换为字符串结束符
id = idAns = idSign = 0; //初始化数组下标
n = sscanf(buf, "%s", str); //读入一个字符串,返回成功读入的参数个数
while (n == 1) { //如果读入成功
if (sscanf(str, "%lf", &ans[idAns]) == 1) { //如果是数字
idAns++; //将其入数字栈
}
else { //如果是符号
ch[0] = str[0]; ch[1] = '\0'; //将字符串转换为字符
checkSign(ch[0]); //进行运算
}
id += strlen(str) + 1; //移动到下一个字符串的位置
n = sscanf(buf + id, "%s", str); //读入下一个字符串
}
while (idSign > 0) { //将符号栈中的剩余元素进行运算
idSign--;
switch (signStack[idSign]) {
case '+': ans[idAns - 2] += ans[idAns - 1]; break; //加法
case '-': ans[idAns - 2] -= ans[idAns - 1]; break; //减法
case '*': ans[idAns - 2] *= ans[idAns - 1]; break; //乘法
case '/': ans[idAns - 2] /= ans[idAns - 1]; break; //除法
}
idAns--;
}
printf("%.2lf\n", ans[0]); //输出结果
}
return 0;
}
这是一个计算器程序的代码,能够计算带括号的四则运算表达式。程序采用了栈的数据结构,首先将数字入数字栈,遇到符号时进行运算。运算过程中,将符号入符号栈,如果遇到括号,则将栈顶元素弹出,直到遇到左括号。具体运算过程见 checkSign 函数。最后将符号栈中的剩余元素进行运算,输出结果。
#include<stdio.h>intmain(){doubledata1,data2,data;charop;scanf("%lf%c%lf",&data1,&op,&data2);switch(op){case'+':data=data1+data2;break;case'-':data=data1-data2;break;case'*':data=data1*data2;break;case'/':if(data2)data=data1/data2;else{printf("除数不为0\n");return0;}}printf("%g%c%g=%g\n",data1,op,data2,data);return0;}
这是一段 C 语言的代码,它实现了一个简单的计算器功能,可以进行加减乘除四则运算。下面是代码的详细解释:
```c
#include <stdio.h>
int main() {
double data1, data2, data;
char op;
scanf("%lf%c%lf", &data1, &op, &data2);
switch (op) {
case '+':
data = data1 + data2;
break;
case '-':
data = data1 - data2;
break;
case '*':
data = data1 * data2;
break;
case '/':
if (data2)
data = data1 / data2;
else {
printf("除数不为0\n");
return 0;
}
break;
}
printf("%g %c %g = %g\n", data1, op, data2, data);
return 0;
}
```
首先声明了三个变量 `data1`、`data2`、`data` 分别表示第一个数、第二个数和结果,以及一个字符变量 `op` 表示运算符。
使用 `scanf()` 函数从标准输入中读入三个参数,分别是 `data1`、`op` 和 `data2`。其中 `%lf` 表示读入一个 double 类型的数据,`%c` 表示读入一个字符。输入的格式为“数字 运算符 数字”,例如“2.3 + 4.5”。
接着使用 `switch` 语句根据运算符进行相应的运算,并将结果存储到 `data` 变量中。如果输入的是除法运算符 `/`,则需要判断除数是否为 0,如果为 0 则输出提示信息并结束程序。
最后使用 `printf()` 函数输出运算结果,格式为“数字 运算符 数字 = 结果”。
整个程序的运行流程就是:输入两个数和一个运算符 -> 根据运算符进行相应的运算 -> 输出运算结果。