将方程式作为c中的用户输入

时间:2014-03-14 23:10:09

标签: c arrays input equations

自从昨天以来,我一直在为这个问题绞尽脑汁,我希望有人能指出我正确的方向。 我是C的新手,我们必须创建一个程序,用户输入一系列必须用Cramer规则解决的线性方程式。 数学不是问题,但是我不确定如何从由chars和int组成的整个方程中得到系数。

用户输入应该看起来像一系列线性方程式,例如:

-3x-3Y-1Z = 6

2×+ 3Y + 4Z = 9

3×+ 2Y + 4Z = 10

如果我们只允许输入系数,这将很简单,但遗憾的是必须输入整个方程。你可以假设方程中没有空格,变量的顺序是相同的,方程是有效的。

我在考虑将整个方程存储在数组中并搜索每个变量(x,y,z),然后在变量之前找到int,但我无法确定将这些找到的变量转换为整数的方法。

非常感谢任何帮助。提前谢谢。

4 个答案:

答案 0 :(得分:2)

您可以使用strtok拆分x / y / z / =然后使用atoi将char *转换为int。

阅读man strtok和man atoi以获取更多信息(来自stdlib的功能)。

答案 1 :(得分:1)

你的想法会奏效。我曾经在学校的一个非常类似的项目中做到这一点,这是一场噩梦,但它(有点)工作。除非您想将自己限制在低于两位数的系数,否则您需要一些逻辑来读取多个数字。如果我没记错的话,我开始阅读这些字符,直到我在表达式中找到一个变量,然后我转换并将我找到的值分配给该变量进行解析。

要将字符转换为整数,可以使用atoi()函数,该函数接收一串字符并返回相应的整数。


如果你愿意投入额外的时间,如果你在* nix下工作,你可能想要用regex.h挖掘正则表达式的领域。你可以最小化你的代码,但如果你之前没有使用过正则表达式,那就太容易了。

答案 2 :(得分:0)

//ax+bx+cz=d, -999 <= a,b,c,d <= 999
int a, b, c, d, i ,j;
char A[5], B[5], C[5], D[5], str[22];
char *pntr;

printf("Enter equation: ");
fgets(str, 21, stdin);

pntr = A;
i = j = 0;
while(1){
    if(str[i] == 'x'){pntr[j] = '\0'; pntr = B; j = 0; i++; continue;}
    else if(str[i] == 'y'){pntr[j] = '\0'; pntr = C; j = 0; i++; continue;}
    else if(str[i] == 'z'){pntr[j] = '\0'; pntr = D; j = 0; i += 2; continue;}
    else if(str[i] == '\n' || str[i] == '\0'){pntr[j] = '\0'; break;}

    pntr[j] = str[i];

    i++;
    j++;
}

a = atoi(A);
b = atoi(B);
c = atoi(C);
d = atoi(D);

printf("%d %d %d %d \n", a, b, c, d);

瓦尔特

答案 3 :(得分:-1)

#include<stdio.h>
int main()
{
    int n,i;
    int a[11];
    char *s;
    printf("\nEnter no of variables: ");
    scanf("%d",&n);
    printf("Enter the equation: ");
    for(i=0;i<n;i++)
            scanf("%d%*c",&a[i]);
    scanf("%*c%d",&a[i]);
    for(i=0;i<=n;i++)
        printf("%d ",a[i]);
    return 0;
}