当前位置: 首页 > news >正文

work03_1 实现一个简单的计算器,能够处理加法、减法、乘法和除法

编写一个程序实现一个简单的计算器,能够处理加法、减法、乘法和除法。

输入:用户输入两个数字(可以带小数)和一个操作符(+、-、*、/)。

输出:显示计算的表达式及结果。

注意以下几个要求:

  1. 代码可以直接写在main函数里,不需要提取函数。

  2. 输入的表达式应当符合格式要求,应当正常录入两个操作数和一个运算符,否则直接退出程序。

  3. 在进行除法操作时,需要保证除数不为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;
}

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/107538.html

相关文章:

  • 四、Bug篇+用例篇
  • Docker学习--容器操作相关命令--docker inspect 命令
  • C/C++指针核心难点全解析:从内存模型到实战避坑指南
  • AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
  • AI小白的第十天:影响模型泛化能力的因素以及对策
  • spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
  • 系统思考与时间管理
  • 在MFC中使用Qt(五):MFC和Qt的共存和交互
  • 经典算法 最长公共子序列问题
  • GPU与CUDA对应
  • 阿里云服务器对接高防的时候可能会出现的问题
  • 鸿蒙应用元服务开发-Account Kit 常见问题说明
  • BRC认证是什么?如何获得BRC认证?对企业发展的好处
  • 解决Oracle PL/SQL中“表或视图不存在“错误的完整指南
  • 数据分析与知识发现 论文阅读【信息抽取】
  • OSD显示
  • 动态规划——区间DP
  • RedisTemplate 的 6 个可配置序列化器属性对比
  • apk签名与对齐
  • android databinding使用教程
  • modelscope环境准备--装conda、内网穿透、配置HuggingFace
  • 在线sql 转 rust 模型(Diesel、SeaORM),支持多数据 mysql, pg等
  • Java 大视界 -- Java 大数据在智能教育自适应学习平台中的用户行为分析与个性化推荐(169)
  • 合并空值运算符??
  • 爬虫【Scrapy框架的概念与执行流程】
  • c++中%符号使用的注意事项/易错点
  • limma差异分析
  • Scala面向对象
  • 多层内网渗透测试虚拟仿真实验环境(Tomcat、ladon64、frp、Weblogic、权限维持、SSH Server Wrapper后门)
  • 鸿蒙开发_TS快速入门_TS中模块化操作_模块的导入导出---纯血鸿蒙HarmonyOS5.0工作笔记008