求x的n次幂、算数平方根和绝对值库函数的应用

本文介绍了C++中使用头文件中的四个数学库函数:pow()用于计算幂,fabs()求绝对值,sqrt()求平方根,exp()求自然对数。还展示了如何在自定义函数中应用这些函数解决方程求解和等比数列求和问题。
摘要由CSDN通过智能技术生成

以下库函数都在头文件<math.h>中 

一、求x的n次幂并返回。
pow()库函数   原型声明为:double pow(double x, double n);
pow(a, x):a的x次方,a和x是浮点数,返回值是浮点数(即使a和x都是整数,也会被转换成浮点数,因此整数运算可能损失精度,造成误差)。

二、求n的绝对值。
fabs()库函数 :浮点数(小数)x的绝对值。  原型声明为:double fabs(double x);   
abs()库函数:整数x的绝对值。    原型声明为:int ads(int x); 

三、求x的算数平方根。
sqrt()库函数   原型声明为:double sqrt(double x);

四、自然对数的x次方。 
exp()库函数:e的x次方,x是浮点数,e是自然对数的底数(一个无理数,值为2.71828....)。    原型声明为:double exp(double x);

例如:1.求a*x^2+b*x+c=0,当输入不同的a,b,c时的解 
           2.求首项为a1,公比为q的等比数列的前n想和
           3.求自然对数e的x次方
分析:

(1)若Δ>0,该方程在实数域内有两个不相等实数根

(2)若Δ=0,该方程在实数域内有两个相等实数根:

 (3)若Δ<0,该方程在复数域内有两个不相等共轭复根:

 (4)等比数列的前n项和公式:

#include<stdio.h>
#include<math.h>     // 引用<math.h>头文件,才可以调用以下的库函数 

void qiuji(double a,double b,double c)    //自定义了一个方程求解的函数 
{
	double A,B,M,N;
	A=-1*b/(2*a);
	M=b*b-4*a*c;     //用M代表Δ ;Δ=b^2-4ac 
	N=sqrt(fabs(M));    //求 Δ绝对值的算术平方根 
	B=N/(2*a);
	if(M>0){     //Δ>0,该方程在实数域内有两个不相等的实数根 
		printf("X1=%0.3lf   X2=%0.3lf\n",A+B,A-B);  
	}
	else if(M==0){     //若Δ=0,该方程在实数域内有两个相等的实数根 
		printf("X1=X2=%0.3lf\n",A);       
	}
	else {      //若Δ<0,该方程在复数域内有两个不相等的共轭复根 
		printf("X1=%0.3lf+%0.3lfi    X2=%0.3lf+%0.3lfi\n",A,B,A,B);
	}
}

void sum(int a1,int q,int n)    //自定义了一个求等比数列的函数 
{
	int s;
	s=a1*(1-pow(q,n))/(1-q);       //等比数列的前n项和公式;调用pow()库函数求q的n次方 
	printf("%d\n",s);
}

void mi(double x)    //自定义了一个求n次幂的函数 
{
	printf("%0.3lf\n",exp(x));     //调用了exp()库函数,求e的n次幂 
}

int main ()
{
	double a,b,c;
	scanf("%lf %lf %lf",&a,&b,&c);    //输入 
	qiuji(a,b,c);    //调用自定义的求解函数 
	
	int a1,q,n;
	scanf("%d %d %d",&a1,&q,&n);     //输入 
	sum(a1,q,n);   //调用求和函数 
	
	double x;
	scanf("%lf",&x);     //输入 
	mi(x);    //调用求幂函数 
	
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
利用牛顿迭代法解整数的算术平方根是一个常用数学技巧,它基于牛顿-拉弗森方法,一种用于逼近方程根的迭代算法。对于整数的算术平方根,我们通常需要找到满足 \(x^2 = n\) 的 \(x\)。 牛顿迭代法的基本思想是在已知某一点附近函数近似的情况下,通过不断地更新这个点来逼近函数的实际根。对于平方根,我们的目标函数是 \(f(x) = x^2 - n\),其中 \(n\) 是给定的正整数。我们需要找到使得 \(f(x) = 0\) 的 \(x\) 的值。 ### 步骤描述: 1. **选择初始猜测** (\(x_0\)):可以选择 \(n\) 自身作为初始猜测,因为对于大多数情况而言,这会给出一个比较接近实际平方根的起始点。 2. **迭代公式**:迭代步骤可以通过下面的公式完成: \[ x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)} \] 对于平方根计算,这意味着: \[ x_{k+1} = x_k - \frac{x_k^2 - n}{2x_k} \] 这简化为: \[ x_{k+1} = \frac{x_k + \frac{n}{x_k}}{2} \] 3. **终止条件**:当两连续的迭代结果之差小于预设的精度阈值时,停止迭代,将最后一迭代的结果视为最终的平方根估计。 ### Python 实现: ```python def newton_sqrt(n, tolerance=1e-10): if n < 0: raise ValueError("Cannot compute the square root of a negative number.") # 初始猜测可以取 n 或者设置为 1 如果不知道从哪里开始 x_k = n while True: next_x = (x_k + n / x_k) / 2 if abs(next_x - x_k) < tolerance: return next_x x_k = next_x # 示例: 16 的平方根 result = newton_sqrt(16) print(f"Square root of 16 is approximately {result}") ``` 上述代码段实现了牛顿迭代法来计算任意正整数的算术平方根,并提供了一个简单的错误处理机制来防止对负数的处理。您可以调整 `tolerance` 参数以达到所需的精确度级别。此外,这个函数也可以轻松地应用于浮点数的情况,只需稍作修改即可处理非整数值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咔拉西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值