千梦


私信TA

用户名:dxy0325

访问量:1816

签 名:

兴趣是最好的老师

等  级
排  名 8873
经  验 1197
参赛次数 0
文章发表 18
年  龄 18
在职情况 学生
学  校 BSU
专  业 数据科学与大数据技术

  自我简介:

题目:

写一个函数,使给定的一个二维数组(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 人评分

  评论区

  • «
  • »