c#语言编写成绩代码是,在C#中的分数

在C#中的分数

60;

{S0}简介

是从。NET框架中缺少的重要功能之一是一个Fraction类。解释,我是从,说:"因为我们有相同的数据类型可以代表,我们没有公开这种类型的具体,这是具体的数学相关的功能更为有用,我增加了一个为我们的功能要求,考虑加入这在产品的下一个版本"。

,直到类分数(或者甚至内置数值类型的"分数")成为。NET Framework的一部分,我们在我们自己的。这不是太大的问题,因为面向对象编程语言允许我们创建新的数据类型。与Java,C#支持运算符重载,所以我们可以建立一个Fraction类,非常喜欢的内置数值类型。这也将是一个典型的例子来演示C#中的运算符重载功能的合理使用。背景

分数,也被称为有理数,都可以作为一个全数字的比例表示的数字。上面的数字被称为分子,和底部的数字是分母。它们可以用来表示不损失精度,是与生俱来的float和double类型十进制数。

有两种类型的分数:简单的分数(分子和分母都是整数)复杂的分数(分数的分子,分母,或两者都包含一小部分)构造函数

允许一个分子采取零价值的一小部分。任何法律分数(分母不等于零)与分子等于零zero.public分数的整体价值(){

60;初始化(0,1);}

您可以只需除以1表达的一小部分的整数,或者您也可以通过简单地选择一个分子和分母,使整体价值是相等的integer.public分数(INT NUM)表达的一小部分的任意整数{ CheckMinValue(NUM); 初始化(NUM,1);}

任何分数的分母不能有值为零。如果一个分数的分母是零,表达的是不是一个法律的分数,因为它的整体价值是不确定的。在这种情况下,则抛出ArithmeticException从constructor.public分数(NUM,INT巢穴){ CheckDenominatorZero(DEN); CheckMinValue(NUM); CheckMinValue(DEN); 分数f =新的分数(NUM,(十进制)(十进制)DEN); 初始化(f.num,f.den);}

除了从构造函数,分数的类的实例也可以从字符串。静态方法"解析"接受一个简单的或复杂的分数作为输入参数,并返回一个分数的实例(或抛出异常)。如果有一个减号的一小部分的偶数,分数的价值是肯定的。如果有一个减号奇数,分数的价值是否定的。 / /抛出出现FormatException错误的分数格式 / /抛出,引发OverflowException,如果降低分数不适合在分数范围 / /抛出ArithmeticException,如果分母为零 公共静态分数解析(字符串分数) { IF(分数== NULL)

160; 抛出新出现FormatException(); &

#160; 字符串[]分裂= fraction.Split('/'); LEN = split.Length; IF(LEN == 2) { &

#160; INT S0 = int.Parse(分割[0]);

60; INT S1 = int.Parse(分裂[1]);

; 返回新的分数(S0,S1); }

60; ELSE IF(LEN == 4) {

60; INT S0 = int.Parse(分割[0]); INT S1 = int.Parse(分裂[1]); 分数F1 =新的分数(S0,S1);

160; S2 = int.Parse(分割[2]);

160; INT S3 = int.Parse(分裂[3]);

0; 分数F2 =新的分数(S2,S3);

60; 返回F1 / F2; } 其他

; 抛出新出现FormatException();

0; }此外

若要添加分数,分母必须是平等的。下面的步骤是需要添加两部分。建立每个小部分,这样既分母都是平等的。添加组分的分子。分母将建成的分数的分母。减少的答案。公共静态分数运算符(分数为A,相率B) { 十进制R1 =(十进制)a.num * b.den(十进制)b.num * a.den;

60; 十进制R2 =(十进制)a.den * b.den;

160;返回新的分数(R1,R2); }减法

减法是非常相似,此外,唯一的区别是在第2步,应减去分子。公共静态分数运营商 - (分数为A,相率B)

;{ 十进制R1 =(十进制)a.num * b.den - (十进制)b.num * a.den; 十进制R2 =(十进制)a.den * b.den; 返回新的分数(R1,R2); }乘法

乘以两个简单的分数,请完成以下步骤:的分子相乘。分母相乘。减少的结果。公共静态分数*(分数为A,相率B) {

十进制R1 =(十进制)a.num * b.num;

; 十进制R2 =(十进制)a.den * b.den;

0;返回新的分数(R1,R2); }司

除以几分之一秒的一小部分,转换的问题,乘法和乘两部分。公共静态分数运营商/(分数为A,相率B) {

160; 十进制R1 =(十进制)a.num * b.den; &

#160; 十进制R2 =(十进制)a.den * b.num;

如果(R2 == 0)

; 抛出新DivideByZeroException();

160; 其他 返回新的分数(R1,R2); }比较运算符

分数类还包括六个布尔比较运算符,而这一切有一个BOOL返回类型。公共静态布尔运算符==(分数为A,相率B) {

; 返回a.num(十进制)* b.den ==(十进制)b.num * a.den; } 公共静态布尔运算符=(组分A,相率B)! { 返回((A == B)); } 公共静态布尔运算符GT;(分数为A,相率B) { 返回(十进制)a.num * b.den GT(十进制)b.num * a.den; }

60; 公共静态布尔运算符GT; =(一小部分,分数b) &

#160; { 返回((LT; b)项); } 公共静态布尔运算符LT(分数为A,相率B)

160; { 返回(十进制)a.num * b.den LT(十进制)b.num * a.den; } 公共静态布尔运算符LT =(一小部分,分数b) {

60; 返回((GT; b)项); }杂项公共方法重写字符串的ToString() { (this.den == 1) 返回this.num.ToString(); 其他

160; 返回this.num"/"; this.den; } &

#160;公众覆盖布尔等于(对象o) {

如果(Ø == NULL | | o.GetType()=的GetType()) &

#160; 返回false; 分数f =(分数)O; 返回(这== F);

0; } 公众覆盖的GetHashCode() { 返回(INT)(this.num ^ this.den); } 公共静态隐运营商双(分数f) { 返回f.num / f.den(双); } 公共分数逆()

0; { 返回新的分数(this.den,this.num); }注释分子和分母必须在[int.MaxValue,int.MaxValue]。类是不可变分数自动减少二元运算符重载方法可以抛出溢出异常可以取代所有类型为"十进制"在课堂上出现的"长",如果编译/ checked选项。这个类不是为速度优化未来

随着即将到来的泛型(和可能的BigInteger)支持C#2.0中,可以修改类分数,像类Fractionlt的东西; TGT; {... },其中T可以是任何整数类型,小数或BigInteger的。在这种情况下,应取代电流源型"十进制"出现的所有的BigInteger和"INT"应以T代替资源 |尼古拉斯捷潘

回答

×评论会员:游客 时间:2011/12/05嗨,如果的toString(X/1号)是X,你应该添加以下当你解析它codepre......spanclass="code-keyword"if/span(len==spanclass="code-digit"1/span){spanclass="code-keyword"return/spanspanclass="code-keyword"new/spanFraction(spanclass="code-keyword"int/span.Parse(split[spanclass="code-digit"0/span]),spanclass="code-digit"1/span);}....../pre/code

德鲁Noakes

×评论会员:游客 时间:2011/12/05您好,这难道不是一个很好的机会,使用结构类型,而不是一类?你的类型值类型的语义,而不是引用类型。如果你想离开此为一类,也许你会封。像这样的基本类型,应优化内存和性能尽可能此外,考虑允许非整数类型,如float和double的分​​数。0.7/3仍然比0.23333333更精确,但你可以代表这种情况下,作为一个整数分工。您可能还包括显式转换经营整型。保持良好的工作,并感谢张贴。德鲁Noakesimgsrc=http://www.orcode.com/upimg/2011_12_05_18_52_51_0.gif

尼古拉斯捷潘

×评论会员:游客 时间:2011/12/05德鲁Noakes写道:"这难道不是一个很好的机会,使用结构类型,而不是一类?你的类型值类型的语义,而不是引用类型。结构不能包含显式的无参数构造函数和结构成员将自动初始化为它们的默认值。通过"结构"代替"类"新分数()将返回非法的一小部分。德鲁Noakes写道:"如果你想离开此为一类,也许你会封。像这样的基本类型,应优化内存和性能尽可能我同意。因此,像这样的基本类型应该是不可分割的一部分。Net框架imgsrc=http://www.orcode.com/upimg/2011_12_05_18_52_52_1.gif德鲁Noakes写道:另外,考虑允许非整数类型,如float和double的分​​数。0.7/3仍然比0.23333333更精确,但你可以代表这种情况下,作为一个整数分工。在这里,我不同意。分数的定义,是一个合理的数量作为一个整数(分子)除以一个非零整数(分母)编写的。关于你上面的例子,有代表性的两种选择:A)双X=0.7/3;(精度损失)B)分数x=新的分数(7,30);(无精度损失)德鲁Noakes写道:保持良好的工作,并感谢张贴Thanx为您的意见。

克里斯Vandermotten

×评论会员:游客 时间:2011/12/05尼古拉斯捷潘写道:结构不能包含显式的无参数构造函数和结构成员将自动初始化为它们的默认值。通过"结构"代替"类"新分数()将返回非法的一小部分。事实上,结构不能有明确的参数构造函数(他们确实有他们会直接)和结构领域的自动初始化为默认值时,默认构造函数"之称"。但是,这并不意味着一个结构合理,将被初始化为0/0。你可以有一个分母属性,返回1分母分母是一个字段(初始化为零)。另外,你说0/0是"非法的",但取决于您所创建的法律的。考虑double型,0.0/0.0是不是非法的,它等于double.NaN哦,和方式:作为理性的,1/2==2/4,但由于分数1/2=2/4。至少根据我的老师用的词汇。

马克 - 布鲁克斯

×评论会员:游客 时间:2011/12/05我喜欢你的测试计划......你应该释放源。至于Fraction类本身,有一个更好的这里{A}

尼古拉斯捷潘

×评论会员:游客 时间:2011/12/05马克-布鲁克斯写道:"我喜欢你的测试计划......你应该释放源。至于Fraction类本身,这里有一个更好的分数类在C#中[^]你是指类是根本错误的。在数学上,有理数是两个整数,A/B,其中B*不为零的书面的商数*因此,在这个类中的大多数方法只是没有任何意义。

马克 - 布鲁克斯

×评论会员:游客 时间:2011/12/05你在开玩笑,对不对?这一类支持无穷大(这是什么你不舒服的),但你没有使用这种能力。其余类的功能更全面的,并提供了很多事情,这个分数类没有。有理数可能是A/B,其中B!=0,但这些类都声称要分数,有没有这样的规定。

尼古拉斯捷潘

×评论会员:游客 时间:2011/12/05马克-布鲁克斯写道:你开玩笑吧?这一类支持无穷大(这是什么你不舒服的),但你没有使用这种能力。其余类的功能更全面的,并提供了很多事情,这个分数类没有。有理数可能是A/B,其中B!=0,但这些类都声称要分数,有没有这样的规定。我不是在开玩笑。前往参观图书馆,抢一些基本的数学书,教育自己。

Mackster211

×评论会员:游客 时间:2011/12/05在Wikipedia:*imgsrc=*{A3}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值