⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ep10_4.cpp

📁 这里有大量的c语言习题呢!真的是题海哦
💻 CPP
字号:
/*10.4	在【例8.9】中,当被积函数中出现被0除现象时,应抛出一个异常,但不退出主函数,
可进行下一个定积分计算。*/
#include<iostream>
#include<cmath>
#include<stdexcept>//采用C++标准库中的异常类
#include<string>
#include<iomanip>
using namespace std;
const double DefaultOverflow=1.0E10;

class Simpson{
	double Intevalue,a,b;//Intevalue积分值,a积分下限,b积分上限
public:
	virtual double fun(double x)=0;//被积函数声明为纯虚函数
	Simpson(double ra=0,double rb=0){
		a=ra;
		b=rb;
		Intevalue=0;
	}
	void Integrate(){
		double dx;
		int i;
		dx=(b-a)/2000;
		Intevalue=fun(a)+fun(b);
		for(i=1;i<2000;i+=2)Intevalue+=4*fun(a+dx*i);
		for(i=2;i<2000;i+=2)Intevalue+=2*fun(a+dx*i);
		Intevalue*=dx/3;
	}
	void Print(){cout<<"积分值="<<Intevalue<<endl;}
};
class A:public Simpson{
public:
	A(double ra,double rb):Simpson(ra,rb){};
	double fun(double x){
		double temp;
		temp=1/x;
		if(fabs(temp)<DefaultOverflow) return temp;
		else{
			string eObj="因被积函数发生算术溢出(被0除),跳过";
			throw overflow_error(eObj);
		}
	}
};
class B:public Simpson{
public:
	B(double ra,double rb):Simpson(ra,rb){};
	double fun(double x){
		double temp;
		temp=exp(x);
		if(fabs(temp)<DefaultOverflow) return temp;
		else{
			string eObj="因被积函数发生算术溢出(被0除),跳过";
			throw overflow_error(eObj);
		}
	}
};
int main(){
	A a1(0.0,3.1415926535/2.0);
	Simpson *s=&a1;
	try{
		s->Integrate();
		s->Print();
	}//动态
	catch(overflow_error &excp){
		cerr<<excp.what()<<endl;
	}
	B b1(0.0,1.0);
	try{
		b1.Integrate();
		b1.Print();
	}//静态
	catch(overflow_error &excp){
		cerr<<excp.what()<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -