C語言,四則運算簡易計算器。

問題描述:輸入一個不含括號的四則運算表達式,輸出計算結果。

方法:四則運算只有兩種優先級,在輸入兩步計算(三個操作數)之後一定能得到一個結果。如1-2*3,無論3後的操作符是什麼,2*3都可以先計算。則1-2*3=1-6,繼續讀取操作符,如1-6+2,繼續重複上面操作。

編譯環境:vc++6.0

#include <stdio.h>
#include <stdlib.h>

double get_oprand()                          //獲取操作數
{
	double value;
	scanf("%lf", &value);
	return value;
}

char get_operator()                          //獲取四則運算符
{
	char op;
	do
	{
		scanf("%c", &op);
	} while (op == ' ');
	return op;
}

int prior(char op1, char op2)              //判斷運算符優先級
{
	int flag;
	if (op1 == '*' || op1 == '/')
		if (op2 == '+' || op2 == '-')
			flag = 1;
		else flag = 0;
	else if (op2 == '*' || op2 == '/')
		flag = -1;
	else flag = 0;
	return flag;
}

double evaluates(double left, char op, double right)       //四則運算
{
	{
		switch (op)
		{
		case '+':return left + right; break;
		case '-':return left - right; break;
		case '*':return left * right; break;
		case '/':
			if (right != 0)
				return left / right;
			else
			{              //除數爲零
				printf("除數不合法,檢查是否爲零\n");
				exit(1);      //強制結束程序
			}
		default:return 0.0;
		}
	}
}


int main()
{
	double value1, value2, value3, result;
	char op1, op2;                         //四則運算符
	value1 = get_oprand();
	op1 = get_operator();
	value2 = get_oprand();
	op2 = get_operator();
	while (op2 != '\n')                    //沒有結束時
	{
		value3 = get_oprand();
		if (prior(op2, op1))
			value2 = evaluates(value2, op2, value3);
		else
		{
			value1 = evaluates(value1, op1, value2);
			op1 = op2;
			value2 = value3;
		}
		op2 = get_operator();
	}
	result = evaluates(value1, op1, value2);      //最後兩個數之和

	printf("結果爲%lf\n", result);
	return 0;
}

測試案例:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章