| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 510 人关注过本帖
标题:小白求问,我想把一个m行n列的矩阵变为非标准的上三角矩阵。。。
取消只看楼主 加入收藏
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
小白求问,我想把一个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
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
哎,累死了。脑子一旦卡克,就死掉!!!!!
2013-06-07 14:30
快速回复:小白求问,我想把一个m行n列的矩阵变为非标准的上三角矩阵。。。
数据加载中...
 
   



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

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