问题又来了。。。bryant1976学长错在最后几句{no=mo
错在最后几句 { no= mo; mo= no% mo; return fun2(c); } 应该改为 { Franctn d; no = mo; mo = no% mo; return fun2(d); } 既然要用辗转相除法来求最大公约数,就要严格保证输入参数的值不能弄错。 另外,程序中最好加入一些特殊情况的判断,如 mo不能为零,而如果两个数相等,则会出现分子为零的情况。 为什么要重新定义另一个变量d(Franction d;),我不明。 我照此修改我的程序,用2/3减去6/5时,程
程序必须加负数的判断,为了保证进行比较的都是正数,干脆只比较绝对值。修改如下: int fun2(Franction c) { mo = abs( mo); no = abs( no); //只比较绝对值 if( mo> no) { int temp= mo; mo= no; no=temp; } ... } 至于为什么用Franction d;自己调试跟踪一下就明白了。如果按照你原来程序的写法,当执行完 no= mo;后再执行 mo= no% mo时由于 no= mo,结果当然是 mo=0了,这显然是错误的。