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

news2024/12/31 5:28:06

目录😋

任务描述

相关知识

一、求平方根的迭代公式

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.coloradmin.cn/o/2267444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序猿成长之路之设计模式篇——结构型设计模式

本篇开始介绍结构型设计模式 前言 与创建型设计模式用于创建对象不同&#xff0c;结构型设计模式通过结构化的方式实现功能的扩展和解耦&#xff0c;通过对象的组合、聚合、继承和接口等机制来定义对象之间的关系&#xff0c;从而实现松耦合和灵活性。 常见的结构性设计模式&…

低代码开源项目Joget的研究——Joget8社区版安装部署

大纲 环境准备安装必要软件配置Java配置JAVA_HOME配置Java软链安装三方库 获取源码配置MySql数据库创建用户创建数据库导入初始数据 配置数据库连接配置sessionFactory&#xff08;非必须&#xff0c;如果后续保存再配置&#xff09;编译下载tomcat启动下载aspectjweaver移动jw…

数据库的概念和操作

目录 1、数据库的概念和操作 1.1 物理数据库 1. SQL SERVER 2014的三种文件类型 2. 数据库文件组 1.2 逻辑数据库 2、数据库的操作 2.1 T-SQL的语法格式 2.2 创建数据库 2.3 修改数据库 2.4 删除数据库 3、数据库的附加和分离 1、数据库的概念和操作 1.1 物理数据库…

React中最优雅的异步请求

给大家分享在React19中使用useSuspense处理异步请求为什么是被认为最优雅的解决方案 一. 传统方案 解决异步请求的方案中&#xff0c;我们要处理至少两个最基本的逻辑 正常的数据显示数据加载的UI状态 例如&#xff1a; export default function Index(){const [content, …

基于Bregman的交替方向乘子法

目录标题 ADMM方法简介Bregman散度Bregman ADMM的原理主要优势代码示例&#xff1a;各个符号的解释&#xff1a;**梯度的几何含义**&#xff1a;具体数学公式&#xff1a;**应用示例**&#xff1a;**ADMM的标准形式&#xff1a;****ADMM中的变量角色&#xff1a;****ADMM中的更…

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录 1、什么是空字符串&#xff1f;2、两个引号之间加上空格 好的&#xff0c;我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别&#xff0c;以及它们在 SQL 查询中的作用&#xff1a; 1. we_chat_union_id IS NOT NULL 含…

随机变量是一个函数-如何理解

文章目录 一. 随机变量二. 随机变量是一个函数-栗子(一对一)1. 掷骰子的随机变量2. 掷骰子的随机变量&#xff08;求点数平方&#xff09;3. 抛硬币的随机变量4. 学生考试得分的随机变量 三. 随机变量是一个函数-理解(多对一) 一. 随机变量 随机变量就是定义在样本空间上的函数…

jwt在express中token的加密解密实现方法

在我们前面学习了 JWT认证机制在Node.js中的详细阐述 之后&#xff0c;今天来详细学习一下token是如何生成的&#xff0c;secret密钥的加密解密过程是怎么样的。 安装依赖 express&#xff1a;用于创建服务器jsonwebtoken&#xff1a;用于生成和验证JWTbody-parser&#xff1…

大厂开发规范-如何规范的提交Git

多人协作开发提交代码通常是遵循约定式提交规范&#xff0c;如果严格安照约定式提交规范&#xff0c; 手动进行代码提交的话&#xff0c;那么是一件非常痛苦的事情&#xff0c;但是 Git 提交规范的处理又势在必行&#xff0c;那么怎么办呢&#xff1f; 经过了很多人的冥思苦想…

企业安装加密软件有什么好处?

加密软件为企业的安全提供了很多便利&#xff0c;从以下几点我们看看比较重要的几个优点&#xff1a; 1、数据保护&#xff1a;企业通常拥有大量的商业机密、客户数据、技术文档等敏感信息。加密软件可以对这些信息进行加密处理&#xff0c;防止未经授权的人员访问。即使数据被…

【ANGULAR网站开发】初始环境搭建

1. 初始化angular项目 1.1 创建angular项目 需要安装npm和nodejs&#xff0c;这边不在重新安装 直接安装最新版本的angular npm install -g angular/cli安装指定大版本的angular npm install -g angular/cli181.2 启动angular 使用idea启动 控制台启动 ng serve启动成功…

Python 屏幕取色工具

Python 屏幕取色工具 1.简介&#xff1a; 屏幕取色小工具‌是一种实用的软件工具&#xff0c;主要用于从屏幕上精确获取颜色值&#xff0c;非常适合设计、编程等需要精确配色的领域。这类工具通常能够从屏幕上任何区域精确提取颜色值&#xff0c;支持在整数值、RGB值、BGR值之…

宏集eX710物联网工控屏在石油开采机械中的应用与优势

案例概况 客户&#xff1a;天津某石油机械公司 应用产品&#xff1a;宏集eX710物联网工控屏 应用场景&#xff1a;钻井平台设备控制系统 一、应用背景 石油开采和生产过程复杂&#xff0c;涵盖钻井平台、采油设备、压缩机、分离器、管道输送系统等多种机械设备。这些设备通…

实验室服务器Ubuntu安装使用全流程

一、制作U盘启动盘 工具&#xff1a; 一个32G以上的U盘Rufuse镜像烧录软件下载&#xff1a;https://cn.ultraiso.net/xiazai.htmlRufus - 轻松创建 USB 启动盘https://cn.ultraiso.net/xiazai.htmlUbuntu系统镜像&#xff1a;https://ubuntu.com/download/alternative-downlo…

2-198基于Matlab-GUI的运动物体追击问题

基于Matlab-GUI的运动物体追击问题&#xff0c;定义目标航速、航线方向、鱼雷速度&#xff0c;并设置目标和鱼雷初始位置&#xff0c;根据航速和航向优化鱼雷路径&#xff0c;实现精准打击。程序已调通&#xff0c;可直接运行。 2-198基于Matlab-GUI的运动物体追击问题

实验五 时序逻辑电路部件实验

一、实验目的 熟悉常用的时序逻辑电路功能部件&#xff0c;掌握计数器、了解寄存器的功能。 二、实验所用器件和仪表 1、双 D触发器 74LS74 2片 2、74LS162 1片 3、74194 1片 4、LH-D4实验仪 1台 1.双…

UnityURP 自定义PostProcess之深度图应用

UnityURP 自定义PostProcess之深度图 前言项目Shader代码获取深度图ASE连线获取深度图 前言 在Unity URP中利用深度图可以实现以下两种简单的效果&#xff0c;其他设置参考 UnityURP 自定义PostProcess 项目 Shader代码获取深度图 Shader "CustomPost/URPScreenTintSha…

PlasmidFinder:质粒复制子的鉴定和分型

质粒&#xff08;Plasmid&#xff09;是一种细菌染色体外的线性或环状DNA分子&#xff0c;也是一种重要的遗传元素&#xff0c;它们具有自主复制能力&#xff0c;可以在细菌之间传播&#xff0c;并携带多种重要的基因(如耐药基因与毒力基因等)功能。根据质粒传播的特性&#xf…

mongodb(6.0.15)安装注意事项,重装系统后数据恢复

window10系统 上周重装了系统&#xff0c;环境变量之类的都没有了。现在要恢复。 我电脑里之前的安装包没有删除&#xff08;虽然之前也没在C盘安装&#xff0c;但是找不到了&#xff0c;所以需要重新下载安装&#xff09;&#xff0c;长下图这样。这个不是最新版本&#xff0…

【AI学习】DeepSeek-V3 技术报告学习:总体架构

翻了一下DeepSeek-V3 技术报告学习&#xff0c;太长&#xff0c;只是大概翻了一下&#xff0c;其中Multi-Token Prediction的技术就很亮眼。 摘要 本文介绍了DeepSeek-V3&#xff0c;这是一个拥有671B总参数的强大混合专家&#xff08;MoE&#xff09;语言模型&#xff0c;每…