C语言多功能计算器

开发一个多功能简易计算器,基本信息包括:四则运算、常见单位转换。

1.四则运算:

(1)能识别用户输入的运算(加+、减-、乘*、除/)表达式并计算,如:用户输入189+219,按回车确定后可计算该加法运算的结果并打印输出,其它运算以此类推;

(2)能检测表达式中的错误或不符合运算法则的情况并提示。如,在除法运算中除数为0的情况,表达式错误的情况12376a+31p等;

2.单位转换:

(1)能实现长度单位换算:英寸、英尺、毫米、厘米、米;

(2)能实现质量单位换算:磅、盎司、克、千克、斤、吨;

(3)能实现面积单位换算:公顷、亩、平方米、平方英尺;

附代码:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int v4(char c)//判断字符是否为加减乘除,如果含有'+','-','*','/'则返回1,否则返回0
{
	if (c == '+' || c == '-' || c == '*' || c == '/')
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
void arithmetic()//四则运算
{
	system("cls");	//清屏 
	printf("输入表达式(例如1+1)(输入RETURN:返回)(输入EXIT:退出):\n");
	while (1)
	{
		printf("-------------------------------------\n");
		printf("输入表达式:");
		char str[48] = "";//初始化字符串,用于接收计算式
		int add = 0;//运算符次数累加初始值为0
		scanf_s("%s", str, (unsigned int)sizeof(str));//获取表达式
		if (strcmp(str, "RETURN") == 0)	//输入RETURN返回上一层
		{
			system("cls");	//清屏 
			return;
		}
		else if (strcmp(str, "EXIT") == 0)	//输入EXIT退出程序
		{
			exit(0);
		}
		else
		{
			int i = 0;
			size_t len;
			len = strlen(str);
			while (i < len)//计算运算符次数累(加减乘除符号出现次数)
			{
				if (v4(str[i]))
				{
					add++;
				}
				i++;
			}
			for (i = 0; i < len; i++)
			{
				if (add != 1)//运算符号不为1次时,提示错误,跳出计算,重新获取计算式
				{
					printf("输入错误,请重新输入\n");
					break;
				}
				if (isdigit(str[i]) || v4(str[i]) || str[i] == '.' && !isalpha(v4(str[i])))//输入满足数字、运算符且不为字母
				{
					if (v4(str[i]))//检测到运算符号时进行计算
					{
						char *num1 = NULL, *num2 = NULL;//两个数字初始化,设置空值
						const char plus[2] = "+";
						const char minus[2] = "-";
						const char multiply[2] = "*";
						const char divide[2] = "/";
						switch (str[i])
						{
						case '+'://当运算符号为加法
							num1 = strtok_s(str, plus, &num2);//通过运算符号'+'分离字符串,得到num1和num2两个数(字符串形式)
							printf("%f", atof(num1));//字符串num1转浮点型
							printf("+");
							printf("%f", atof(num2));//字符串num2转浮点型
							printf("=");
							printf("%.2f\n", atof(num1) + atof(num2));
							break;
						case '-'://当运算符号为减法
							num1 = strtok_s(str, minus, &num2);//通过运算符号'-'分离字符串,得到num1和num2两个数(字符串形式)
							printf("%f", atof(num1));
							printf("-");
							printf("%f", atof(num2));
							printf("=");
							printf("%.2f\n", atof(num1) - atof(num2));
							break;
						case '*'://当运算符号为乘法
							num1 = strtok_s(str, multiply, &num2);//通过运算符号'*'分离字符串,得到num1和num2两个数(字符串形式)
							printf("%f", atof(num1));
							printf("*");
							printf("%f", atof(num2));
							printf("=");
							printf("%.2f\n", atof(num1) * atof(num2));
							break;
						case '/'://当运算符号为除法
							num1 = strtok_s(str, divide, &num2);//通过运算符号'/'分离字符串,得到num1和num2两个数(字符串形式)
							if (strcmp(num2, "0") == 0)//被除数为0进行提示,并跳出计算
							{
								printf("被除数不能为0\n");
								break;
							}
							printf("%f", atof(num1));
							printf("/");
							printf("%f", atof(num2));
							printf("=");
							printf("%.2f\n", atof(num1) / atof(num2));
							break;
						default:
							printf("\n无效输入\n");
							break;
						}

					}
				}
				else
				{
					printf("输入错误,请重新输入\n");
					break;
				}
			}
		}
	}
}

void Length()//能实现长度单位换算:英寸、英尺、毫米、厘米、米;
{
	system("cls");	//清屏 
	printf("-------------单位转换器--------------\n");
	printf("1:英尺	2:英寸	3:毫米	4:厘米	5:米 9:返回 0:退出\n");
	printf("-------------------------------------\n");
	while (1)
	{
		int selection;	//存储用户选择 
		printf("请选择当前单位(输入对应数字):");
		//读取用户选择	
		scanf_s("%d", &selection);
		if (selection == 9)//选项为9返回上一层
		{
			system("cls");	//清屏 
			return;
		}
		else if (selection == 0)//选项为0退出程序
		{
			printf("程序结束!");
			exit(0);
		}
		else if (selection < 1 || selection >5)//选项不在范围内提示错误
		{
			printf("输入错误,请重新输入\n");
			selection = 9;
		}
		else//进行单位转换
		{
			printf("-------------------------------------\n");
			printf("请输入当前单位的值:");
			float all;		//存储用户输入的值
			//读取用户输入值 
			scanf_s("%f", &all);
			switch (selection)//根据选项进行单位转换
			{
			case 1://英尺转换其他单位
				printf("**************转换结果***************\n");
				printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n",
					all, all * 12, all*304.8, all*30.48, all*0.3048);
				printf("*************************************\n");
				break;
			case 2://英寸转换其他单位
				printf("**************转换结果***************\n");
				printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n",
					all / 12, all, all*25.4, all*2.54, all*0.0254);
				printf("*************************************\n");
				break;
			case 3://毫米转换其他单位
				printf("**************转换结果***************\n");
				printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n",
					all / 304.8, all / 25.4, all, all*0.1, all*0.001);
				printf("*************************************\n");
				break;
			case 4://厘米转换其他单位
				printf("**************转换结果***************\n");
				printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n",
					all / 30.48, all / 30.48 * 12, all * 10, all, all * 100);
				printf("*************************************\n");
				break;
			case 5://米转换其他单位
				printf("**************转换结果***************\n");
				printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n",
					all / 30.48, all * 12 / 30.48, all * 1000, all * 100, all);
				printf("*************************************\n");
				break;
			default:
				printf("输入错误,请重新输入\n");
				break;
			}

		}
	}
}
void quality()//能实现质量单位换算:磅、盎司、克、千克、斤、吨;
{
	system("cls");	//清屏 
	printf("-------------单位转换器--------------\n");
	printf("1:磅 2:盎司 3:克 4:千克 5:斤 6:吨 9:返回 0:退出\n");
	printf("-------------------------------------\n");
	while (1)
	{
		int selection;	//存储用户选择
		printf("请选择当前单位(输入对应数字):");
		//读取用户选择	
		scanf_s("%d", &selection);
		if (selection == 9)//选项为9返回上一层
		{
			system("cls");	//清屏 
			return;
		}
		else if (selection == 0)//选项为0退出程序
		{
			printf("程序结束!");
			exit(0);
		}
		else if (selection < 1 || selection >6)//选项不在范围内提示错误
		{
			printf("输入错误,请重新输入\n");
			selection = 9;
		}
		else//进行单位转换
		{
			printf("-------------------------------------\n");
			printf("请输入当前单位的值:");
			float all;		//存储用户输入的值
			//读取用户输入值 
			scanf_s("%f", &all);
			switch (selection)
			{
			case 1://磅转换其他单位
				printf("**************转换结果***************\n");
				printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n",
					all, all * 16, all * 1000 / 2.2046, all / 2.2046, all * 2 / 2.2046, all / 2204.6);
				printf("*************************************\n");
				break;
			case 2://盎司转换其他单位
				printf("**************转换结果***************\n");
				printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n",
					all / 16, all, all * 1000 / 35.2746, all / 35.2746, all * 2 / 35.2746, all / 2204.6 / 16);
				printf("*************************************\n");
				break;
			case 3://克转换其他单位
				printf("**************转换结果***************\n");
				printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n",
					all*2.2046 / 1000, all * 35.2746 / 1000, all, all / 1000, all * 2 / 1000, all / 1000000);
				printf("*************************************\n");
				break;
			case 4://千克转换其他单位
				printf("**************转换结果***************\n");
				printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n",
					all*2.2046, all * 35274.6, all * 1000, all, all * 2, all / 1000);
				printf("*************************************\n");
				break;
			case 5://斤转换其他单位
				printf("**************转换结果***************\n");
				printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n",
					all*2.2046 / 2, all * 35274.6 / 2, all * 500, all / 2, all, all / 2000);
				printf("*************************************\n");
				break;
			case 6://吨转换其他单位
				printf("**************转换结果***************\n");
				printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n",
					all*2204.6, all * 35274600, all * 1000 * 1000, all * 1000, all * 2000, all);
				printf("*************************************\n");
				break;
			default:
				printf("输入错误,请重新输入\n");
				break;
			}
		}
	}
}
void area()//能实现面积单位换算:公顷、亩、平方米、平方英尺;
{
	system("cls");	//清屏 
	printf("-------------单位转换器--------------\n");
	printf("1:公顷	2:亩 3:平方米	4:平方英尺 9:返回 0:退出\n");
	printf("-------------------------------------\n");
	while (1)
	{
		int selection;	//存储用户选择
		printf("请选择当前单位(输入对应数字):");
		//读取用户选择	
		scanf_s("%d", &selection);
		if (selection == 9)//选项为9返回上一层
		{
			system("cls");	//清屏 
			return;
		}
		else if (selection == 0)//选项为0退出程序
		{
			printf("程序结束!");
			exit(0);
		}
		else if (selection < 1 || selection >4)//选项不在范围内提示错误
		{
			printf("输入错误,请重新输入\n");
			selection = 9;
		}
		else//进行单位转换
		{
			printf("-------------------------------------\n");
			printf("请输入当前单位的值:");
			float all;		//存储用户输入的值
			//读取用户输入值 
			scanf_s("%f", &all);
			switch (selection)
			{
			case 1://公顷转换其他单位
				printf("**************转换结果***************\n");
				printf("%f公顷,%f亩,%f平方米,%f平方英尺\n",
					all, all * 15, all * 10000, all*107639.104167);
				printf("*************************************\n");
				break;
			case 2://亩转换其他单位
				printf("**************转换结果***************\n");
				printf("%f公顷,%f亩,%f平方米,%f平方英尺\n",
					all / 15, all, all * 10000 / 15, all*107639.104167 / 15);
				printf("*************************************\n");
				break;
			case 3://平方米转换其他单位
				printf("**************转换结果***************\n");
				printf("%f公顷,%f亩,%f平方米,%f平方英尺\n",
					all / 10000, all * 15 / 10000, all, all*10.7639104167);
				printf("*************************************\n");
				break;
			case 4://平方英尺转换其他单位
				printf("**************转换结果***************\n");
				printf("%f公顷,%f亩,%f平方米,%f平方英尺\n",
					all / 107639.104167, all * 15 / 107639.104167, all * 10000 / 107639.104167, all);
				printf("*************************************\n");
				break;
			default:
				printf("输入错误,请重新输入\n");
				break;
			}

		}
	}
}
void conversion()//单位转换
{
	char answer = 'q';
	while (1) {
		system("cls");	//清屏 
		printf("\n选择操作:\n"
			"长度单位换算,输入 L\n"
			"质量单位换算,输入 M\n"
			"面积单位换算,输入 S\n"
			"返回,输入R\n"
			"退出程序,输入 Q\n");
		scanf_s(" %c", &answer, (unsigned int)sizeof(answer));
		switch (toupper(answer))
		{
		case 'L':
			Length();//长度单位换算
			break;
		case 'M':
			quality();//质量单位换算
			break;
		case 'S':
			area();//面积单位换算
			break;
		case 'R':
			system("cls");	//清屏 
			return;
			break;
		case 'Q':
			printf("程序结束!");
			exit(0);
		default:
			printf("\n无效选择项\n");
			break;
		}
	}
}
int main()
{
	system("cls");	//清屏 
	char answer = 'q';
	while (1)
	{
		printf("\n选择操作:\n"
			"四则运算,输入 A\n"
			"单位转换,输入 B\n"
			"退出程序,输入 Q\n");
		scanf_s(" %c", &answer, (unsigned int)sizeof(answer));//获取进行操作的字符
		switch (toupper(answer))
		{
		case 'A':
			arithmetic();//四则运算
			break;
		case 'B':
			conversion();//单位转换
			break;
		case 'Q':
			printf("程序结束!");
			exit(0);//退出程序
		default:
			printf("\n无效选择项\n");
			break;
		}
	}
	return 0;
}


测试结果:
1.运行程序,出现选择操作界面;输入A进行四则运算,输入B进行单位换算,输入Q退出程序
在这里插入图片描述
2.此时输入A,进行四则运算测试
在这里插入图片描述
3.根据提示输入表达式,如1+1,输入return则会返回上一层,输入exit退出程序
在这里插入图片描述
4.输入一些加减乘除的计算式
在这里插入图片描述
5.输入return,返回到上一层界面
在这里插入图片描述
6.输入B,进行单位转换
在这里插入图片描述
7.此时有三个单位换算,输入L进行长度单位换算,输入M进行质量单位换算,输入S进行面积单位换算,输入R返回上一层,输入Q退出程序
在这里插入图片描述
8.输入L测试长度换算
在这里插入图片描述
9.根据提示依次输入单位数字,以及该单位的值
在这里插入图片描述
10.进行不同单位的测试
在这里插入图片描述
这个程序中四则运算只实现了正数的计算,当输入负数会提示错误,还有些小问题不够完善,仅供大家参考。

知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

  • 7
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值