标题:小白求问,我想把一个m行n列的矩阵变为非标准的上三角矩阵。。。
只看楼主
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
结帖率:100%
已结贴  问题点数:20 回复次数:6 
小白求问,我想把一个m行n列的矩阵变为非标准的上三角矩阵。。。
这个问题,是刚才那个问题的延续,就是我想把一个M*N的矩阵化为非标准的上三角矩阵。望大神继续帮助!!!感激不尽!!!
比如
1   2   3
4   5   6
化为
1   2   3
0  -3  -6
下面是我写的程序,但是运行时结果出问题了。
#include<stdio.h>
#include<stdlib.h>
#define M 100
#define N 100
void main()
{
    float a[M][N],b[M][N],c[M][N],d,e,B1;
    int i,j,flag=0,count=0,m,n,t,h1,l1,h2,l2;
    //输入行列数进行控制//
    printf("请输入矩阵的行数和列数m与n:\n");
    scanf("%d%d",&m,&n);
    //对矩阵P、A、Q进行初始化//
    printf("请按行输入矩阵A的各个元素\n");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%f",&a[i][j]);
    for(i=0;i<m;i++)
        for(j=0;j<m;j++)
            if(i==j)
                b[i][j]=1;
            else
                b[i][j]=0;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(i==j)
                c[i][j]=1;
            else
                c[i][j]=0;
    //输出显示初始化的P、A、Q矩阵//
    printf("初始A矩阵\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",a[i][j]);
        printf("\n");
    }
    printf("初始P矩阵\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
            printf("%10.2f",b[i][j]);
         printf("\n");
    }
    printf("初始Q矩阵\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",c[i][j]);
        printf("\n");
    }
    //对矩阵P、A、Q进行运算使其化为上三角矩阵//
    for(t=0;t<m;t++)
    {
        count=0;
        //从a[t][t]开始按行找到首个不为0的元素,并记录位置,记为第h行,第l列//
        for(i=t;i<m;i++)
        {
            for(j=t;j<n;j++)
            {
                if(a[i][j]!=0)
                {
                    flag=1;l1=i;h1=j;
                }
                if(a[i][j]!=0)
                    break;
                else count++;
                if(count==(m-t)*(n-t))
                    break;
            }
            if((flag==1)||(count==(m-t)*(n-t)))
                break;
        }
        if(count==(m-t)*(n-t))
            break;
         //交换第h1列与第h2列//
        h2=t;
        l2=t;
        for(i=0;i<m;i++)
        {
            d=a[i][h1];
            a[i][h1]=a[i][h2];
            a[i][h2]=d;
        }
        for(i=0;i<n;i++)
        {
            e=c[i][h1];
            c[i][h1]=c[i][h2];
            c[i][h2]=e;
        }
        //交换第l1行与第l2行//
        for(j=0;j<n;j++)
        {
            d=a[l1][j];
            a[l1][j]=a[l2][j];
            a[l2][j]=d;
        }
        for(j=0;j<m;j++)
        {
            e=b[l1][j];
            b[l1][j]=b[l2][j];
            b[l2][j]=e;
        }
        
        //对A进行行变换,使每行的首个非零元下的每行对应的元素化为0,同时对P进行相应的行变换//

        for(i=t;i<m;i++)
        {
            B1=a[i][t]/a[t][t];
            for(j=0;j<n;j++)
                if(i!=t)
                {
                    a[i][j]=a[i][j]-B1*a[t][j];
                    b[i][j]=b[i][j]-B1*b[t][j];
                }
        }
    }
    //输出显示运算后的P、A、Q矩阵//
    printf("A矩阵的阶梯型为\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",a[i][j]);
        printf("\n");
    }
    printf("相应变化后的P矩阵\n",m);
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
            printf("%10.2f",b[i][j]);
         printf("\n");
    }
    printf("相应变化后的Q矩阵\n",n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",c[i][j]);
        printf("\n");
    }
}


为啥有次输出的结果对了,有次的结果却错了。我不会单步调式,正在学习,所以希望大神再帮帮忙!
搜索更多相关主题的帖子: include count 
2013-06-06 13:42
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
得分:0 
M<=N这是假定的要求。
2013-06-06 13:44
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
得分:0 
我还是自己来回答吧,当每次循环的时候,用于标记的flag忘了归为零。。。。
2013-06-07 13:28
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:7 

DO IT YOURSELF !
2013-06-07 13:41
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
得分:7 
哇!
2013-06-07 14:03
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
得分:7 

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-07 14:12
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
得分:0 
哎,累死了。脑子一旦卡克,就死掉!!!!!
2013-06-07 14:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-414654-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.131175 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved