一个C语言的问题,求解
给一个以x为变量并且没有括号的一元一次方程,请你们计算出变量x的值。例如: 3x-5-10x+301=80x+2
每一个方程的一般形式是这样的:
'='两边分别为以x为变量的表达式
每个表达式都是由'+'或'-'号的项组成
表达式中不会出现一元的'+'或'-'
每一个项,或都是一个单独的整数,或都是由一个整数和一个小写的字符x或由一个小写的字符x组成,这里,一个小写的字符x表示为1x
/********************************* 2011-06-05 (year-month-day) xxc/dxc/cosdos *********************************/ #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define MAX 81 int readExpression(char *exp, int *pd, int *px) { int i, val, x; int lv = 1; // 等号左边 for (i=0; exp[i] != '\0'; ++i) { if (exp[i] == '=') { lv = 0; continue; } x=val=0; if (1 == sscanf(exp+i, "%d", &val) ) { if (!lv) val = -(val); while (isdigit(exp[i+1])) ++i; }else if (exp[i] == '+') { val = (lv ? 1 : -1); }else if (exp[i] == '-') { val = (lv ? -1 : 1); }else if (exp[i] == 'x') { val = (lv ? 1 : -1); x = 1; } if (exp[i+1] == 'x') { x = 1; ++i; } if (x) { *px=val; ++px; }else { *pd=val; ++pd; } } return 0; } int array_sum(int *p, int n) { int i, sum=0; for (i=0; i<n; ++i) sum += p[i]; return sum; } int main(void) { int i; char exp[1024] ={0}; int d[MAX] ={0}; int x[MAX] ={0}; gets(exp); readExpression(exp, d, x); printf("%f\n", (double)(-array_sum(d, MAX)) / (double)array_sum(x, MAX) ); system("pause"); return 0; }