鱼C论坛

 找回密码
 立即注册
查看: 480|回复: 3

[已解决]新手求助!

[复制链接]
发表于 2020-4-10 17:15:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
疑问:题目一里的sort函数能对main函数起作用(即数组能在sort中重新排序并在main函数中输出),
          而题目二里的convert函数对数组转置后,main函数输不出转置后的数组,还是按原来数组输出。为什么输不出转置后的数组呢?址传递的话,形参和实参不是在同一空间里吗?

题目一:对数组中10个整数由小到大排序
#include<stdio.h>
void main()
{
   void sort(int array[],int n);
   int a[10],i;
   。。。
   。。。//省略了不重要的部分!!
   sort(a,10);
   for(i=0;i<10;i++)
      printf("%d",a[i]);
}
void sort(int array[],int n)
{
  。。。
  。。。//省略了排序部分
}

题目二:写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。
#include<stdio.h>
void zhuanhuan(int array[3][3]);
void main()
{
        int i,j;
        int a[3][3]={1,2,3,4,5,6,7,8,9};
        printf("begin:\n");
        for(i=0;i<3;i++)
        {
          for(j=0;j<3;j++)
          {
             printf("%d  ",a[i][j]);
                 if(j==2)
                 {
                   putchar(10);
                 }
          }
        }
        printf("after:\n");
        zhuanhuan(a);
        for(i=0;i<3;i++)
        {
          for(j=0;j<3;j++)
          {
             printf("%d  ",a[i][j]);
                 if(j==2)
                 {
                   putchar(10);
                 }
          }
        }

}
void zhuanhuan(int array[3][3])
{
        int i,j;
    for(i=0;i<3;i++)
        {
          for(j=0;j<3;j++)
          {
            if(i!=j)
                {
                   temp=a[i][j];
                   array[i][j]=array[j][i];
                   array[j][i]=temp;
                }
          }
        }
}
最佳答案
2020-4-10 17:34:31
你的zhuanhuan函数,转了两次,又转回来了。所以输出和原来的一样。
例如:i=1,j=2的时候对应数据交换了一次,等i=2,j=1的时候,又交换了一次,相当于转置了两次,那就和原来的一样了啊
内层循环,结束条件应该是j<i
此外还有几处错误,temp没有 定义,交换代码第一行数组名写错了。都帮你修改了
  1. #include<stdio.h>
  2. void zhuanhuan(int array[3][3]);
  3. void main()
  4. {
  5.         int i,j;
  6.         int a[3][3]={1,2,3,4,5,6,7,8,9};
  7.         printf("begin:\n");
  8.         for(i=0;i<3;i++)
  9.         {
  10.           for(j=0;j<3;j++)
  11.           {
  12.              printf("%d  ",a[i][j]);
  13.                  if(j==2)
  14.                  {
  15.                    putchar(10);
  16.                  }
  17.           }
  18.         }
  19.         printf("after:\n");
  20.         zhuanhuan(a);
  21.         for(i=0;i<3;i++)
  22.         {
  23.           for(j=0;j<3;j++)
  24.           {
  25.              printf("%d  ",a[i][j]);
  26.                  if(j==2)
  27.                  {
  28.                    putchar(10);
  29.                  }
  30.           }
  31.         }

  32. }
  33. void zhuanhuan(int array[3][3])
  34. {
  35.         int i,j,temp;
  36.     for(i=0;i<3;i++)
  37.         {
  38.           for(j=0;j<i;j++)
  39.           {
  40.             if(i!=j)
  41.                 {
  42.                    temp=array[i][j];
  43.                    array[i][j]=array[j][i];
  44.                    array[j][i]=temp;
  45.                 }
  46.           }
  47.         }
  48. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-10 17:16:46 | 显示全部楼层
啊!写错了!!题目二里的zhuanhuan函数就是convert函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-10 17:34:31 | 显示全部楼层    本楼为最佳答案   
你的zhuanhuan函数,转了两次,又转回来了。所以输出和原来的一样。
例如:i=1,j=2的时候对应数据交换了一次,等i=2,j=1的时候,又交换了一次,相当于转置了两次,那就和原来的一样了啊
内层循环,结束条件应该是j<i
此外还有几处错误,temp没有 定义,交换代码第一行数组名写错了。都帮你修改了
  1. #include<stdio.h>
  2. void zhuanhuan(int array[3][3]);
  3. void main()
  4. {
  5.         int i,j;
  6.         int a[3][3]={1,2,3,4,5,6,7,8,9};
  7.         printf("begin:\n");
  8.         for(i=0;i<3;i++)
  9.         {
  10.           for(j=0;j<3;j++)
  11.           {
  12.              printf("%d  ",a[i][j]);
  13.                  if(j==2)
  14.                  {
  15.                    putchar(10);
  16.                  }
  17.           }
  18.         }
  19.         printf("after:\n");
  20.         zhuanhuan(a);
  21.         for(i=0;i<3;i++)
  22.         {
  23.           for(j=0;j<3;j++)
  24.           {
  25.              printf("%d  ",a[i][j]);
  26.                  if(j==2)
  27.                  {
  28.                    putchar(10);
  29.                  }
  30.           }
  31.         }

  32. }
  33. void zhuanhuan(int array[3][3])
  34. {
  35.         int i,j,temp;
  36.     for(i=0;i<3;i++)
  37.         {
  38.           for(j=0;j<i;j++)
  39.           {
  40.             if(i!=j)
  41.                 {
  42.                    temp=array[i][j];
  43.                    array[i][j]=array[j][i];
  44.                    array[j][i]=temp;
  45.                 }
  46.           }
  47.         }
  48. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-11 10:58:30 | 显示全部楼层
sunrise085 发表于 2020-4-10 17:34
你的zhuanhuan函数,转了两次,又转回来了。所以输出和原来的一样。
例如:i=1,j=2的时候对应数据交换了 ...

非常感谢!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表