| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5360 人关注过本帖
标题:菜鸟小白求助C语言编写交换矩阵任意两行两列的问题
只看楼主 加入收藏
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
菜鸟小白求助C语言编写交换矩阵任意两行两列的问题
我想编一个可以交换矩阵任意两行两列的小程序,在写代码时出现了问题。求助,各位大神!
以下是我写的源程序代码
#include<stdio.h>
#include<stdlib.h>
#define M 30
void main()
{
    float a[M][M],b[M][M],c[M][M],d[2][M],e[2][M];
    int i,j,m,n,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;
    for(i=0;i<2;i++)
        for(j=0;j<M;j++)
            d[i][j]=0;
            e[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");
    }
    printf("请输入要交换的两列\n");
    scanf("%d%d",&h1,&h2);
    h1=h1-1;
    h2=h2-1;
    printf("请输入要交换的两行\n");
    scanf("%d%d",&l1,&l2);
    l1=l1-1;
    l2=l2-1;
    //交换第h1列与第h2列//
    for(i=0;i<m;i++)
        {
            d[1][i]=a[i][h1];
            a[i][h1]=a[i][h2];
            a[i][h2]=d[1][i];
        }
    for(i=0;i<n;i++)
        {
            e[1][i]=c[i][h1];
            c[i][h1]=c[i][h2];
            c[i][h2]=e[1][i];
        }
    //第一次输出变换后的Q矩阵//
    printf("第一次输出Q矩阵:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",c[i][j]);
        printf("\n");
    }
    //交换第l1行与第l2行//
    for(j=0;j<n;j++)
        {
            d[2][j]=a[l1][j];
            a[l1][j]=a[l2][j];
            a[l2][j]=d[2][j];
        }
    for(j=0;j<m;j++)
        {
            e[2][j]=b[l1][j];
            b[l1][j]=b[l2][j];
            b[l2][j]=e[2][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");
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
            printf("%10.2f",b[i][j]);
         printf("\n");
    }
    //第二次输出变换后的Q矩阵//
    printf("交换后的Q矩阵为\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",c[i][j]);
        printf("\n");
    }
}
图片附件: 游客没有浏览图片的权限,请 登录注册

在运行时为什么第一次输出的Q矩阵和第二次输出的Q矩阵不同,哪里出问题了呀?
求各位大神帮忙答疑解惑。。。。。。谢谢啦!
搜索更多相关主题的帖子: C语言 include 源程序 元素 
2013-06-06 12:24
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
就是为什么A的最后一行怎么怎么变成了Q的第一行
2013-06-06 12:36
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:10 
调试发现d[2][0]的内存地址和c[0][0]的地址是一致的,所以会出现错误

C++菜鸟
2013-06-06 13:07
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
回复 3楼 lzj12530
谢谢啦,那怎么改呢?
2013-06-06 13:10
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:10 
因为你的d数组和e数组只是用来交换的缓冲区,每次也只交换一个值,你试试把数组直接换成单个变量就定义一个temp变量来代替d和e

C++菜鸟
2013-06-06 13:13
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
回复 3楼 lzj12530
谢谢啦
已经
改好
2013-06-06 13:15
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
回复 5楼 lzj12530
谢谢啦,
图片附件: 游客没有浏览图片的权限,请 登录注册
改好了!再次表示感谢!
2013-06-06 13:19
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
good!

C++菜鸟
2013-06-06 13:39
快速回复:菜鸟小白求助C语言编写交换矩阵任意两行两列的问题
数据加载中...
 
   



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

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