当前位置: 首页 > news >正文

【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】

目录😋

任务描述

相关知识

一、求平方根的迭代公式

1. 原理

2. 代码实现示例

二、绝对值函数fabs()

1. 函数介绍

2. 代码示例

三、循环语句

1. for循环

2. while循环

3. do - while循环

编程要求

测试说明

通关代码

测试结果


任务描述

本关任务:运用迭代公式,编写一个循环程序,求解出数值x的平方根。


相关知识

为了完成本关任务,你需要掌握:

  1. 求平方根的迭代公式
  2. 绝对值函数 fabs()
  3. 循环语句

一、求平方根的迭代公式

1. 原理
  • 在 C 语言中,求一个数的平方根可以使用牛顿迭代法。对于方程x^{2}=a(为要求平方根的数),设x_{n}x的第n次近似值,牛顿迭代公式为x_{n+1}=\frac{1}{2}(x_{n}+{\frac{a}{x_{n}} } )
  • 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得x_{n}越来越接近\sqrt{a}。例如,假设要求\sqrt{2},可以先取一个初始值x_{0}=1(初始值的选择会影响收敛速度,但只要不太离谱,一般都能收敛),然后根据迭代公式计算x_{1}=\frac{1}{2}(x_{0}+\frac{2}{x_{0}})=\frac{1}{2}(1+2)=1.5,再用x_{1}计算x_{2},以此类推,经过多次迭代后,就可以得到一个足够精确的的\sqrt{2}近似值。
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)会返回3.14fabs(5.0)会返回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;
    }
    在这个例子中,首先计算了num1num2的差值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);
}

测试结果

在这里插入图片描述


http://www.mrgr.cn/news/82845.html

相关文章:

  • 云安全博客阅读(二)
  • 根据中文名称首字母进行分组
  • 第1章:Go语言入门
  • 生成树之STP
  • 深入AIGC领域:ChatGPT开发者获取OpenAI API Key的实用指南
  • 各种数据库类型介绍
  • 【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
  • 每天看一个Fortran文件(9)
  • 【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
  • 【什么是MVCC?】
  • 【stm32+K210项目】基于K210与STM32协同工作的智能垃圾分类系统设计与实现(完整工程资料源码)
  • 51c自动驾驶~合集45
  • 【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
  • 【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
  • 【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
  • 安装和配置 Apache 及 PHP
  • 【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
  • [Linux]信号底层概念与操作
  • element-ui 2的级联选择器,懒加载模式下,回显已存储的子选项名称
  • js复制数据到剪切板
  • CODESYS MODBUS TCP通信(AM400PLC作为主站通信)
  • Linux 知识(2)
  • 《Vue3 七》插槽 Slot
  • 神经网络第一课
  • c++ thread线程join、detach、joinable方法
  • Java(1)入门基础