无符号大整数计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言及面向对象程序设计实验石家庄铁道大学信息学院
A 数学类
1.题目要求:
高斯消元法求解线性方程组:在线性代数中,学习过用高斯消元法求解线性方程组,用类来实现该方法,并在主函数中进行测试;
2.解题思路:
通常应用高斯消元法的时候,不会直接写出方程组的等式来消去未知数,反而会使用矩阵来计算,将其转化为行阶梯式矩阵,所以程序的算法即线性代数中的矩阵变换为行阶梯式矩阵步骤,所以用一个二维数组存放系数矩阵,一个一维数组存放解值。
3.类的结构(数据和函数);
//gauss.h
#pragma once
#include
#include
#define N 100
using namespace std;
class gauss
{
private:
double a[N][N],b[N];
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 a[N][N];
cout<<"请输入"< for (i=1;i<=n;i++) for (j=1;j<=n+1;j++) cin>>a[i][j]; double o,b[N]; for (i=1;i<=n;i++) for (j=i+1;j<=n;j++) if (fabs(a[j][i])>1e-7) { o=a[i][i]/a[j][i]; for (k=i;k<=n+1;k++) a[j][k]=a[j][k]*o-a[i][k]; } for (i=n;i>0;i--) { b[i]=a[i][n+1]/a[i][i]; for (j=i-1;j>0;j--) a[j][n+1]=a[j][n+1]-b[i]*a[j][i]; } cout<<"解得:"< for (int i=1;i<=n;i++) cout< } gauss::~gauss(void) { } //main.cpp //高斯消元法求解线性方程组.2014.6.25.魏利华 #include #include #include "gauss.h" using namespace std; void main() { int n; cout<<"请输入未知数个数:"< cin>>n; gauss m; m.setvalue(n); } 4.实现中的关键点;高斯法的编程实现 if (fabs(a[j][i])>1e-7) { o=a[i][i]/a[j][i]; for (k=i;k<=n+1;k++) a[j][k]=a[j][k]*o-a[i][k]; } for (i=n;i>0;i--) { b[i]=a[i][n+1]/a[i][i]; for (j=i-1;j>0;j--) a[j][n+1]=a[j][n+1]-b[i]*a[j][i]; } 5.自己的收获和心得体会: 编写时需细心if (fabs(a[j][i])>1e-7) 这句需要的是绝对值大于0因为要考虑系数为负数的情况,而double型判断大于0是要用一个极小数。 1.题目要求 无符号大整数计算器:C++编译器自带的四则运算对于数据的范围是有要求,对于位数很高的数据的四则运算就无能为力,例如,12378456179787565453232321218784545121123132121132178767655657与11231548785127851的和。 请用设计一个类完成无符号大整数的四则运算,加减法是必须实现的,乘除法选做。 提示:用字符串string表示数据 2.解题思路:大整数超出了存储范围,所以定义为string型,而运算时需要整数型变量,所以数据需要进行转换存入数组中,进行加法时考虑进位,为其设一个数组。进行减法要考虑借位。 3.类的结构(数据和函数); //jisuan.h #pragma once #include #include using namespace std; class jisuan { private: 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=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 a[1000],b[1000],c[1000],d[1000],e[1000]; n=str1.length(); m=str2.length(); char *p,*l; p=&str1[0]; l=&str2[0]; for ( i=0;i { a[n-i-1]=p[i]-'0'; }