机智如我么么哒 发表于 2019-9-18 17:46:10

求助大佬,为什么我的代码运算和输出一样

#include<stdio.h>
int a;
int main()
{
        void convert(int a);
        int a,i,j;
        printf("输入数据\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
scanf("%d",&a);       
}
printf("原始数据\n");
for(i=0;i<=2;i++)
{
        for(j=0;j<=2;j++)
        printf("%d ",a);
        if(j=2)
        printf("\n");

}
printf("调整后数据\n");
        convert(a);
        for(i=0;i<=2;i++)
        {
                for(j=0;j<=2;j++)
                printf("%d ",a);
                if(j=2)
                printf("\n");
        }
        return 0;
}
void convert(int a)
{
        int i,j,t;
        for(i=0;i<=2;i++)
       
                for(j=0;j<=2;j++)
                {
               t=a;
                a=a;
                a=t;
}

}

机智如我么么哒 发表于 2019-9-18 17:48:04

我输入
1 2 3
4 5 6
7 8 9
输出也是这个结果

jackz007 发表于 2019-9-18 18:50:36

本帖最后由 jackz007 于 2019-9-18 18:57 编辑

      convert() 函数里对数组每个元素的遍历存在着一个问题,当遍历到 a[ i ] 时,会把这个元素与 a[ i ] 进行对调,但是,后面遍历到 a[ i ] 的时候,又会把它与 a[ i ] 进行对调,所以,操作的结果,数组 a 中的每个元素都会维持原样。

   这是我修改的代码,楼主可以测试一下,修改的目标是在 convert() 函数中,避免对已经调换过的数组元素再次遍历:
#include <stdio.h>

int a                               ;

void convert(void)
{
      int i , j , t                     ;
      for(i = 0 ; i < 3 ; i ++) {
                for(j = i ; j < 3 ; j ++) {// 这里是重要修改,可以保证已经调换过的元素不会再次被调换回去
                        t = a       ;
                        a = a ;
                        a= t      ;
                }
      }
}

int main()
{
      inti , j                                                                   ;
      printf("输入数据\n")                                                         ;
      for(i = 0 ; i < 3 ; i ++) for(j = 0 ; j <= 2 ; j ++) scanf("%d" , & a) ;
      printf("原始数据\n")                                                         ;
      for(i = 0 ; i < 3 ; i ++) {
                for(j = 0 ; j < 3 ; j ++) {
                        if(! j) printf("\n\t\t")                                     ;
                        else printf(" ")                                             ;
                        printf("%3d" , a)                                    ;
                }
      }
      printf("\n\n")                                                               ;
      printf("调整后数据\n")                                                       ;
      convert(a)                                                                   ;
      for(i = 0 ; i < 3 ; i ++) {
                for(j = 0 ; j < 3 ; j ++) {
                        if(! j) printf("\n\t\t")                                     ;
                        else printf(" ")                                             ;
                        printf("%3d" , a)                                    ;
                }
      }
}

机智如我么么哒 发表于 2019-9-18 22:29:46

jackz007 发表于 2019-9-18 18:50
convert() 函数里对数组每个元素的遍历存在着一个问题,当遍历到 a[ i ] 时,会把这个元素与 a ...

显示的结果是32        9        too many arguments to function 'convert'

jackz007 发表于 2019-9-18 23:11:43

本帖最后由 jackz007 于 2019-9-18 23:17 编辑

void convert(void)

      调用 convert() 不需要参数, 代码需要改一下。

      printf("调整后数据\n")                                                         ;
      convert()                                                                  ;
      for(i = 0 ; i < 3 ; i ++) {
页: [1]
查看完整版本: 求助大佬,为什么我的代码运算和输出一样