无符号大整数计算器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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'; }

相关文档
最新文档