题目:

写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。


解题思路:

本函数的功能是实现转置,输入一个二维数组,输出转置后的二维数组。

在转置过程中当i,j值不相等时,就把a[i][j]=a[j][i];这段操作是交换而不是代替

因此需要临时变量t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t;


更简单的办法是直接循环输出的时候选择输出a[j][i],但这毕竟达到不了锻炼的目的,但也是一种好思路。

注意事项:

①首先输入时不能直接输入一个数组,需要遍历输入,两个循环先行后列

②在转置时也是只需要遍历上三角,也就是i<=j的情况,否则值会和原来一样,依然是需要双层循环

③在初始化时需要给数组分配空间,本题使用3即可

④虽然是数组,但是应该用int类型(不知为何总想着用char)

⑤注意数组可能越界,在循环时如果写for(i=1;i<=3;i++)那么就会越界,此时数组应该开到4




参考代码:

先记录一下刚做题时天真的代码(哈哈)很多问题,不忍直视

#include<stdio.h>
int main()
{
    void reverse(char a[i][j]);
    char a[i][j];
    scanf("%s",&a[i][j]);
    a[i][j]=reverse(char a[i][j]);
    printf("%s",a[i][j]);
	return 0;
}

void reverse(char a[i][j])
{
    char a[i][j];
    char a[m][n];
    if(i<=j)
    {
        a[m][n]=a[i][j];
        a[i][j]=a[j][i]; 
        a[j][i]=a[m][n];
    }
    return a[i][j];
}



下面才是正确的~

#include<stdio.h>
int main()
{
    int a[3][3];
    int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    reverse(a);
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)//不要随便写,会有数组越界问题的
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");//注意换行时机
    }
    return 0;
}
void reverse(int a[3][3])//一开始的错误,写了a[i][j]
{
    int t,i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            if(i<=j)
            {
                t=a[i][j];
                a[i][j]=a[j][i]; 
                a[j][i]=t;
            }
        }
    }
}




点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论