2017-04-19 3 views
0

私は解決できないクラスワークを持っています。私は部分的に動作するコードを得ることができましたが、現在は役に立たないだけです。フリーズしている(実行していない)か、最初の行にいくつかのinfを与えます。ガウスジョーダンのCでの除外

#include <stdio.h> 
#include <math.h> 

int main() 
{ 

    double a[10][11]={ 
{3.55618, 5.87317, 7.84934, 5.6951, 3.84642, 9.15038, -1.68539, 5.03067, 7.63384, -1.75626, -1.92193}, 
{-4.82893, 8.38177, -0.301221, 5.10182, -4.1169,-6.09145, -3.95675, -2.33365, 1.3969, 6.54555, -2.35262}, 
{-7.64196, 5.66605, 3.20481, 1.55619, -1.19814, 9.79288, 5.35547, 5.86109, 4.95544, -9.35749, 2.27709}, 
{-2.95914, -9.16958, 7.3216, 2.39876, -8.1302, -7.55135, -2.37718, 7.29694, 5.9867, 8.5401, -2.67493}, 
{-8.42043, -0.369407, -5.4102, -8.00545, 9.22153, 3.96454, 5.38499, 0.438365, 0.419677, 4.17166, 1.84756}, 
{6.02952, 4.57728, 5.46424, 3.52915, -1.01135, -3.74686, 8.14264, -8.86961, -2.88114, 1.29821, 4.154126}, 
{0.519819, -6.16655, 1.13216, 2.75811, -1.05975, 4.20286, -3.45764, 0.763558, -0.281287, -9.76168, -.93387}, 
{5.15737, -9.67481, 9.29904, -3.93334, 9.12785, -4.25208, -6.1652, 2.5375, 0.139195, 2.00106, -1.28356}, 
{-4.30784, 1.40711, -6.97966, -9.29715, 5.17234, 2.42634, 1.88818, -2.05526, -3.7679, 3.3708, -3.46841}, 
{-4.65418, 7.18118, 6.51338, 3.13249, 0.188456, -16.85599, 7.21435, -2.93417, 1.06061, 1.10807, -2.61529}}; 
    int i, j, k, l; 
    double b[10][11]; 

    i=0; 
    while(i<10) 
    { 
      j=0; 
      l=i; 
      while(l<10) 
      { 
        j=0; 
        l++; 
        while(j<11) 
        { 

以下のコードは正常です。単独で使用される場合、それは0に等しい最初の列を設定し、部分的に機能するように以下で使用される1

      b[i][j]=a[i][j]/a[i][i]; 

このコードにすべての対角値を向けるだろうが、今では無用です。私は0をkとし、whileコードの中でk ++を使ってすべての値を取り除くように操作しようとしましたが、i ++で配置するとセグメンテーションコードが返されます。またはバスエラーがj = 0の前に配置され;,と私は0で私を置いている場合、それはちょうど今、私がどのように

      b[l][j]=a[l][j]-b[i][j]*a[l][0]; 
          j++; 
        } 
      } 
      i++; 
    } 

    j=0; 
    i=0; 
    while(i<10) 
    { 
      while(j<11) 
      { 
        printf("%lf\t", b[i][j]); 
        j++; 
      } 
    printf("\n"); 
    i++; 
    j=0; 
    } 

return 0; 
} 

をデフォルトにそれを復元していることは無駄であるプログラムを凍結しますCプログラムの中でこれらの問題をすべて解決するつもりですか?

+3

コードを複数のボックスに分割して、すべてのコードがどのように適合しているかを確認するのは非常に困難です。これを越えて、私はあなたに「デバッガの一歩を踏み出して、どこに行くのかを見てください。 「なぜそれは機能しないの?」という質問に対する標準的な対応 –

+0

精神的な健全性を維持するために、 'while()'ループを 'for()'ループで置き換えることを勧めます。これは読みやすさを向上させるだけでなく、エラーの可能性も減らします。 – wildplasser

答えて

-1

ないあなたのコードは次第ですが、私は、私はあなたがあなたの配列の末尾から読んでいると信じている、少なくとも1位見るものは100%を確認してください。

while(l<10) 
{ 
    j=0; 
    l++; 

を...

  b[l][j]=a[l][j]-b[i][j]*a[l][0]; 

最大サイズを確認した後でインクリメントしているので、おそらく配列の最大サイズを渡しているところに1回の反復があります。

あなたの割り当てを行うか、または何かをアサートするコード内のインデックスに、いくつかの印刷物を置いてチェックしてみると、あなたの苦境の原因を見つけることができます。

また、マジックナンバーの代わりにあなたのサイズの定数を使用してください。後で別のサイズの行列の計算をしようとすると、感謝します。

+1

あなたが落選した場合、理由や理由を説明してください。コードOPの領域で配列の大きさを過ぎて行くことができるケースがあります。どうした? –

関連する問題