按照如下函数原型编写子函数计算正整数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,主函数中不输出任何信息。
展开
 我来答
哭暴杀
2018-11-17 · TA获得超过164个赞
知道小有建树答主
回答量:324
采纳率:72%
帮助的人:87.4万
展开全部
/*首先,我觉得这个题用数组,或指针好解决
这个题目的意思似乎还必须用到静态,用数组之流有点不符合要求 
*/ 
#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;
}
Moneenom
推荐于2018-04-13
知道答主
回答量:1
采纳率:0%
帮助的人:1237
展开全部
这是我帮改的,你只是少了个条件循环而已。
#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];
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式