按照如下函数原型编写子函数计算正整数a和b的所有公约数。函数原型: int CommonFactors(int a, int b) 15
程序运行结果示例1:Inputaandb:100,50↙Commonfactor1is50Commonfactor2is25Commonfactor3is10Common...
程序运行结果示例1:
Input a and b:
100,50↙
Common factor 1 is 50
Common factor 2 is 25
Common factor 3 is 10
Common factor 4 is 5
Common factor 5 is 2
Common factor 6 is 1
程序运行结果示例2:
Input a and b:
7,-3↙
我的程序
#include <stdio.h>
int i;
int CommonFactors(int a, int b);
int main()
{
int a,b,n;
printf("Input a and b:\n");
scanf("%d,%d",&a,&b);
for(i=0;n!=-1;i++)
{
if(a>0&&b>0)
{
n=CommonFactors(a,b);
printf("Common factor %d is %d\n",i+1,n);
}
else if(a<=0||b<=0)
break;
}
return 0;
}
int CommonFactors(int a, int b)
{
int m,j,k=0,c[50];
if(a<b)
m=a;
else
m=b;
for(j=m;;j--)
{
if(a%j==0&&b%j==0)
{
c[k]=j;
k++;
}
if(j==1)
break;
}
c[k]=-1;
return c[i];
}
第一次调用,返回最大公约数。以后只要再使用相同参数调用,每次返回下一个小一些的公约数。无公约数时,函数CommonFactors()返回-1,主函数中不输出任何信息。 展开
Input a and b:
100,50↙
Common factor 1 is 50
Common factor 2 is 25
Common factor 3 is 10
Common factor 4 is 5
Common factor 5 is 2
Common factor 6 is 1
程序运行结果示例2:
Input a and b:
7,-3↙
我的程序
#include <stdio.h>
int i;
int CommonFactors(int a, int b);
int main()
{
int a,b,n;
printf("Input a and b:\n");
scanf("%d,%d",&a,&b);
for(i=0;n!=-1;i++)
{
if(a>0&&b>0)
{
n=CommonFactors(a,b);
printf("Common factor %d is %d\n",i+1,n);
}
else if(a<=0||b<=0)
break;
}
return 0;
}
int CommonFactors(int a, int b)
{
int m,j,k=0,c[50];
if(a<b)
m=a;
else
m=b;
for(j=m;;j--)
{
if(a%j==0&&b%j==0)
{
c[k]=j;
k++;
}
if(j==1)
break;
}
c[k]=-1;
return c[i];
}
第一次调用,返回最大公约数。以后只要再使用相同参数调用,每次返回下一个小一些的公约数。无公约数时,函数CommonFactors()返回-1,主函数中不输出任何信息。 展开
2个回答
展开全部
/*首先,我觉得这个题用数组,或指针好解决
这个题目的意思似乎还必须用到静态,用数组之流有点不符合要求
*/
#include <stdio.h>
int CommonFactors(int a, int b);//函数,依次从大到小输出公约数
int main(){
int a,b,ret;
printf("Input a and b:\n");
scanf("%d,%d",&a,&b);//读入中- -。
do{
ret=CommonFactors(a,b);
}while(ret>1);//如果ret等于1,或者小于1,就结束循环
return 0;
}
int CommonFactors(int a, int b){//函数开始了
static int number=0,n;//静态
int ret=1,temp_n=n;//必须有个临时的变量
if(a>0&&b>=0){//a和b必须大于0!!!
for(int i=1;i<=a&&i<=a;i++){
if(number>=1){
if(a%i==0&&b%i==0){
if(i<n){
temp_n=i;
}
}
}else{
if(a%i==0&&b%i==0){
temp_n=i;
}
}
}
number++;
n=temp_n;
printf("Common factor %d is %d\n",number,n);
}else{
n=-1;
}
return n;
}
展开全部
这是我帮改的,你只是少了个条件循环而已。
#include <stdio.h>
#include <stdlib.h>
int i;
int CommonFactors(int a, int b);
int main()
{
int a,b,n;
printf("Input a and b:\n");
scanf("%d,%d",&a,&b);
for(i=0;n!=-1;i++)
{
if(a>0&&b>0)
{
n=CommonFactors(a,b);
if(n!=-1)
printf("Common factor %d is %d\n",i+1,n);
else
exit(0);
}
else if(a<=0||b<=0)
exit(0);
}
return 0;
}
int CommonFactors(int a, int b)
{
int m,j,k=0,c[50];
if(a<b)
m=a;
else
m=b;
for(j=m;;j--)
{
if(a%j==0&&b%j==0)
{
c[k]=j;
k++;
}
if(j==1)
break;
}
c[k]=-1;
return c[i];
}
#include <stdio.h>
#include <stdlib.h>
int i;
int CommonFactors(int a, int b);
int main()
{
int a,b,n;
printf("Input a and b:\n");
scanf("%d,%d",&a,&b);
for(i=0;n!=-1;i++)
{
if(a>0&&b>0)
{
n=CommonFactors(a,b);
if(n!=-1)
printf("Common factor %d is %d\n",i+1,n);
else
exit(0);
}
else if(a<=0||b<=0)
exit(0);
}
return 0;
}
int CommonFactors(int a, int b)
{
int m,j,k=0,c[50];
if(a<b)
m=a;
else
m=b;
for(j=m;;j--)
{
if(a%j==0&&b%j==0)
{
c[k]=j;
k++;
}
if(j==1)
break;
}
c[k]=-1;
return c[i];
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询