C++有理数运算
- 格式:doc
- 大小:44.07 KB
- 文档页数:7
⽤C++实现的有理数(分数)四则混合运算计算器实现⽬标⽤C++实现下图所⽰的⼀个console程序:其中:1、加减乘除四种运算符号分别⽤+、-、*、/表⽰, + 和 - 还分别⽤于表⽰正号和负号。
2、分数的分⼦和分母以符号 / 分隔。
3、⽀持括号和括号套括号的情形。
4、⽀持输⼊⼩数(⼩数点⽤符号 . 表⽰)和循环⼩数(循环部分起始位置⽤符号 ` 指定,⽐如:1.12`345表达的是1.12 345 345 345 ...)。
5、输⼊中:允许任意添加空⽩字符;数字中允许任意添加逗号( , )字符;⼩数点前的整数为0时允许省略0。
5、输出中间运算过程和最终运算结果。
6、计算出的最后结果如果不是整数,则采⽤既约分数形式表达,分⼦⼤于分母则采⽤带分数形式表达,带分数的分数部分⽤中括号( [ 和 ])括起来。
构建基础数据结构有理数的四则运算的本质就是两个分数(整数是分母为1的分数)的相加和相乘运算,以及分数化简运算。
因此,⾸先定义出如下表达分数的数据结构:1struct SFraction2 {3 u64 numerator;4 u64 denominator;5bool bNegative;67 SFraction() {8 numerator = 0;9 denominator = 1;10 bNegative = false;11 }1213 std::string toStr(bool bFinal = false) const14 {15 std::ostringstream oStream;16if (bNegative)17 {18 oStream << "-";19 }20if (denominator == 1)21 {22 oStream << numerator;23return oStream.str();24 }25if (!bFinal || numerator < denominator)26 {27 oStream << numerator << "/" << denominator;28return oStream.str();29 }30 u64 quotient = numerator / denominator;31 u64 remainder = numerator % denominator;32 oStream << quotient << "[" << remainder << "/" << denominator << "]";33return oStream.str();34 }35 };SFraction定义很简单,只有三个分量。
c 有理数运算课程设计一、课程目标知识目标:1. 理解有理数的概念,掌握有理数的分类和性质。
2. 掌握有理数的加减乘除运算方法,并能正确进行运算。
3. 了解有理数运算的顺序和法则,提高运算的准确性和速度。
技能目标:1. 能够运用有理数运算解决实际问题,培养运用数学知识解决实际问题的能力。
2. 能够通过实际操作和举例,总结有理数运算的规律和技巧,提高运算技巧。
3. 学会使用计算器进行有理数运算,提高计算速度和准确性。
情感态度价值观目标:1. 培养学生对数学的兴趣和热情,激发学生主动参与课堂活动的积极性。
2. 培养学生合作交流的意识,学会倾听他人意见,提高团队协作能力。
3. 培养学生严谨、细心的学习态度,养成认真检查、及时改正错误的习惯。
课程性质:本课程为七年级数学课程,旨在让学生掌握有理数运算的基本知识和技能,为后续学习打下基础。
学生特点:七年级学生已经具备一定的数学基础,对有理数的概念和运算有一定了解,但需要进一步巩固和拓展。
教学要求:教师应关注学生的个体差异,因材施教,采用多样化的教学手段,激发学生的学习兴趣,提高学生的运算能力和解决问题的能力。
同时,注重培养学生的情感态度价值观,使学生在学习过程中形成积极向上的人生态度。
通过本课程的学习,期望学生能够达到上述具体的学习成果。
二、教学内容1. 有理数的概念及分类:包括整数、分数的定义,正数、负数的概念,以及有理数的性质。
教材章节:第一章第一节《有理数的概念》2. 有理数的加减法运算:讲解加减法的运算规则,包括同号相加、异号相加、加减混合运算等。
教材章节:第一章第二节《有理数的加法和减法》3. 有理数的乘除法运算:介绍乘除法的运算规则,包括同号相乘、异号相乘、乘除混合运算等。
教材章节:第一章第三节《有理数的乘法和除法》4. 有理数的乘方和开方:讲解乘方和开方的定义及运算方法,包括正整数次幂、负整数次幂、零次幂等。
教材章节:第一章第四节《有理数的乘方和开方》5. 有理数的混合运算:分析混合运算的运算顺序和法则,通过例题讲解提高学生解决混合运算题目的能力。
课程设计报告课程设计题目:有理数运算学生姓名:阿朗专业:网络工程班级:10211301********2011年11 月24日东华理工大学一、题目:有理数运算问题描述2有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。
在C++中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。
对有理数的各种操作都可以用重载运算符来实现。
基本要求定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。
写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。
此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。
测试数据在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。
实现提示设有两个有理数a/b和c/d,则有:(1)有理数相加分子=a*d+b*c;分母=b*d(2)有理数相减分子=a*d-b*c;分母=b*d(3)有理数相乘分子=a*c;分母=b*d(4)有理数相除分子=a*d;分母=b*c优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。
对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等只需判定它们两个的分子和分母分别相等即可。
选做内容重载插入(<<)和提取(>>)运算符,使得对有理数可以直接输入输出。
设有理数输入格式为:整数1 整数2 //整数1为分子,整数2为分母有理数输出格式为:分子/分母二、问题的分析针对有理数的各种算法,首先要定义一个有理数类,在类中定义两个整型变量作为私有数据,分别存放有理数的分子和分母;其次,要对有理数进行各种不同的操作,如加、减、乘、除、判断两个有理数是否相等等各种关系运算,有理数是通过分数形式来进行各种运算的,有理数的加减乘除,并不是简单的分子与与分子相加减,分母与分母相加减,故要实现它的各种不同的运算,则要针对每种算法进行不同的操作,处理好两个有理数的分子与分母之间的运算;再次,有理数是一个可以转化为分数的数,但它还有实数的形式,所以,要定义一个函数来实现将有理数的分数形式转化为实数形式,以实现其完整性;同时当从键盘输入一个有理数的分子与分母,或者两数进行运算后,有理数之间并不是最优化的形式,分子与分母之间仍可以进行化简,所以,针对这种情况仍需要定义一个函数来使有理数的分数形式化为最简,以实现有理数的最优化。
授课类型C有理数的混合运算C科学记数法T运用能力教学目标有理数的混合运算和科学记数法教学内容有理数的混合运算1.有理数的运算级别:级别名称运算顺序第一级运算加、减第二级运算乘、除第三级运算乘方(目前)2.有理数的运算顺序:(1)先算乘方,再算乘除,最后算加减。
(2)同级运算,按照从左至右的顺序进行。
(3)如果有括号,就先算小括号里的,再算中括号里的,然后算大括号里的。
例题:例1:分析:这是有理数的加、减混合运算,若按括号顺序做加减,则通分非常麻烦。
应当把算式中的减法化成加法后,应用加法交换律重新结合,把分母为17的分数和分母为3、6的分数先分别相加,可简化计算。
例2:3 22143655314⎪⎭⎫⎝⎛-+⎪⎭⎫⎝⎛-⨯-⎪⎭⎫⎝⎛-÷-练一练(1)、(-0.75)+0.125+243+1873+⎪⎭⎫ ⎝⎛-816-⎪⎭⎫ ⎝⎛-7410(2)、3-+(-3.5)-⎪⎭⎫⎝⎛-21+()25.0--⎪⎭⎫ ⎝⎛-411. 正确运用运算律例3:计算21-49.5+10.2-2-3.5+19.解:原式=21+19+10.2-49.5-3.5-2=〔(21+19)+10.2〕+〔(-49.5-3.5)-2〕 =50.2-55=-4.8说明 运用加法的交换律、结合律,把正数和负数分别结合在一起再相加,比较简便。
说明:正确应用乘法的分配律。
2. 把小数化成分数计算:(1)、(-1.4)×1111×⎪⎭⎫⎝⎛-321×(-5.5)×74(2)、16×(-72.8)×0×⎪⎭⎫ ⎝⎛-328(3)科学记数法(1)定义:一个大于10的数记成na 10⨯的形式。
其中n a ,101<≤是正整数。
像这样的记数法叫做科学记数法。
(2)10的指数n 确定方法:①等于原数的整数位数减1;②等于小数点向右移动的位数。
(3)一般的,10的n 次幂,在1的后面有n 的0。
合肥学院计算机科学与技术系课程设计报告2009~2010学年第二期课程程序设计语言Ⅱ课程设计课程设计名称有理数运算程序学生姓名学号0904032001专业班级计科系网络工程2班指导教师何立新刘洁群2010年9月一、题目有理数运算程序:定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。
写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。
此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数.二、问题的分析对有理数进行加减乘除和比较大小,1.什么是有理数2.怎么把有理数表示出来3.怎样将有理数存储起来4.怎样能对所有的有理数进行操作5.优化函数是怎样解决和实现的6.运算后的结果是怎样存储和输出的7.首先类的具体内容三、算法的设计首先我们得明白几个问题1.无限不循环小数和开根开不尽的数叫无理数,通俗的讲整数和分数统称为有理数。
(如3,-98.11,5.72727272……,7/22都是有理数)2.数学上,有理数是两个整数的比,通常写作 a/b,这里 b 不为零。
分数是有理数的通常表达方法,而整数是分母为1的分数,当然亦是有理数。
全体有理数构成一个集合,称为有理数集。
这样我们就可以把有理数集以分数的形式存储起来,即输入两个整数,它们的比值就是有理数。
3.我们可以从整个有理数集中选择两个对象作为代表进行有理数的操作,这样就能可以将有理数抽象一个类将有理数问题抽象为两个部分,数据成员和成员函数。
把有理数放在数据成员中,在成员函数中对其进行加减乘除操作。
设有两个有理数a/b和c/d,则有:(1)有理数相加分子=a*d+b*c;分母=b*d(2)有理数相减分子=a*d-b*c;分母=b*d(3)有理数相乘分子=a*c;分母=b*d(4)有理数相除分子=a*d;分母=b*c4. 对问题分析的第四个疑问可以用重载运算符,5. 定义一个求最大公约数的函数6. 运算结果有两种存储方式,其一放在类的一个新对象中,其二放在类的私有数据中。
(1)同号两数相加,取的符号,并把绝对值.(2)绝对值不相等的异号两数相加,取绝对值的加数的符号,并用较大的绝对值较小的绝对值.互为相反数的两数相加得.(3)一个数与0相加,仍得.2.有理数的减法法则:减去一个数等于加上这个数的。
3.有理数的乘法法则:同号得,得负,并把绝对值;任何数同0相乘都得。
4.有理数的除法法则:同号得,得负,并把绝对值相乘;0除以任何一个不等于0的数,都得。
方法:1.有理数的加法法则,是进行有理数加法运算的依据,运算步骤如下:(1)先确定和的;(2)再确定和的绝对值.2.运算规律是:同号的两个数(或多个数)相加,不变,只把它们的相加即可.如(+3)+(+4)=+(3+4)=+7.(-3)+(-4)+(-13)=-(3+4+13)=-20.异号两数相加,首先要确定和的符号.取两数中绝对值的加数的符号,作为和的符号,用较大的绝对值较小的绝对值的,作为和的绝对值.如(+3)+(-4)=-(4-3)=-1.3.运用有理数加法的运算律,可以任意交换加数的位置.把交换律和结合律灵活运用,就可以把其中的几个数结合起来先运算,使整个计算过程而又不易出错.(1)同号两数相加,取相同的符号,并把绝对值相加.(2)绝对值不相等的异号两数相加,取绝对值较大的加数的符号,并用较大的绝对值减去较小的绝对值.互为相反数的两数相加得0.(3)一个数与0相加,仍得这个数.2.有理数的减法法则:减去一个数等于加上这个数的相反数。
3.有理数的乘法法则:同号得正,异号得负,并把绝对值相乘;任何数同0相乘都得0。
4.有理数的除法法则:同号得正,异号得负,并把绝对值相乘相除;0除以任何一个不等于0的数,都得0。
方法:1.有理数的加法法则,是进行有理数加法运算的依据,运算步骤如下:(1)先确定和的符号;(2)再确定和的绝对值.2.运算规律是:同号的两个数(或多个数)相加,符号不变,只把它们的绝对值相加即可.如(+3)+(+4)=+(3+4)=+7.(-3)+(-4)+(-13)=-(3+4+13)=-20.异号两数相加,首先要确定和的符号.取两数中绝对值较大的加数的符号,作为和的符号,用较大的绝对值减去较小的绝对值的差,作为和的绝对值.如(+3)+(-4)=-(4-3)=-1.3.运用有理数加法的运算律,可以任意交换加数的位置.把交换律和结合律灵活运用,就可以把其中的几个数结合起来先运算,使整个计算过程简便而又不易出错.。
高中数学会考必修公式总结大全作为高中数学的重要组成部分,会考必修公式的掌握对于学生的数学成绩至关重要。
本文将总结高中数学会考必修的公式,帮助同学们更好地理解和掌握这些知识点。
一、有理数运算公式1. 加法交换律:a+b=b+a2. 加法结合律:(a+b)+c=a+(b+c)3. 减法法则:a-b-c=a-(b+c)4. 乘法交换律:ab=ba5. 乘法结合律:(ab)c=a(bc)6. 乘法分配律:(a+b)c=ac+bc二、数列求和公式1. 等差数列求和:Sn=(a1+an)n/2或Sn=n(a1+an)/22. 等比数列求和:Sn=a1(1-q^n)/(1-q)或Sn=A1/(1-q)+An/(1-q)三、基本不等式公式1. 平均值不等式:a+b≥2√ab(当且仅当a=b时等号成立)2. 海伦-秦九韶公式:√(p(p-a)(p-b)(p-c)),其中p=(a+b+c)/2四、几何公式1. 两点之间的距离公式:点A(x1,y1),B(x2,y2),则AB的长度为|AB|=√[(x2-x1)²+(y2-y1)²]2. 向量加法、减法、数乘运算公式:(1)a=(x,y),b=(x',y')→a+b=(x+x',y+y');(2)(c,d)+a=(c+x,d+y);(3)λa=(λx,λy);(4)(a-b)·i=x-y,(a-b)·j=xj+yj;3. 圆的方程:圆的一般方程为(x-a)²+(y-b)²=r²,其中圆心坐标为(a,b),半径为r;4. 直线与圆的位置关系判断公式:d<r,则直线与圆相交;d=r,则直线与圆相切;d>r,则直线与圆相离。
五、三角函数公式高中数学会考中,三角函数是非常重要的一部分内容。
以下是一些常见的三角函数公式:1. 正弦函数(sin):y=sinx;余弦函数(cos):y=cosx;正切函数(tan):y=tanx。
综合作业报告一、试验目的、试验环境、设计思路:1:问题分析有理数是一个可以化为分数的数,例如2/3、533/920、-12/49等都是有理数,而就为无理数。
在C++中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。
对有理数的各种操作都可以用重载运算符来实现。
2:实验环境计算机wondows操作系统VC6.03:设计思路:把有理数的分子和分母放在数组中,先解决有理数的四则运算,写出优化函数,最后是有理数实数的转化;二、功能模块及结构描述(函数功能和数据结构类型的定义。
函数功能:用complex operator完成运算符的重载,事先有理数的关系计算Int zdg是进行优化函数运算Void sshow是输出函数,输出结果三、流程描述:(函数流程图)四:源代码#include <iostream>using namespace std;class Complex//类体{public:Complex();//构造函数Complex(int,int);void sshow();//输出函数void show();int Zdg(int,int);//求最大公约数Complex operator+( Complex x);//加法运算符重载Complex operator+(int x);Complex operator-( Complex x);//减法运算符重载Complex operator-(int x);Complex operator*( Complex x);//乘法运算符重载Complex operator*(int x);Complex operator/( Complex x);//除法运算符重载Complex operator/(int x);bool operator <( Complex x);//关系运算符重载bool operator <( int x);bool operator >( Complex x);bool operator >( int x);bool operator ==( Complex x);bool operator ==( int x);void compare(Complex x);//关系函数void compare(int x);private:int a[2];float p1;};Complex::Complex()//函数体的实现{cout<<"请输入一个分数:"<<endl; cin>>a[0]>>a[1];if(a[1]<0)a[0]=-a[0],a[1]=-a[1];int d=Zdg(a[0]>0?a[0]:-a[0],a[1]);a[0]=a[0]/d;a[1]=a[1]/d;}Complex::Complex(int x,int y){if(y<0)x=-x,y=-y;int d=Zdg(x>0?x:-x,y);a[0]=x/d;a[1]=y/d;}int Complex::Zdg(int x,int y){int d;while(y)d=x%y,x=y,y=d;return x;}void Complex::sshow(){p1=(float)a[0]/a[1];cout<<a[0]<<"/"<<a[1]<<"="<<p1<<endl; }void Complex::show(){if(a[1]==1)cout<<a[0];else cout<<"("<<a[0]<<"/"<<a[1]<<")";}Complex Complex::operator +( Complex x){return Complex(a[0]*x.a[1]+a[1]*x.a[0],a[1]*x.a[1]);} Complex Complex::operator +( int x){return Complex(a[1]*x+a[0],a[1]);}Complex Complex::operator -( Complex x){return Complex(a[0]*x.a[1]-a[1]*x.a[0],a[1]*x.a[1]);} Complex Complex::operator -( int x){return Complex(a[0]-a[1]*x,a[1]);}Complex Complex::operator *( Complex x){return Complex(a[0]*x.a[0],a[1]*x.a[1]);}Complex Complex::operator *( int x){return Complex(a[0]*x,a[1]);}Complex Complex::operator /( Complex x){return Complex(a[0]*x.a[1],a[1]*x.a[0]);}Complex Complex::operator /( int x){return Complex(a[0],a[1]*x);}bool Complex::operator <( Complex x){if((a[0]*x.a[1]-a[1]*x.a[0])<0)return true;else return false;}bool Complex::operator <( int x){if((a[0]-x*a[1])<0)return true;else return false;}bool Complex::operator >( Complex x){if((a[0]*x.a[1]-a[1]*x.a[0])>0)return true;else return false;}bool Complex::operator >( int x){if((a[0]-x*a[1])>0)return true;else return false;}bool Complex::operator ==( Complex x){if((a[0]*x.a[1]-a[1]*x.a[0])==0)return true;else return false;}bool Complex::operator ==( int x){if((a[0]-x*a[1])==0)return true;else return false;}void Complex::compare(Complex x){if(operator<(x)==1){show();cout<<"<";x.show();}else if(operator>(x)==1){show();cout<<">";x.show();} else if(operator==(x)==1){show();cout<<"==";x.show();} cout<<endl;}void Complex::compare(int x){if(operator<(x)==1){show();cout<<"<"<<x<<endl;}else if(operator>(x)==1){show();cout<<">"<<x<<endl;} else if(operator==(x)==1){show();cout<<"=="<<x<<endl;} cout<<endl;}int main()//主函数{Complex x,y,z(1,1);int a;cout<<"分数:X=";x.show();cout<<'\n'<<" y=";y.show();cout<<'\n'; cout<<"基本运算:"<<endl;z=x+y;cout<<"x+y=";z.show();cout<<endl;z=x-y;cout<<"x-y=";z.show();cout<<endl;z=x*y;cout<<"x*y=";z.show();cout<<endl;z=x/y;cout<<"x/y=";z.show();cout<<endl;cout<<"两分数之间的关系:"<<endl;pare(y);x.sshow ();y.sshow ();return 0;}五、使用说明:首先输入分子和分母,用空格分开,然后按回车键就可以看到结果:六、问题及解决方法问题:运算符重载时”==”的运用解决方法:运用bool,给于返回值bool operator ==( Complex x);bool operator ==( int x);五、总结:基本基本要求实现,但是程序还是不够完善,有很多地方需要改进,。