编写一个程序实现一个简单的计算器,能够处理加法、减法、乘法和除法。
输入:用户输入两个数字(可以带小数)和一个操作符(+、-、*、/)。
输出:显示计算的表达式及结果。
注意以下几个要求:
代码可以直接写在main函数里,不需要提取函数。
输入的表达式应当符合格式要求,应当正常录入两个操作数和一个运算符,否则直接退出程序。
在进行除法操作时,需要保证除数不为0,若除数为0,则直接退出程序。
提示:考虑switch结构,选择不同的运算符。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/*
计算器,能够处理加法、减法、乘法和除法。
输入:用户输入两个数字(可以带小数)和一个操作符(+、-、*、/)。
输出:显示计算的表达式及结果。注意以下几个要求:
1. 代码可以直接写在main函数里,不需要提取函数。
2. 输入的表达式应当符合格式要求,应当正常录入两个操作数和一个运算符,否则直接退出程序。
3. 在进行除法操作时,需要保证除数不为0,若除数为0,则直接退出程序。
*/
int main(void) {double num1, num2;char operator;double result;printf("输入计算器的表达式(例如:1+1):");int ret = scanf("%lf %c %lf", &num1, &operator,&num2);//ret == 3 是用于判断输入是否 数字 字符 数字的格式.if (ret != 3) {printf("输入的表达式格式不合法!\n");return 1;}switch (operator) {case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/':{if (num2 != 0) {result = num1 / num2;}else {printf("Error: 除数为0!\n");return 1;}break;}default:printf("Error: 无法识别的操作符!\n");return 1;//程序异常退出}printf("计算的结果是: %.2lf %c %.2lf = %.2lf\n", num1, operator,num2, result);return 0;
}
在上面简单计算器题目的基础上,实现以下功能:
1.在进行完一次运算后,询问用户是否继续运算。只要用户输入y/Y就可以继续运算,而不是只能计算一次。
2.当用户的输入有误时,不退出程序,而是要求用户继续输入表达式计算。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/*
上面简单计算器题目的基础上,实现以下功能:
1.在进行完一次运算后,询问用户是否继续运算。只要用户输入y/Y就可以继续运算,而不是只能计算一次。
2.当用户的输入有误时,不退出程序,而是要求用户继续输入表达式计算。可以考虑使用do...while循环结构,配合循环控制变量来解决,代码仍然都写在main函数中即可。
*/
int main(void) {double num1, num2;char operator;double result;char flag = 'y'; //flag: 控制循环是否继续的变量,初始化为'y'do{printf("请输入需要计算的表达式(例如:1 + 1): ");int ret = scanf("%lf %c %lf", &num1, &operator, &num2);if (ret != 3) {printf("Error: 输入的表达式格式不合法!请重新输入。\n\n");while (getchar() != '\n'); // 清空缓冲区至行尾,避免影响下次输入continue; // 继续下一次循环}switch (operator) {case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/': {if (num2 != 0) {result = num1 / num2;}else {printf("Error: 除数为0!请重新输入表达式。\n\n");continue;}break;}default:printf("Error: 无法识别的操作符!请重新输入表达式。\n\n");continue;}printf("计算的结果是:%.2lf %c %.2lf = %.2lf\n\n", num1, operator, num2, result);printf("是否继续计算?(输入'y/Y'继续,其他任意键结束): ");while (getchar() != '\n'); // 清空缓冲区至行尾,避免影响下次输入scanf(" %c", &flag);printf("\n");} while (flag == 'y' || flag == 'Y');return 0;
}