首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的Gauss消除

C中的Gauss消除
EN

Stack Overflow用户
提问于 2017-04-19 23:31:13
回答 1查看 538关注 0票数 0

所以,我有一些我无法解决的课堂作业。我可以让代码部分地工作,但现在它是无用的。它要么冻结(不完成运行),要么它将给我几个inf在第一行。

代码语言:javascript
复制
#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)
                    {

下面的代码运行良好。当单独使用时,它将将所有对角线值转换为1。

代码语言:javascript
复制
                            b[i][j]=a[i][j]/a[i][i]; 

下面使用的这段代码可以部分工作,将第一列设置为0,但现在它是无用的。我试图操纵它去除所有的值,方法是让0是k,在while代码中使用k++,但是如果我把它放在i++中,它会返回分段代码;或者总线错误被放置在j=0前面;如果我将i放在0中,它就会冻结程序。现在我把它恢复到默认状态是没有用的。

代码语言:javascript
复制
                            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程序中解决所有这些问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-19 23:38:51

不能100%确定您的代码是干什么的,但是我看到至少有一个地方我认为您正在读取数组的末尾:

代码语言:javascript
复制
while(l<10)
{
    j=0;
    l++;

..。

代码语言:javascript
复制
           b[l][j]=a[l][j]-b[i][j]*a[l][0];

因为在检查最大值之后,您正在递增,所以您有一个迭代,其中您可能正在读取传递给数组的最大大小。

要检查,请在代码中的索引上打印一些打印信息,在这些代码中进行赋值或断言,或者其他什么的,我认为您会找到问题的根源。

此外,请使用常量为您的大小,而不是神奇的数字各地。稍后,当你试图计算一个不同大小的矩阵时,你会感谢我的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43507748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档