收到一位同學的求助信,解決的是[http://blog.csdn.net/sxhelijian/article/details/8737365](http://blog.csdn.net/sxhelijian/article/details/8737365)中的問題。她的程序如下:
~~~
#include <iostream>
using namespace std;
class CFraction
{private:
int nume; // 分子
int deno; // 分母
public:
void input(); //按照"nu/de"的格式,如"5/2"的形式輸入
void simplify(); //化簡(使分子分母沒有公因子)
void amplify(int n); //放大n倍,如2/3放大5倍為10/3
void output(int style); //輸出:以8/6為例,style為0時,原樣輸出8/6;
//style為1時,輸出化簡后形式4/3;
//style為2時,輸出1(1/3)形式,表示一又三分之一;
//style為3時,用小數形式輸出,如1.3333;
//不給出參數和非1、2,認為是方式0
};
//主函數
int main()
{
CFraction c;
c.input();
c.simplify();
c.amplify(3);
c.output(1);
c.output(2);
c.output(3);
c.output(0);
return 0;
}
//按照"nu/de"的格式,如"5/2"的形式輸入
void CFraction::input()
{
char c;
cout<<"請輸入分數的值:"<<endl;
while(1)
{
cin>>nume>>c>>deno;
if(c!='/')
cout<<"格式不正確,請重新輸入!"<<endl;
else
break;
}
}
//化簡(使分子分母沒有公因子)
void CFraction::simplify()
{
int num1,num2,temp;
int x,y;
num1=nume;
num2=deno;
if(num1<num2) //找出較大的值
{
temp=num1;
num1=num2;
num2=temp;
}
x=nume;
y=deno;
while(y>0)
{
temp=x%y;
x=y;
y=temp;
};
num1=num1/x;
num2=num2/y;
cout<<num1<<'/'<<num2<<endl;
}
//放大n倍,如2/3放大5倍為10/3
void CFraction::amplify(int n)
{
int num1,num2;
num1=nume*n;
num2=deno*n;
cout<<num1<<'/'<<num2<<endl;
}
//輸出:以8/6為例,style為0時,原樣輸出8/6;為1時,輸出化簡后形式4/3;為2時,輸出1(1/3)形式,表示一又三分之一;為3時,用小數形式輸出,如1.3333;
//不給出參數和非1、2,認為是方式0
void CFraction::output(int style)
{
if(style==1)
{
int num1,num2,temp;
int x,y;
num1=nume;
num2=deno;
if(num1<num2) //找出較大的值
{
temp=num1;
num1=num2;
num2=temp;
}
x=nume;
y=deno;
while(y>0)
{
temp=x%y;
x=y;
y=temp;
};
num1=num1/x;
num2=num2/y;
cout<<num1<<'/'<<num2<<endl;
}
else
{
if(style==2)
{
int a,b,c=0;
a=nume;
b=deno;
while(a>=b)
{
a=a-b;
c++;
}
if(a==0)
cout<<c<<endl;
else
cout<<c<<'('<<a<<'/'<<b<<')'<<endl;
}
if(style==3)
{
double c;
c=nume/deno;
cout<<c<<endl;
}
else
cout<<nume<<'/'<<deno<<endl;
}
}
~~~
她的問題是:編譯,鏈接都沒錯,但不能運行???
嘗試運行,輸入后,運行出錯。初步判斷,調用CFraction::input()沒有出問題,CFraction::simplify()的嫌疑很大。
輸入分子、分母,單步跟蹤進CFraction::simplify(),幾步之后,真相出現了。見圖:

階數為0。
這個程序在算法設計上有問題,請自行再去考慮。需要提醒的是,單步調試,可以學會。