⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evaluate.cpp

📁 数据结构 输入表达式
💻 CPP
字号:
/*______________________________________________________________________________________________________________
________________________________________________________________________________________________________________

算术表达式求值
[问题描述]
   一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,
运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符"#",如:#(7+15)*(23-28/4)#。
引入表达式起始、结束符是为了方便。编程利用"算符优先法"求算术表达式的值。

[基本要求]
(1) 从键盘读入一个合法的算术表达式,输出正确的结果。
(2) 显示输入序列和栈的变化过程。
(3) 考虑算法的健壮性,当表达式错误时,要给出错误原因的提示。
________________________________________________________________________________________________________________
________________________________________________________________________________________________________________*/

#include "stdio.h"
#include "string.h"
#include "Evaluate.h"

void main(){
	char again;
	char string[30];
	do{	
		printf("请输入算术表达式(以'#'起始和结束):\n");	
		scanf("%s",string);
		int length;
		length=strlen(string);

/**************************************************************************************************************
	                             	判断表达式的几种错误
***************************************************************************************************************/
		
/**************************未以'#'开始和结束********************************************/

		if(string[0]!='#'||string[length-1]!='#')
		{
			printf("表达式出错! 表达式应以'#'起始和结束。请重新输入表达式。\n\n");
			again='y';
			continue;
		}

/********************************表达式出现无意义符号************************************/

		char str[]={'+','-','*','/','(',')','0','1','2','3','4','5','6','7','8','9'};
		int j=1;
		int k;
		while(j<length-1){
			k=0;
			while(string[j]!=str[k]) {k++; if(k==16)break;}
			if(k!=16) j++;
			else break;
		}

		if(j!=length-1)
		{
			printf("表达式出错! 出现无意义符号。请重新输入表达式。\n\n");
		    again='y';
		    continue;
		}

/**************************除数为零*****************************************************/

		for(j=1;j<length-1;j++){
			if(string[j]=='/'&&string[j+1]=='0')
			{
				printf("表达式出错! 除数不能为零。请重新输入表达式。\n\n");
				break;
			}
		}
		if(j!=length-1) {again='y';continue;}

/**********************************括号不匹配*******************************************/

		int n1,n2;
		n1=n2=-1;
		for(j=1;j<length-1;j++){
			if(string[j]=='(') n1=j;
			else if(string[j]==')') n2=j;
		}

		if(n1==-1&&n2!=-1 || n2==-1&&n1!=-1 || n1!=-1&&n2!=-1&&n1>n2)
		{
		    printf("表达式出错! 括号不匹配。请重新输入表达式。\n\n");
		    again='y';
		    continue;
		}
	
/**************************************************************************************************************
	                             	计算算术表达式
***************************************************************************************************************/

		int result;
		result=EvaluteExpression(string);
		printf("运算结果: ");
		printf("%d\n\n",result);

		printf("请问还要继续计算吗?\n");
		getchar();
		scanf("%c",&again);
		printf("\n");
	}while(toupper(again)=='Y');
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -