常见的课程设计题目——用C语言实现简单计算器功能 功能: 输入一个整数算术表达式字符串,分解出数值及运算符,并计算输出结果。 要求: 利用菜单可以循环实现求出加法、减法、乘法、除法

欢迎关注我的公众号【软件大爆炸】
常见的课程设计题目——用C语言实现简单计算器功能
题目:算术表达式求值
功能: 输入一个整数算术表达式字符串,分解出数值及运算符,并计算输出结果。
要求: 利用菜单可以循环实现求出加法、减法、乘法、除法算术表达式。
进一步要求*: (1) 能够实现连续运算; 比如:123+233+555+666=

此程序实现的功能有

  • 连续的加法
  • 连续的减法
  • 连续的乘法
  • 连续的除法

下面是实现的这些功能的代码

#include <stdio.h>  
   
/*对将要使用的实现的四个功能进行声明*/
 int ADD(char num);     //实现连续加法
 int MIN(char num);      //实现连续减法
 int MUL(char num);     //实现连续乘法
 int DIV(char num);       //实现连续除法
 
int main()
{
	int enter_to, num;			//菜单提示 (+,-,*,/以及混合运算)
	printf("           simplified  calculator       \n");
	printf("========================================\n");
	printf("=  ADD(+)                     press 1  =\n");
	printf("=  MIN(-)                     press 2  =\n");
	printf("=  MUL(*)                     press 3  =\n");
	printf("=  DIV(/)                     press 4  =\n");
	printf("=              q to quit               =\n");		//按 q 键退出系统(实际上任意非数字键即可退出)
	printf("========================================\n");
	printf("Please choose the function!    ");		//选择需要进行的功能
	while((scanf("%d",&enter_to))==1)
	{
		getchar();      //用来消化回车键,去掉会是num的值初始化为0,影响程序运行 
		switch(enter_to)		//采用模块化思想
		{
			case 1:ADD(num);
					break;
			case 2:MIN(num);
					break;
			case 3:MUL(num);
					break;
			case 4:DIV(num);
					break;
			default:
				printf("No such function!\n");
		}
		printf("Please choose the function!(q to quit)    ");		//使菜单循环出现
	}
	return 0;
 } 
 
 //第一部分: 加法运算
int ADD(char num)
{
	int sum=0,data=0;
	printf("Just for it!(= to end)\n");
	//这句话的目的是使用户知道成功的启动了该功能,同时告诉用户输入的结束标志是输入一个 =
	while((num=getchar())!='=')   //知道输入 =  时再结束
	{
		if(num>='0' && num<='9')    
		//将字符类型转化为整型 ,因为一开始输入的是字符型
		//注意是字符类型的 ‘0’ 到 ‘9’ 之间,而不是数字的0 到 9
			data=data*10+num-'0';    //根据 ASCII  的数学关系进行转换
		else
			{
				sum+=data;  //对非一位的字符类型转换为整型的处理
				data=0;
			}
	}
	sum+=data;		
	printf("%d\n",sum);  //打印结果
	return 0;
} 


 //第二部分: 减法运算
 /*第二部分与第一部分思路相近,仍需要将字符转换维整形等
 但不一样的地方是,对于第一个数字,不能采用减法处理,
 应该对第一个数字采用加法,对后面的数字进行减法运算*/
int MIN(char num)
{
	printf("\nJust for it!(= to end)\n");		//同第一部分提示,提示用户成功打开了该程序
	int sum=0,data=0,i=0,j=0;    
	/*  sum存放算式的结果
	     data存放字符转化的数字
	     i , j 用于循环计数与判断是否为第一个数
	*/
	while((num=getchar())!='=')
	{
		if(num>='0' && num<='9')
			{
				data=data*10+num-'0';
				i+=1;
			}
		else if(i && j==0)    //第一个数要进行加法运算 (注意判断条件)
			{
				j++;		//让 j 的值增加
				sum+=data;
				data=0;
			}
		else if(j!=0)	//当计算过第一个数之后,j 的值就不再为 0 ,此后进入该循环,实现从第二个数之后的连续减法
		{
			sum-=data;//从第二个数开始进行减法运算 
			data=0;
		}
	}
	sum-=data;
	printf("%d\n",sum);
	return 0;	
}

 //第三部分: 乘法运算
 /*连续乘法与连续加法跟接近,不同之处在于此时的 product(乘积) 应该 初始化为 1 , 而不是0*/
int MUL(char num)
{
	printf("\nJust for it!(= to end)\n");
	int product=1; int data=0;
	
	while((num=getchar())!='=')
	{
		if(num>='0' && num<='9')
			data=data*10+num-'0';
		else 
			{
				product*=data;
				data=0;
			}				
	}
	product*=data;
	printf("%d\n",product);
	return 0;
}
 //第四部分: 除法运算
 /*除法是最复杂的情况,
    连续除法与连续减法有相近之处,都需要对第一个数进行逆向运算处理
    即第一个数要采用乘法运算,对第二个之后的数采用除法
    另外,连续除法还需要考虑 被除数作为 0 时的特殊处理
    以及(-5)/1=-5, 5/(-1)=5  的处理(相信跟多人会忽略这一点)*/
int DIV(char num)
{
	printf("\nJust for it!(= to end)\n");
	int i=0,j=0,data=0;
	float consult=1.00;
	while((num=getchar())!='=')
	{
		if(num>='0' && num<='9')
			{
				data=data*10+num-'0';
				i+=1;
			}
		else if(i && j==0)     //第一个数进行乘法运算 
			{
				j++;
				consult=consult*1.0*data;
				data=0;
			}
		else if(j!=0)      //从第二个开始进行除法运算 
		{
			consult=consult*1.0/data;
			data=0;
		}
	}
	consult=consult*1.0/data;
	printf("%.2f\n",consult);
	return 0;
}

更近一步来说,还可以让计算器实现一下功能

  • 能够实现混合运算; 比如:120-23*5-20/4=
  • 能够实现带括号的混合运算运算。 比如:12*(234-5)+(23+7)=
  • 能够实现实数的各类运算。 比如:12.23*(12-3.7)+12.56=
  • 能够实现多层括号嵌套运算 …(….(…)….(…(…))…)…

甚至可以让计算器程序实现 sin( ), arcsin( )这些功能,设计的思想就是把每一个功能编写成一个一个的小函数,便于之后功能的添加与修改
这些功能之后我会慢慢的补充上去,欢迎大家积极留言补充

  • 16
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值