C 解一元一次方程

在方程中,只包含整数、小写字母及+、-、=这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);
} 

猜你喜欢

转载自blog.csdn.net/qq_16829085/article/details/83215835
今日推荐