目录😋
任务描述
相关知识
一、求平方根的迭代公式
1. 原理
2. 代码实现示例
二、绝对值函数fabs()
1. 函数介绍
2. 代码示例
三、循环语句
1. for循环
2. while循环
3. do - while循环
编程要求
测试说明
通关代码
测试结果
任务描述
本关任务:运用迭代公式,编写一个循环程序,求解出数值x的平方根。
相关知识
为了完成本关任务,你需要掌握:
- 求平方根的迭代公式
- 绝对值函数 fabs()
- 循环语句
一、求平方根的迭代公式
1. 原理
- 在 C 语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。
- 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。例如,假设要求,可以先取一个初始值(初始值的选择会影响收敛速度,但只要不太离谱,一般都能收敛),然后根据迭代公式计算,再用计算,以此类推,经过多次迭代后,就可以得到一个足够精确的的近似值。
2. 代码实现示例
- 以下是一个使用牛顿迭代法求平方根的简单函数:
在这个函数#include <stdio.h> double mySqrt(double a) { double x = 1.0; // 初始近似值 double diff; do { double new_x = 0.5 * (x + a / x); diff = new_x - x; x = new_x; } while (diff > 0.00001 || diff < -0.00001); // 精度控制 return x; } int main() { double num = 2.0; double result = mySqrt(num); printf("The square root of %lf is %lf\n", num, result); return 0; }
mySqrt
中,首先设置了初始近似值,然后在do - while
循环中,根据牛顿迭代公式计算新的近似值new_x
,计算当前近似值和新近似值的差值diff
,并更新x
。循环的终止条件是差值的绝对值小于一个给定的精度值(这里是),最后返回近似的平方根值。
二、绝对值函数
fabs()
1. 函数介绍
fabs()
函数定义在<math.h>
头文件中,它用于计算一个浮点数的绝对值。例如,fabs(-3.14)
会返回,fabs(5.0)
会返回。这个函数在很多数值计算场景中都很有用,比如在比较两个浮点数的差值是否小于某个精度值时,需要先计算差值的绝对值。2. 代码示例
- 以下是一个简单的示例,展示了
fabs()
函数的使用:在这个例子中,首先计算了#include <stdio.h> #include <math.h> int main() { double num1 = -7.5; double num2 = 3.2; double diff = num1 - num2; double abs_diff = fabs(diff); printf("The absolute difference between %lf and %lf is %lf\n", num1, num2, abs_diff); return 0; }
num1
和num2
的差值diff
,然后使用fabs()
函数计算了差值的绝对值abs_diff
,最后将结果输出。
三、循环语句
1.for
循环
- 语法和基本原理
for
循环的基本语法是for(初始化表达式; 条件表达式; 更新表达式)
。其中,初始化表达式用于初始化循环变量,一般在循环开始时执行一次;条件表达式用于判断循环是否继续执行,只要条件为真(非零),循环就会继续;更新表达式用于在每次循环体执行后更新循环变量。- 例如,下面的
for
循环用于打印从到的数字:其中,#include <stdio.h> int main() { for (int i = 1; i <= 5; i++) { printf("%d ", i); } printf("\n"); return 0; }
int i = 1
是初始化表达式,定义并初始化了循环变量为;i <= 5
是条件表达式,只要小于等于,循环就会继续;i++
是更新表达式,每次循环后的值会增加。循环体printf("%d ", i);
会在每次循环时执行,打印出当前的值。
2.while
循环
- 语法和基本原理
#include <stdio.h> int main() { int i = 1; int sum = 0; while (i <= 100) { sum += i; i++; } printf("The sum of integers from 1 to 100 is %d\n", sum); return 0; }
while
循环的语法是while(条件表达式)
。只要条件表达式为真(非零),循环体就会一直执行。它与for
循环的主要区别在于while
循环没有专门的初始化和更新部分,这些操作需要在循环体外部或内部手动完成。- 例如,下面是一个使用
while
循环计算到的整数和的程序:
- 在这里,首先在循环体外部初始化了循环变量和累加和变量
sum = 0
。然后在while
循环中,只要i <= 100
条件为真,就会执行循环体。循环体中先将i
累加到sum
中,然后更新i
的值(i++
)。
3.do - while
循环
- 语法和基本原理
do - while
循环的语法是do{循环体}while(条件表达式);
。它与while
循环的不同之处在于,do - while
循环先执行一次循环体,然后再判断条件表达式。这意味着循环体至少会执行一次。- 例如,下面是一个使用
do - while
循环来验证用户输入是否为正数的程序:在这个例子中,首先会执行一次#include <stdio.h> int main() { int num; do { printf("Please enter a positive number: "); scanf("%d", &num); } while (num <= 0); printf("You entered a positive number: %d\n", num); return 0; }
do
后面的循环体,提示用户输入一个正数并读取用户输入。然后判断num <= 0
这个条件,如果为真,就会再次执行循环体,要求用户重新输入,直到用户输入一个正数为止。
编程要求
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;
注意:不能直接用平方根公式/函数求解本题!
测试说明
平台会对你编写的代码进行测试:
测试输入:
2
预期输出:
1.414214
测试输入:
36
预期输出:
6.000000
开始你的任务吧,祝你成功!
通关代码
/*1.编程实现:求一个数x的平方根*/
#include "stdio.h"
main(){
double x,x0,x1,x2;
scanf("%lf",&x);
x0=x/2;
x1=(x0+x/x0)/2;
x2=x1-x0;
if(x2<0)x2=-x2;
/************************begin***********************/
while(x2 >= 1e-5){
x0 = x1;
x1 = (x0 + x/x0)/2;
x2 = x1 - x0;
if(x2<0){x2 = -x2;}
}
/************************end************************/
printf("键盘输入的该数字的平方根是%lf",x1);
}