免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1940 | 回复: 3
打印 上一主题 下一主题

[C] 请大家帮我看下,为什么程序不能实现矩阵转置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-25 09:05 |只看该作者 |倒序浏览
这是一个3*3矩阵,程序要将他转置输出,但是程序输出的结果总是不对,请大家帮我看下到底问题处在哪里,该怎么样解决?
#include <stdio.h>
#define n 3
int array[n][n];
void convert(int a[][n])
{
    int i,j;
    for(i=0;i<n;i++)
        for (j=0;j<=i;j++)
            if(i!=j)
            {
                array[j]=a[j];
                array[j]=a[j];
            }
}
int main()
{
    int i,j;
    printf("请输入一个3*3矩阵:\n");
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
            scanf("%d",&array[j]);
    printf("您输入的矩阵是:\n");
    for(i=0;i<n;i++){
        for (j=0;j<n;j++)
            printf("%5d",array[j]);
    printf("\n");
    }
    convert(array);
    printf("转置后的矩阵是:\n");
    for(i=0;i<n;i++){
        for (j=0;j<n;j++)
            printf("%5d",array[j]);
    printf("\n");
    }
    return 0;
}

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2008-07-25 09:20 |只看该作者
if(i!=j)
            {
                array[i][j]=a[j][i];
                array[j][i]=a[i][j];
            }

这几句代码有问题,仔细想一下吧。

论坛徽章:
0
3 [报告]
发表于 2008-07-25 09:21 |只看该作者
scanf("%d",&array【i】[j]);

论坛徽章:
0
4 [报告]
发表于 2008-07-25 10:02 |只看该作者
不推荐将array定义成全局变量来完成操作,那样的话 调用函数中array[i][j]就和a[i][j]完全混淆了

#include <stdio.h>
#define n 3

void convert(int a[n][n])
{
    int i,j,tmp;
    for(i=0;i<n;i++)
        for (j=0;j<=i;j++)
            if(i!=j)
            {
                    tmp = a[ i][j];
                a[ i][j]=a[j][ i];
                a[j][ i]=tmp;
            }

}
int main()
{
    int i,j;
    int array[n][n];
    printf("请输入一个3*3矩阵:\n");
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
            scanf("%d",&array[ i][j]);
    printf("您输入的矩阵是:\n");
    for(i=0;i<n;i++){
        for (j=0;j<n;j++)
            printf("%5d",array[ i][j]);
    printf("\n");
    }
    convert(array);
    printf("转置后的矩阵是:\n");
    for(i=0;i<n;i++){
        for (j=0;j<n;j++)
            printf("%5d",array[ i][j]);
    printf("\n");
    }
    return 0;
}

交换时设置中间变量,否则变成a[i][j]与a[j][i]之间的循环赋值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP