一个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;
}
