关闭

自顶向下以及类的应用(第五周报告(二))

标签: outputsystemcinputclass任务
453人阅读 评论(1) 收藏 举报
分类:

/* (程序头部注释开始)
 * 程序的版权和版本声明部分
 * Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
 * 文件名称: miao.cpp                            
* 作    者: 苗向前                            
* 完成日期: 2012        年  03     月20      日
 * 版 本 号:  V5.1       

* 对任务及求解方法的描述部分
 * 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
 */

#include <iostream>

using namespace std;

int gac(int,int);

class CFraction
{private:
	int nume;  // 分子
	int deno;  // 分母
 public:
	CFraction(int nu=0,int de=1);   //构造函数,初始化用
	void set(int nu=0,int de=1);    //置值,改变值时用
	void input();				//按照"nu/de"的格式,如"5/2"的形式输入
	void simplify();			//化简(使分子分母没有公因子)
	void amplify(int n);			//放大n倍,如2/3放大5倍为10/3
	void output(int style=0);		//输出:以8/6为例,style为0时,输出8/6;
							//style为1时,输出4/3;
							//style为2时,输出1(1/3),表示一又三分之一;
							//不给出参数和非1、2,认为是方式0
};
int main()
{
	CFraction c1,c2(3,27);
	c1.output(0);
	
	c2.set(3,27);
	c2.output();

	c1.input();
	c1.output(1);

	cout <<"c2:"<<endl;
	c2.output(0);
	c2.output(1);
	c2.output(2);

	cout<<"化简后c2:"<<endl;
	c2.simplify();
	c2.output(0);

	cout<<"增大5倍的c2:"<<endl;
	c2.output(0);
	



	system("pause");
	return 0;



}

//构造函数,初始化用

CFraction::CFraction(int nu ,int de)
{
	if (de != 0)
	{
    	nume = nu;
	    deno = de;
	}
	else
	{
		cout<<"初始化发生错误,退出程序";
		system("pause");
		exit(0);
	}
}

//置值,改变值时用

void CFraction::set(int nu , int de)
{
	if (de != 0)
	{
	  nume = nu;
	  deno = de;
	}
}

//按照"nu/de"的格式,如"5/2"的形式输入

void CFraction::input()
{
	int nu,de;
	char c;

	while(1)
	{
		
	  cout<<"按nu/de的格式输入:"<<endl;

	   cin >> nu >> c >> de;

	   if (c != '/')
	   {
		cout<<"格式不正确\n";
	   }
	   else if (de == 0)
	   {
		   cout<<"分母不能为零!/n";
	   }
	   else
	   {
		   break;
	   }
	   nume = nu;
	   deno = de;
	}
}
//化简(使分子分母没有公因子)

void CFraction::simplify()
{
	int i;
	i = gac(nume,deno);
	nume = nume / i;
	deno = deno / i;
}
//求最大公约数
int gac(int a ,int b)
{
	int r;
	while ((r = a % b) != 0)
	{
	      a = b;
		  b = r;
	}
	return b;
}
//放大n倍,如2/3放大5倍为10/3

void CFraction::amplify(int n)
{
	nume *= n ;
}
//输出:以8/6为例,style为0时,输出8/6;
//style为1时,输出4/3;
//style为2时,输出1(1/3),表示一又三分之一;
//不给出参数和非1、2,认为是方式0

void CFraction::output(int style)
{
	int i;

	switch(style)
	{
	case 0:
		
		  cout << nume << "/" << deno << endl;
		  break;
		
	case 1:
		
		  i = gac(nume,deno);
		  cout << nume / i << "/" <<deno << endl;
		  break;
		
	case 2:
		
			cout << nume/deno << "(" << nume % deno << "/" << deno << ")";
		
	default :
		
			cout << nume << "/" << deno << endl;
		
	}

}
	

运行结果:

 


上机感言:

               多次在一个地方出现错误,并且是毫不起眼却很重要的错误。关于参数的初始化值只在类中声明时出现,而在定义时却不能出现,这是很重要的。

 

 

 

 

 

 

 

 

 

 

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36314次
    • 积分:852
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:0篇
    • 译文:1篇
    • 评论:10条
    最新评论