《负二代》完整版:关于求最大公约数出现的问题

来源:百度文库 编辑:高校问答 时间:2024/04/29 19:11:16
#include "stdio.h"
fun(a,b)
int a,b;
{int j,i,m,n;
if (a>b)
{
m=a;a=b;b=m;
}
i=a;j=b;
while((n=j%i)!=0)
{
j=i;i=n;
}return (i);
}
main()
{
int a=5,b=6,i;
fun(a,b);
printf("%d\n",i);
}
这个程序是2级考试模拟试题上的,但是运行后却是一个4位数,这是为什么啊?谢谢

逻辑方面的问题没有帮你看,
1.将你代码整理了一下,i没有初始化,在main()里面,
i=fun(a,b),然后再打印i.
2.不要使用C标准之前的用法了。函数返回值写上类型,
fun(a,b)
int a,b;
这种史前用法尽量不要使用了

看看我整理后的程序:

#include <stdio.h>

int fun(int a,int b)
{
int j,i,m,n;
if (a>b)
{
m=a;
a=b;
b=m;
}
i=a;j=b;
while((n=j%i)!=0)
{
j=i;i=n;
}

return (i);
}

int main()
{
int a=5,b=6,i;
i = fun(a,b);
printf("%d\n",i);
return 0;
}

我很久没有用C语言了,不过我想先问一句:这段代码编译的时候能通过么?
另外:逻辑关系不对啊,fan(a,b)这个方法返回的应该是两个数中较大数除以较小数的余数吧?这个难道就是传说中的最大公约数?(抱歉,我忘记了最大公约数的求法了)而且好像涉及到变量i的作用域的问题,C语言好像是不能自动设置默认值的,在声明后没有赋值前,该变量的值是随机的。