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];
}
这是我第二次调试的结果,将问题代码进一步缩小了范围。