错在最后几句{ no= mo; mo= no% mo;return fun2(c);}应该改为{Franction 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了,这显然是错误的。