【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);
}

测试结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Three.js 创建动态粒子效果

今天&#xff0c;带大家使用粒子实现一个粒子飞毯的效果&#xff0c;我们先来看一下效果。 实现 初始化场景 首先创建一个场景&#xff0c;所有 3D 对象都会被添加到这个场景中。 const scene new THREE.Scene();相机和渲染器 配置相机和渲染器来捕捉和显示场景。 相机…

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World 2025/1/3 14:06 百度&#xff1a;android studio helloworld android studio hello world kotlin helloword kotlin 串口 no run configurations added android studio no run configurations added 1、…

c#使用SevenZipSharp实现压缩文件和目录

封装了一个类&#xff0c;方便使用SevenZipSharp&#xff0c;支持加入进度显示事件。 双重加密压缩工具范例&#xff1a; using SevenZip; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.…

Ubuntu 20.04安装gcc

一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…

网络协议安全的攻击手法

1.使用SYN Flood泛洪攻击&#xff1a; SYN Flood(半开放攻击)是最经典的ddos攻击之一&#xff0c;他利用了TCP协议的三次握手机制&#xff0c;攻击者通常利用工具或控制僵尸主机向服务器发送海量的变源端口的TCP SYN报文&#xff0c;服务器响应了这些报文后就会生成大量的半连…

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

鸿蒙的APP真机调试以及发布

目录&#xff1a; 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 &#xff08;1&#xff09;在File->Project Structure->Project->Signing Configs中进行登录。(未…

H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测

H7-TOOL详细介绍&#xff08;含操作手册&#xff09;&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-…

SpringMVC(一)配置

目录 引入 第一章&#xff1a;Java web的发展历史 一、Model I和Model II 1.Model I开发模式 2.Model II开发模式 二. MVC模式 第二章&#xff1a;SpringMVC的入门案例 搭建SpringMVC的入门程序 1.创建新项目 2.等待加载导入坐标 3.处理xml文件和其他 导入tomcat 运…

Linux驱动开发 gpio_get_value读取输出io的电平返回值一直为0的问题

当时gpio子系统进行读取时返回必定是0 因此&#xff0c;首先必须使用platform驱动来管理gpio和pinctrl子系统&#xff0c;然后如果按照正点原子所教的设备树引脚设置为0x10B0则会导致读取到的电平值为0。 解决方法&#xff1a; 将设备树中的引脚设置为 pinctrl_gpioled: gpio…

uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端

采用 uniapp-vue3 实现, 是一款带有丝滑动画效果的单选框组件&#xff0c;提供点状、条状的动画过渡效果&#xff0c;支持多项自定义配置&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&…

Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s

前言&#xff1a;纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 官方文档…

倾斜摄影相机在不动产确权登记和权籍调查中的应用

一、项目背景 1.1 项目背景 为贯彻落实中央、国务院关于实施乡村振兴战略、关于“扎实推进房地一体的农村集体建设用地和宅基地使用权确权登记颁证&#xff0c;完善农民闲置宅基地和闲置农房政策&#xff0c;探索宅基地所有权、资格权、使用权‘三权分置’”的要求&#xff0…

计算机网络 (22)网际协议IP

一、IP协议的基本定义 IP协议是Internet Protocol的缩写&#xff0c;即因特网协议。它是TCP/IP协议簇中最核心的协议&#xff0c;负责在网络中传送数据包&#xff0c;并提供寻址和路由功能。IP协议为每个连接在因特网上的主机&#xff08;或路由器&#xff09;分配一个唯一的IP…

网络安全测评技术与标准

18.1 概况 1&#xff09;概念 &#xff1a;指参照一定的标准规范要求&#xff0c;通过一系列的技术和管理方法&#xff0c;获取评估对象的网络安全状况信息&#xff0c;对其给出相应的网络安全情况综合判定。 网络安全测评对象通常包括信息系统的组成要素或信息系统自身。 2…

5个不同类型的mysql数据库安装

各种社区版本下载官方地址&#xff1a;MySQL :: MySQL Community Downloads 一、在线YUM仓库&#xff08;Linux&#xff09; 选择 MySQL Yum Repository 选择对应版本下载仓库安装包&#xff08;No thanks, just start my download.&#xff09; 下载方法1&#xff1a;下载到本…

Lua开发环境如何安装?保姆级教程

大家好&#xff0c;我是袁庭新。Lua开发环境如何安装搭建&#xff1f;这套篇文章帮你搞定&#xff5e; CentOS 7系统默认已经安装了Lua语言环境&#xff0c;因此可直接运行Lua代码。可以使用以下命令查看当前系统中默认自带的Lua版本。 # 查看系统默认自带的Lua版本 [rootloc…

Linux 系统搭建网络传输环境汇总

Ubuntu 系统搭建 TFTP 服务器 1. 创建 /home/username/workspace/tftp 目录并赋予最大权限&#xff0c;username 是自己用户名 sudo mkdir -p /home/username/workspace/tftp sudo chmod 777 /home/username/workspace/tftp 2. 安装 tftp-hpa&#xff08; 客户端软件包&#x…

深度学习中CUDA环境安装教程

首先说明&#xff0c;本人是小白&#xff0c;一次安装&#xff0c;可能有不对的地方&#xff0c;望包含。 安装CUDA 因为我们是深度学习&#xff0c;很多时候要用到gpu进行训练&#xff0c;所以我们需要一种方式加快训练速度。 通俗地说&#xff0c;CUDA是一种协助“CPU任务分…

基于word2vec的推荐系统

基于word2vec的推荐系统 可用于推荐商品&#xff0c;图书&#xff0c;电影&#xff0c;课程&#xff0c;旅游景点&#xff0c;音乐… 效果 网址点我跳转 一、word2vec简介 Word2Vec是一种词向量表示方法&#xff0c;是在自然语言处理领域&#xff08;NLP&#xff09;的神经…