c语言问题,高手请进!

以下是一个求两个数的最大公约数,最小公倍数的一个小程序,请高手看一下,我的问题是:当输入1,2,和输入两个相同的数是,为什么程序出错了呢?for(g=1;g<(x+y)/... 以下是一个求两个数的最大公约数,最小公倍数的一个小程序,请高手看一下,我的问题是:当输入1,2,和输入两个相同的数是,为什么程序出错了呢?
for(g=1;g<(x+y)/2;g++)
if((x%g==0)&&(y%g==0))
i=g;为什么这句具体是怎么运行的?这个程序怎么改进?
程序如下:
#include <stdio.h>
#include <math.h>
void main()
{
int zdgys(int x,int y);
int zxgbs(int e,int f);
int a,b,c,d;
scanf("%d,%d",&a,&b);
c=zdgys(a,b);
d=zxgbs(a,b);
printf("zdgys is %d\n",c);
printf("zxgbs is %d\n",d);
}
int zdgys(int x,int y)
{int i,g;
for(g=1;g<(x+y)/2;g++)
if((x%g==0)&&(y%g==0))
i=g;
return(i);
}
int zxgbs(int e,int f)
{int s,g,i;
for(g=1;g<(e+f)/2;g++)
if((e%g==0)&&(f%g==0))
i=g;
s=e*f/i;
return(s);
}
谢谢你们对我的帮助,我编的这个程序确实很垃圾,很感谢yang83980901当面指出我的缺点,我已经把这个程序改进了,运行的很好,我这个程序错在调用函数的定义上,int i,g;
for(g=1;g<(x+y)/2;g++)这里有错,1+2=3;3/2=1.5,但我定义g是整型的,所以运行是出错了!
展开
 我来答
夜度花容锦绣衣G
2019-06-13 · TA获得超过3670个赞
知道大有可为答主
回答量:3050
采纳率:25%
帮助的人:163万
展开全部
你这这一步错了cost=10+(mile-3)*2+((minutes*60+seconds)/300)*2;因为你minutes和second都是int的,当你除以一个整形后它会取整,例如
c=a/100,当a为int型且a=580时,c的值会是5,而不是你所想的5.8,所以这题你只要把minutes和second改为double型就行了(
int
minutes,
seconds;改为
double
minutes,
seconds;及
scanf("%lf%d%d",
&mile,
&minutes,
&seconds);
改为scanf("%lf%lf%lf",
&mile,
&minutes,
&seconds);)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feldspar
2007-12-11 · TA获得超过384个赞
知道小有建树答主
回答量:564
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
#include <math.h>

int zdgys(int x,int y);
int zxgbs(int e,int f);

void main()
{
int a,b,c,d;

scanf("%d", &a);
scanf("%d", &b);

c = zdgys(a,b);
d = zxgbs(a,b);

printf("zdgys is %d\n", c);
printf("zxgbs is %d\n", d);

getchar();
getchar();
}

int zdgys(int x, int y)
{
int i, g;
for(g=1; g<=(x+y)/2; g++)
{
if( (x%g == 0) && (y%g == 0) )
{
i=g;
}
}

return i;
}

int zxgbs(int e, int f)
{
int s, g, i;

for(g=1; g<=(e+f)/2; g++)
{
if( (e%g==0) && (f%g==0) )
{
i=g;
}
}

s = e * f / i;

return s;
}

看看改动了什么。你的编程风格太差了,既没空行,又没空格,让我编辑了半天。

我用你说的值试了都没问题啊,调试命令:F10单行执行,F11进入函数,F9设置断点,F5进入调试模式
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲤墙
2007-12-11
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
为什么不用辗转相除法

#include<stdio.h>
int gy(int a,int b)
{int t;
if(a<b)
{t=a;
a=b;
b=t;}
t=a%b;
while(t)
{a=b;
b=t;
t=a%b;

}
return(b);
}
int gb(int a,int b,int c)
{c=a*b/c;
return(c);
}
main()
{int x,y,c;
scanf("%d%d",&x,&y);
c=gy(x,y);
printf("gongyue=%d\n gongbei=%d\n",c,gb(x,y,c));

}
你的程序在g=1的时候就满足 if((x%g==0)&&(y%g==0)) 那个时候就返回值了 不会再继续循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yang83980901
2007-12-11
知道答主
回答量:77
采纳率:0%
帮助的人:0
展开全部
一楼的可以运行啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pujia12345
2007-12-11 · TA获得超过3680个赞
知道大有可为答主
回答量:3456
采纳率:0%
帮助的人:2975万
展开全部
垃圾
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式