在方程中,只包含整数、小写字母及+、-、=这3个符号。方程中没有括号,也没有除号,方程中的小写字母表示未知数。保证输入的一元一次方程均为合法的,且有唯一的实数解。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
int numSum = 0, xSum = 0;
int isRight = 0;
void eval(char *numBuff, int isX)
{
int num = atoi(numBuff);
if (isX)
{
if (num == 0)
num = 1;
if (isRight > 0)
xSum -= num;
else
xSum += num;
}
else
{
if (isRight > 0)
numSum += num;
else
numSum -= num;
}
memset(numBuff, 0, 80); //清空数组
}
int main()
{
char exp[80] = { "6a-5+1=2-2a" };
char xVarName;
char numBuff[80] = { 0 };
for (unsigned int i = 0; i < strlen(exp); i++)
{
if ((exp[i] >= '0' && exp[i] <= '9') || (exp[i] == '+') || (exp[i] == '-'))
{
if ((exp[i] == '+') || (exp[i] == '-'))
eval(numBuff, 0); //缓存中的数输出
strncat(numBuff, &exp[i], 1);
}
else if (exp[i] == '=')
{
eval(numBuff, 0);
isRight = 1;
}
else
{
xVarName = exp[i];
eval(numBuff, 1);
}
}
eval(numBuff, 0);
printf("%s\r\n", exp);
printf("%c=%.3f\r\n", xVarName, (float)numSum / (float)xSum);
printf("%d : %d", numSum, xSum);
}