无符号大整数计算器_第1页
无符号大整数计算器_第2页
无符号大整数计算器_第3页
无符号大整数计算器_第4页
无符号大整数计算器_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言及面向对象程序设计实验 石家庄铁道大学信息学院 A 数学类1. 题目要求:高斯消元法求解线性方程组:在线性代数中,学习过用高斯消元法求解线性方程组,用类来实现该方法,并在主函数中进行测试;2. 解题思路:通常应用高斯消元法的时候,不会直接写出方程组的等式来消去未知数,反而会使用矩阵来计算,将其转化为行阶梯式矩阵,所以程序的算法即线性代数中的矩阵变换为行阶梯式矩阵步骤,所以用一个二维数组存放系数矩阵,一个一维数组存放解值。3. 类的结构(数据和函数);/gauss.h#pragma once#include <cmath>#include <iostream>#de

2、fine N 100using namespace std;class gaussprivate:double aNN,bN;public:gauss(void);void setvalue(int );gauss(void);/gauss.cpp#include "gauss.h"gauss:gauss(void)void gauss:setvalue(int n)int i,j,k;double aNN;cout<<"请输入"<<n<<"方程组(未知数系数及等号右边常数):"<<en

3、dl; for (i=1;i<=n;i+)for (j=1;j<=n+1;j+) cin>>aij;double o,bN;for (i=1;i<=n;i+)for (j=i+1;j<=n;j+)if (fabs(aji)>1e-7) o=aii/aji; for (k=i;k<=n+1;k+) ajk=ajk*o-aik;for (i=n;i>0;i-)bi=ain+1/aii;for (j=i-1;j>0;j-)ajn+1=ajn+1-bi*aji;cout<<"解得:"<<endl;f

4、or (int i=1;i<=n;i+) cout<<bi<<endl;gauss:gauss(void)/main.cpp/高斯消元法求解线性方程组.2014.6.25.魏利华#include <iostream>#include <cmath>#include "gauss.h"using namespace std;void main()int n;cout<<"请输入未知数个数:"<<endl; cin>>n; gauss m; m.setvalue(n);

5、4. 实现中的关键点;高斯法的编程实现 if (fabs(aji)>1e-7) o=aii/aji; for (k=i;k<=n+1;k+) ajk=ajk*o-aik;for (i=n;i>0;i-)bi=ain+1/aii;for (j=i-1;j>0;j-)ajn+1=ajn+1-bi*aji;5. 自己的收获和心得体会:编写时需细心if (fabs(aji)>1e-7)这句需要的是绝对值大于0因为要考虑系数为负数的情况,而double型判断大于0是要用一个极小数。1. 题目要求无符号大整数计算器:C+编译器自带的四则运算对于数据的范围是有要求,对于位数很高

6、的数据的四则运算就无能为力,例如,12378456179787565453232321218784545121123132121132178767655657与11231548785127851的和。请用设计一个类完成无符号大整数的四则运算,加减法是必须实现的,乘除法选做。 提示:用字符串string表示数据2.解题思路:大整数超出了存储范围,所以定义为string型,而运算时需要整数型变量,所以数据需要进行转换存入数组中,进行加法时考虑进位,为其设一个数组。进行减法要考虑借位。3.类的结构(数据和函数);/jisuan.h#pragma once#include<iostream>

7、;#include<string>using namespace std;class jisuanprivate:string str1,str2;public:jisuan(void);jisuan(string ,string );void setvalues(string ,string );void yunsuan(string,string);jisuan(void);/jisuan.cpp#include "jisuan.h"jisuan:jisuan(void)jisuan:jisuan(string s,string t)str1=s; str2

8、=t;void jisuan:setvalues(string s,string t)str1=s; str2=t;void jisuan:yunsuan(string ,string)int i,n,m,k=0,j; int a1000,b1000,c1000,d1000,e1000; n=str1.length(); m=str2.length(); char *p,*l; p=&str10; l=&str20; for ( i=0;i<n;i+) an-i-1=pi-'0' for ( i=0;i<m;i+) bm-i-1=li-'0&

9、#39; if(m<n) c0=0;for(i=m;i<n;i+)bi=0;for(i=1;i<n;i+) if(ai-1+bi-1+ci-1>=10)ci=1; else ci=0; if(an-1+cn-1+bn-1>=10)an=0;bn=0;cn=1; for(i=0;i<=n;i+) di=(ci+ai+bi)%10); cout<<"两数之和为;" for(i=n;i>=0;i-) cout<<di<<"" cout<<endl;else for(i=0

10、;i<n;i+) di=(ci+ai+bi)%10); cout<<"两数之和为;" for(i=n-1;i>=0;i-) cout<<di<<"" cout<<endl; else c0=0;for(i=n;i<m;i+)ai=0;for(i=1;i<m;i+) if(ai-1+bi-1+ci-1>=10)ci=1; else ci=0; if(am-1+cm-1+bm-1>=10)am=0;bm=0;cm=1; for(i=0;i<=m;i+) di=(ci+a

11、i+bi)%10); cout<<"两数之和为;" for(i=m;i>=0;i-) cout<<di<<"" cout<<endl;else for(i=0;i<m;i+) di=(ci+ai+bi)%10); cout<<"两数之和为;" for(i=m-1;i>=0;i-) cout<<di<<"" cout<<endl; if(n>=m) for(i=m;i<n;i+) bi=0;

12、for(i=0;i<n;i+) if(ai<bi) ei=(ai+10-bi)%10; ai+1=ai+1-1; else if(ai>=bi) ei=ai-bi; cout<<"两数之差为:" k=n-1; while(ek=0) j=k-1; k-; if(en-1!=0) continue; for(i=j;i>=0;i-) cout<<ei<<"" if(en-1!=0)for(i=n-1;i>=0;i-) cout<<ei<<"" co

13、ut<<endl; else for(i=n;i<m;i+) ai=0; for(i=0;i<m;i+) if(ai>bi) ei=(bi+10-ai)%10; bi+1=bi+1-1; else if(ai<=bi) ei=bi-ai; cout<<"两数之差为:" cout<<"-" k=m-1; while(ek=0) j=k-1; k-; if(em-1!=0) continue; for(i=j;i>=0;i-) cout<<ei<<""

14、; if(em-1!=0)for(i=m-1;i>=0;i-) cout<<ei<<"" cout<<endl; jisuan:jisuan(void)/main.cpp/无符号大整数计算器.2014.6.24魏利华#include"jisuan.h"#include<iostream>#include<string>using namespace std;void main()string str1,str2;jisuan s;cout<<"请输入第一个数:&quo

15、t;<<endl;cin>>str1;cout<<"请输入第二个数"<<endl; cin>>str2;s.setvalues(str1,str2);s.yunsuan(str1,str2);4. 实现中的关键点; an-i-1=pi-'0' /实现string型到整数的转换。 减法和加法的实现。 输出时去去掉补得0。5. 自己的收获和心得体会 要考虑到每一种情况,一个很难的题由许多函数实现,写一个功能调试一个1.题目要求三角形类别判断:定义点(point)类,包含点的坐标x和y,再定义三角形(tr

16、iangle)类,在三角形类中能对三角形类别,首先判断输入的三个点能否构成三角形,然后判断是否为等腰三角形、等边三角形、直角三角形、等腰直角三角形。2.解题思路:按规定建立相应的类,判断形状需要边长的长度,可以在以前写的线段类中改动,加入判断的形状语句3.类的结构(数据和函数);/point.h#pragma onceclass triangle;class pointprivate:double x,y;public:point(void);point(double x,double y);void setvalues(double a,double b);friend triangle;p

17、oint(void);/point.cpp#include "point.h"point:point(void)point:point(double a,double b)x=a; y=b;void point:setvalues(double a,double b)x=a;y=b;point:point(void)/triangle.h#include"point.h"#include<iostream>#include<cmath>using namespace std;#pragma onceclass trianglepr

18、ivate:point point1,point2,point3;public:triangle(void);triangle(point &,point &,point &);double bianchang(point &,point &,point&); double getl(point &r,point&s);double getm(point &s,point&t);double getn(point &r,point&t);void istriangle(double l,double

19、 m,double n);triangle(void);/triangle.cpp#include "triangle.h"triangle:triangle(void)triangle:triangle(point &r,point&s,point &t)point1=r;point2=s;point3=t;double triangle:getl(point &r,point &s)double l;l=sqrt(s.x-r.x)*(s.x-r.x)+(s.y-r.y)*(s.y-r.y);return l;double tria

20、ngle:getm(point &s,point &t)double m;m=sqrt(s.x-t.x)*(s.x-t.x)+(s.y-t.y)*(s.y-t.y);return m;double triangle:getn(point &r,point &t)double n;n=sqrt(t.x-r.x)*(t.x-r.x)+(t.y-r.y)*(t.y-r.y);return n;void triangle:istriangle(double l,double m,double n)if(l+m>n)&&(l+n>m)&

21、&(m+n>l)cout<<"可以构成三角形"<<endl; if (l=m)|(l=n)|(m=n) if(l=m&&m=n) cout<<"构成等边三角形"<<endl;else if(l*l=m*m+n*n)|(m*m=n*n+l*l)|(n*n=l*l+m*m) cout<<" 构成等腰直角三角形"<<endl; else cout<<"构成等腰三角形"<<endl;if(l!=m)

22、&&(l!=n)&&(m!=n)&&(l*l=m*m+n*n)|(m*m=n*n+l*l)|(n*n=l*l+m*m) cout<<"构成直角三角形"<<endl;elsecout<<"不可以构成三角形"<<endl;triangle:triangle(void)/main.cpp/三角形类别判断.2014.6.23魏利华#include"point.h"#include"triangle.h"#include<i

23、ostream>using namespace std;void main()point r,s,t;double x,y;cout<<"请输入第一个点的坐标"cin>>x>>y;r.setvalues(x,y);cout<<"请输入第二个点的坐标"cin>>x>>y;s.setvalues(x,y);cout<<"请输入第三个点的坐标"cin>>x>>y;t.setvalues(x,y);triangle l,e;cou

24、t<<"三边长度为:"<<l.getl(r,s)<<" "<<l.getm(s,t)<<" "<<l.getn(r,t)<<endl;l.istriangle(l.getl(r,s),l.getm(s,t),l.getn(r,t);4.实现中的关键点;友元类的用法,逻辑判断的严密性5.自己的收获和心得体会:在判断三角形的形状是逻辑要严密1.题目要求2014阶乘计算:由于计算机存储限制,无法直接计算并正确显示“2014!”的结果,请借助于数组正确计算并给出 “2014!”的结果。2.解题思路:用数组存储,每个元素存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论