hsk123456 发表于 2020-4-10 17:15:06

新手求助!

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

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

题目二:写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。
#include<stdio.h>
void zhuanhuan(int array);
void main()
{
        int i,j;
        int a={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);
               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);
               if(j==2)
               {
                   putchar(10);
               }
          }
        }

}
void zhuanhuan(int array)
{
        int i,j;
    for(i=0;i<3;i++)
        {
          for(j=0;j<3;j++)
          {
          if(i!=j)
                {
                   temp=a;
                   array=array;
                   array=temp;
                }
          }
        }
}

hsk123456 发表于 2020-4-10 17:16:46

啊!写错了!!题目二里的zhuanhuan函数就是convert函数

sunrise085 发表于 2020-4-10 17:34:31

你的zhuanhuan函数,转了两次,又转回来了。所以输出和原来的一样。
例如:i=1,j=2的时候对应数据交换了一次,等i=2,j=1的时候,又交换了一次,相当于转置了两次,那就和原来的一样了啊
内层循环,结束条件应该是j<i
此外还有几处错误,temp没有 定义,交换代码第一行数组名写错了。都帮你修改了
#include<stdio.h>
void zhuanhuan(int array);
void main()
{
      int i,j;
      int a={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);
               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);
               if(j==2)
               {
                   putchar(10);
               }
          }
      }

}
void zhuanhuan(int array)
{
      int i,j,temp;
    for(i=0;i<3;i++)
      {
          for(j=0;j<i;j++)
          {
            if(i!=j)
                {
                   temp=array;
                   array=array;
                   array=temp;
                }
          }
      }
}

hsk123456 发表于 2020-4-11 10:58:30

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

非常感谢!!!!
页: [1]
查看完整版本: 新手求助!