0

昨日からこの問題に頭を悩ませていて、誰かが私を正しい方向に向けてくれることを望んでいました. 私は C が初めてで、ユーザーが一連の線形方程式を入力するプログラムを作成する必要があります。この方程式は Cramer の規則で解決する必要があります。数学は問題ではありませんが、char と int で構成される方程式全体から係数を取得する方法がわかりません。

ユーザー入力は、次のような一連の線形方程式のようになります。

-3x-3y-1z=6

2x+3y+4z=9

3x+2y+4z=10

係数のみを入力できれば簡単ですが、残念ながら方程式全体を入力する必要があります。方程式にスペースがなく、変数の順序が同じで、方程式が有効であると想定できます。

方程式全体を配列に格納し、各変数 (x、y、z) を検索して、変数の前に int を見つけることを考えていましたが、これらの見つかった変数を整数に変換する方法を決定できません。

どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

2

x/y/z/= を strtok で分割し、atoi を使用して char* を int に変換できます。

詳細については、man strtok と man atoi を参照してください (stdlib の関数)。

于 2014-03-14T23:16:50.173 に答える
1

あなたのアイデアはうまくいきます。私はかつて学校で非常によく似たプロジェクトでそれを行いました.それは悪夢でしたが、(ちょっと)うまくいきました. 2 桁未満の係数に制限したい場合を除き、複数の数値を読み取るには何らかのロジックが必要です。私の記憶が正しければ、式で変数が見つかるまで文字を読み始め、その後、解決のために見つけた値を変換してその変数に割り当てました。

文字を整数に変換するatoi()には、文字列を受け取り、対応する整数を返す関数を使用できます。


余分な時間を費やす気がある場合、および *nix で作業している場合は、正規表現の領域をregex.h. コードを最小限に抑えることができますが、これまで正規表現を扱ったことがない場合は簡単ではありません。

于 2014-03-15T00:13:20.240 に答える
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);

ヴァルター

于 2014-03-15T00:55:46.097 に答える