錯在最后幾句{ no= mo; mo= no% mo;return fun2(c);}應該改為{Franction d; no = mo; mo = no% mo;return fun2(d);}既然要用輾轉相除法來求最大公約數(shù),就要嚴格保證輸入?yún)?shù)的值不能弄錯。另外,程序中最好加入一些特殊情況的判斷,如 mo不能為零,而如果兩個數(shù)相等,則會出現(xiàn)分子為零的情況。為什么要重新定義另一個變量d(Franction d;),我不明。我照此修改我的程序,用2/3減去6/5時,程序無結果中止。請指點!

熱心網(wǎng)友

程序必須加負數(shù)的判斷,為了保證進行比較的都是正數(shù),干脆只比較絕對值。修改如下:int fun2(Franction c){ mo = abs( mo); no = abs( no); //只比較絕對值if( mo no){int temp= mo; mo= no; no=temp;}...}至于為什么用Franction d;自己調試跟蹤一下就明白了。如果按照你原來程序的寫法,當執(zhí)行完 no= mo;后再執(zhí)行 mo= no% mo時由于 no= mo,結果當然是 mo=0了,這顯然是錯誤的。