C++程序设计一、二(二元一次方程与函数、函数指针)

1、解一元二次方程

1)编写一个函数,计算一元二次方程的根。

函数输入参数为一元二次方程ax2+bx+c=0的三个系数:a,b,c。函数输出为方程根的数目(2表示2个根,1表示两个相同的根,0表示无根),以及根的值。

注意:根据判别式判断函数是否有根,以及根的数目;对于非二次方程的情况做出正确的处理。

2)编写一个函数,用于输出一元二次方程及其根。要求:

在控制台输出:方程的参数、根据上面定义的函数所求解的结果(根的数目,以及每一个根);每行输出一个方程的求解结果。

3)在main函数中,对该函数进行测试。

#include
#include
#define MAXNUM 32776
using namespace std;

int IsEquation(float a)
{//判定是否为一元二次方程
	if (a == 0)
		return 0;
	else
		return 1;//是一元二次返回1,否则返回0
}
void  get_delta(float a, float b, float c,int &RootNum) {
	if (IsEquation(a)) {//二次方程的情形
		float delta = b * b - 4 * a*c;
		if (delta < 0) {
			RootNum = 0;//没有根
		}
		else if (delta > 0) {
			RootNum = 2;//两个根
		}
		else
			RootNum = 1;//一个根
	}
	else {//一次方程的情形
		if (b == 0 && c != 0)
			RootNum = 0;
		else if (b == 0 && c == 0)
			RootNum = MAXNUM;//无穷解
		else {
			RootNum = 1;//有一个解
		}
	}
}

void solve(float a, float b, float c, int RootNum) {
	//解方程函数
	float x1, x2;
	cout << "a=" << a << "\t" << "b=" << b << "\t" << "c=" << c << endl;
	if (IsEquation(a)) {
		//解二次方程
		float delta = b * b - 4 * a*c;
			if (RootNum == 2) {
				x1 = ((-b) + sqrt(delta)) / (2 * a);
				x2 = ((-b) - sqrt(delta)) / (2 * a);
				cout<<"There are two different real roots:"<> a >> b >> c;
		get_delta(a, b, c, RootNum);
		solve(a, b, c, RootNum);
		getchar();
	}	
	return 0;
}

2、编写简单的函数、函数指针

1)编写一个函数,计算\sqrt{1-x^2}。注意,自变量的取值范围是[-1,1]。

2)编写一个函数,计算x的正弦。

3)编写一个积分函数,计算一个一元函数在给定区间的定积分。要求:

A.把积分区间[a,b]以及被积函数作为参数传递给积分函数。

B.被积函数用函数指针传递给积分函数。

C.函数返回定积分的值。

#include
#include

#define INFINITE 10000//设无穷为INFINITE
#define error 0
#define PI 3.14159265
using namespace std;

double Semicircle(double x) {//第一个函数
	if (x >= -1 && x <= 1) {
		double y = sqrt(1 - x * x);
		return y;
	}
	else
		return error;
}

double Sine(double x) {//第二个函数
	double y = sin(x);
	return y;
}

long double  integral(double(*p)(double x),double x1,double x2) {//积分函数,形参为指向函数的指针与积分区间
	if (x1 > x2) {
		double temp = x1;
		x1 = x2;
		x2 = temp;
	}
	long double copieNum = (x2 - x1)*INFINITE;//划分区间份数
	long double ReprePoint = x1;//起始积分点,后面即是每个微元的积分代表点
	long double dx = (x2 - x1) / copieNum;//每个微元长
	long double IntegralNum = 0;//积分值
	while (ReprePoint <= x2) {
		IntegralNum = IntegralNum + dx * (p(ReprePoint));
		ReprePoint = ReprePoint + dx;
	}
	return IntegralNum;
}

int main() {
	double x1, x2;
	int x = 9;
	cout << "输入你的积分函数" << endl;
	cout << "1:y=sqrt(1-x*x)" << "\t" << "2: y=sin x" <<"\t"<<"3:结束"<< endl;
	double(*p)(double) = Semicircle;
	while (cin>>x&&x!=3) {
		if (x == 1)
			p = Semicircle;
		else if (x == 2)
			p = Sine;
		cout << "输入积分区间:" << endl;
		cin >> x1 >> x2;
		cout << "积分值为:" << integral(p, x1, x2) << endl;
		cout << "输入你的积分函数" << endl;
	}
	//cout << "积分值为:" << integral(p, 1, -1) << endl;
	return 0;
}

你可能感兴趣的:(实验,c++)