简单的C语言问题,来拿分咯

来源:百度知道 编辑:UC知道 时间:2024/05/15 12:07:16
void main()
{
int hcf(int,int);
int lcd(int,int,int);
int u,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%d\n",h);
l=lcd(u,v,h);
printf("L.C.D=%d\n",l);
}
int hcf(int u,int v)
{
int t,r;
if(v>u)
{t=u;u=v;v=t;}
while(r!=0)
{r=u%v;u=v; v=r;}
return(v);
}
int lcd(int u,int v,int h)
{
return(u*v/h);
}

void main()
{
int hcf(int,int);
int lcd(int,int,int);
int u,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%d\n",h);
l=lcd(u,v,h);
printf("L.C.D=%d\n",l);
}
int hcf(int u,int v)
{
int t,r;
if(v>u)
{t=u;u=v;v=t;}
while((r=u%v)!=0)
{u=v; v=r;}
return(v);
}
int lcd(int u,int v,int h)
{
return(u*v/h);
}

问题:这两个程序有什么不同?第一个是错的,第二个是对的
这题是求两个数的最大公约数和最

while(r!=0)
{r=u%v;u=v; v=r;}
return(v);
刚刚又看了下发现这里的v循环出来后总等于0
原因是r=u%v放在循环体内,会执行到r=0,就是在判断条件r!=0时,v已经变成r了,也就变成了v=0;
h=hcf(u,v);这句说明h也等于0,于是在调用lcd(u,v,h)中
u*v/h表达式除数为0,出错了.
而下面这个:
while((r=u%v)!=0)
{u=v; v=r;}
在r=u%v为0时,没有执行v=r,也就是不为0
其它没有研究,只发现这一点.

while(r!=0)
{r=u%v;u=v; v=r;}
return(v);
。。。
while((r=u%v)!=0)
{u=v; v=r;}

第一个如果r=u%v 等于0 了,那么u=v,v=r也等于0了,所以返回值就是0了,所以应该返回return(u);

我看都是对,都能运行,就没有返回结果,两个都是这样

难,你貌似老师?一个一个批.....