

有很多需要考虑的点
比如说
如果未知数前面没有数字,即默认1的处理
当字符是’+‘和’='时,它会不会跳过,并进行i++处理
还有未知数的选取时,未知数被复制到另一个字符数组里,会被复制几次
还有解方程的基本步骤,左右移项的时候,数值要取反
#include<stdio.h>
#include<ctype.h>
int main()
{
char buf[100];
char wei[10];
int weizhi = 0;
int zhi = 0;
int flag = 1;
int one = 1;
scanf("%s", buf);
int i = 0;
int j = 0;
while (buf[i] != '\0')
{
if (buf[i] == '-') //当是负数
{
i++;
int num = 0; //这是看这个数的数值是多少
while (isdigit(buf[i])) //无论是正是负,默认处理时为正,下面转换
{
num = buf[i] - '0' + num * 10;
i++;
}
num = (-num)*one; //负数的转换,one是为了等号左右两端的处理
if (isalpha(buf[i])) //处理未知数的
{
if (num == 0)
weizhi += 1; //这是为了当未知数前面没有数时的默认1
else
weizhi += num;
while (isalpha(buf[i]))
{
if (flag == 1) //为了使未知数只取一次
{
wei[j] = buf[i];
j++;
}
i++;
}
flag = 0;
wei[j] = '\0';
}
else
zhi += num; //当不是未知数前面的值,即普通的数的时候
}
else //是正数的时候
{
int num = 0;
while (isdigit(buf[i]))
{
num = buf[i] - '0' + num * 10;
i++;
}
num = num * one;
if (isalpha(buf[i]))
{
if (num == 0)
weizhi += 1;
else
weizhi += num;
while (isalpha(buf[i]))
{
if (flag == 1)
{
wei[j] = buf[i];
j++;
}
i++;
}
flag = 0;
wei[j] = '\0';
}
else
zhi += num;
}
if (buf[i] == '+') //遇到加号,跳过
i++;
if (buf[i] == '=') //标志开始对等号右边的数开始处理,即需要取反了
{
i++;
one = -1;
}
}
//我当前的处理都是,位于等式左边
//因此,最后这个-1,就是把其中一个移项到右边的意思
printf("%s=%.3lf", wei, -1*zhi * 1.0 / weizhi); //-1是为了移项
return 0;
}
996

被折叠的 条评论
为什么被折叠?



