注释详细,不是简单的问题,我已经调试过了,但是真的不懂。很容易看懂的,请看一下,射射大家


file 1

# include<stdio.h>

extern int max(int a,int b );                      //声明给两个数求最大公约数的函数

int main()
{
    int a,b;
    printf("请按以下格式输入两个数组5,9\n");
    scanf("%d,%d",&a,&b);
    if(max(a,b)!=0)                              //max返回的就是d【0】,就是相同的公约数里最大的,如果没有找到公约数,哪默认起始为零
    {
    printf("最大公约数为%d\n",max(a,b));
    
    }
    else 
    {
        printf("无公约数");
        
    }





    return 0;
}


/*
请按以下格式输入两个数组5,9
12,34
0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

2 0 0 0 0 0 0 0 0 0 最大公约数为2
Press any key to continue


  */


file 2

# include<stdio.h>
extern void sort(int array[],int n);

int max(int x,int y)
{
    //int c;
    int a[100]={0};                            //定义了三个数组,先求出第一个数的所有公约数,从大到小顺序排放,其它都为零
    int b[100]={0};                            //第二个数
    int d[100]={0};                            //第三个数组用来存放相同的公约数,也是从大到小排放
    int i,j,k;
    j=0;
    for(i=2;i<x;++i)                            //求第一个数
    {
        if(x%i==0)
        {
            a[j]=i;                              //关键的赋值语句没有执行,但是我测试过了这个if会正常执行,i的值没错,j也没错
            j++;                                //就是i赋值不到a【j】里面去
    
        }

    }
    j=0;
        for(i=2;i<y;++i)              //这个也是一样的问题,对第二个数进行处理
    {
        if(y%i==0)
        {
        
            b[j]=i;                               //关键的赋值语句没有执行,但是我测试过了这个if会正常执行,i的值没错,j也没错
            j=j+1;                                //就是i赋值不到a【j】里面去
                
        }

    }

        sort(a,x);                        //写的排序函数,对数组进行排序。
        sort(b,y);
        
    j=0;
            
        for(i=0;i<x;++i)
    {
            
            for(k=0;k<y;++k)
            {
                if(a[i]==b[k])                  //循环比较a,b两个数组的数,相同的就放到第三个d数组里面。
                {
                    d[j]=a[i];
                    j++;
                }
            }
        

    }
     for(i=0;i<10;++i)                  //下面三个循环输出数组内容语句是我为了调试而写的,我对这三个数组有疑惑。
     {
         printf("%d ",a[i]);


     }
     printf("\n\n");
       for(i=0;i<10;++i)
     {
         printf("%d ",b[i]);


     }
       printf("\n\n");
         for(i=0;i<10;++i)
     {
         printf("%d ",d[i]);


     }
     







    return d[0];
}





file 3

# include<stdio.h>
 void sort(int array[],int n)              //参数n代表你要排序的数字总和。
 {

     int i,j,k;
     for(i=0;i<n-1;++i)
     {

         for(j=0;j<n-1;++j)                         //应该是冒泡排序法吧
         {
             if(array[j]<array[j+1])
             {
                 k=array[j];
                 array[j]=array[j+1];
                 array[j+1]=k;
             }
         }

         
     }
 
 
 
 }







# include<stdio.h>
extern void sort(int array[],int n);

int max(int x,int y)
{
    //int c;
    int a[100]={0};                            //定义了三个数组,先求出第一个数的所有公约数,从大到小顺序排放,其它都为零
    int b[100]={0};                            //第二个数
    int d[100]={0};                            //第三个数组用来存放相同的公约数,也是从大到小排放
    int i,j,k;
    j=0;
    for(i=2;i<x;++i)                            //求第一个数
    {
        if(x%i==0)
        {
            a[j]=i;                              //关键的赋值语句没有执行,但是我测试过了这个if会正常执行,i的值没错,j也没错
            j++;                                //就是i赋值不到a【j】里面去
    
        }

    }
    j=0;
        for(i=2;i<y;++i)              //这个也是一样的问题,对第二个数进行处理
    {
        if(y%i==0)
        {
        
            b[j]=i;                               //  (第二次测试发现确实执行了)关键的赋值语句没有执行,但是我测试过了这个if会正常执行,i的值没错,j也没错
            j=j+1;                                //就是i赋值不到a【j】里面去
                
        }

    }

        sort(a,x);                         //写的排序函数,对数组进行排序。
        sort(b,y);                          //第二次测试到这里也没错,三个数组一切正常

        for(i=0;i<10;++i)                  //下面三个循环输出数组内容语句是我为了调试而写的,我对这三个数组有疑惑。
     {
         printf("%d ",a[i]);


     }
     printf("\nA\n");
       for(i=0;i<10;++i)
     {
         printf("%d ",b[i]);


     }
       printf("\nB\n");
         for(i=0;i<10;++i)
     {
         printf("%d ",d[i]);


     }
      printf("\nC\n");
    


        
        j=0;
            
        for(i=0;i<x;++i)                    //第二次测试发现这个循环一执行,数组全乱套了。!!!!
    {
            
            for(k=0;k<y;++k)
            {
                if(b[k]==a[i])                  //循环比较a,b两个数组的数,相同的就放到第三个d数组里面。
                {
                    d[j]=b[k];
                    j++;
                }
            }
        

    }
            





    return d[0];
}

这是我第二次调试的结果,将问题代码进一步缩小了范围。