近似值

1.当1+2+3+...+x<1000,1+2+3+...+x+1>=1000,求出该x的值

代码如下:

int Fun()
{
	int tmp = 0;
	int i;
	for(i=1; ;i++)
	{
		tmp += i;
		if(tmp >= 1000)
		{
			break;
		}
	}

	printf("%d\n",tmp);

	return i-1;
}

2.用pi/4≈1-1/3+1/5-1/7+…公式求pi的近似值,直到发现某一项的绝对值小于10^-6为止,(该项不计累加)

代码如下:

double GetPi()
{
	double sum = 0;
	double n = 1;
	double m = 1;
	int flg = 1;

	while(n/m > 0.000001)//m<1000000,1e-6 
	{
		sum += flg*n/m;
		m += 2;
		flg *= -1;
	}

	return sum * 4;
}

int main()
{
	printf("%f\n",GetPi());
	return 0;
}

3.求1+2+3+…+n

在此我将提供for,while,do-while三种语句,代码如下:

int Sum(int n)
{
	int tmp = 0;
	for(int i=1;i<=n;i++)
	{
		tmp += i;
	}
	return tmp;
}

int Sum_while(int n)
{
	int tmp = 0;
	int i = 1;
	while(i<=n)
	{
		tmp += i;
		i++;
	}
	return tmp;
}

int Sum_dowhile(int n)
{
	int tmp = 0;
	int i = 1;
	do
	{
		tmp += i;//tmp = tmp + i;//有副作用
		i++;
	}while(i<=n);
	return tmp;
}

4.判断是否为素数

代码如下:

bool IsPrimer(int n)
{
	//for(int i=2;i<n;i++)//n==9,i=2
	for(int i=2;i<=sqrt((double)n);i++)
	{
		if(n%i == 0)
		{
			return false;
		}
		/*else
		{
			return true;
		}*/
	}
	return true;
}

int main()
{
	for(int i=2;i<100;i++)
	{
		if(IsPrimer(i))
		{
			printf("%d\n",i);
		}
	}
	return 0;
}

5. 若#define EPS 0.0000001,求ax^2+bx+c=0方程的根。

#define EPS 0.0000001

void Fun1(double a,double b,double c)
{
	double x1;
	double x2;
	double d = b*b-4*a*c;
	if(-EPS<=a && a<=EPS)//a == 0
	{
		x1=x2 = -c/b;//bug
		printf("%f,%f\n",x1,x2);
	}
	else//
	{
		if(d > EPS)//d > 0
		{
			x1 = (-b+sqrt(d))/(2*a);//1.25e3
			x2 = (-b-sqrt(d))/(2*a);
			printf("%f,%f\n",x1,x2);
		}
		else
		{
			if(-EPS<=d && d<=EPS)//d = 0
			{
				x1=x2 = (-b)/(2*a);
				printf("%f,%f\n",x1,x2);
			}
			else//d<0
			{
				printf("无实根\n");
			}
		}
	}
}
//该程序与下边的程序区别仅仅在于else if语句

void Fun2(double a,double b,double c)
{
	double x1;
	double x2;
	double d = b*b-4*a*c;
	if(-EPS<=a && a<=EPS)//a == 0
	{
		x1=x2 = -c/b;//bug
		printf("%f,%f\n",x1,x2);
	}
	else if(d > EPS)//d > 0
	{
		x1 = (-b+sqrt(d))/(2*a);//1.25e3
		x2 = (-b-sqrt(d))/(2*a);
		printf("%f,%f\n",x1,x2);
	}
	else if(-EPS<=d && d<=EPS)//d = 0	
	{
		x1=x2 = (-b)/(2*a);
		printf("%f,%f\n",x1,x2);
	}
	else//d<0
	{
		printf("无实根\n");
	}
}

猜你喜欢

转载自blog.csdn.net/Aspiration_1314/article/details/79567240