详细解析C语言中的开方实现

关于C语言中的开方计算,首先想到的当然是sqrt()函数,让我们先来回顾一下它的基本用法:
头文件:#include <math.h>

sqrt() 用来求给定值的平方根,其原型为:

  double sqrt(double x);

参数

x 为要计算平方根的值。

如果 x < 0,将会导致 domain error 错误,并把全局变量 errno 的值为设置为 EDOM。

返回值

返回 x 平方根。

注意,使用 GCC 编译时请加入-lm。

实例计算200 的平方根值。

#include <math.h>
main(){
  double root;
  root = sqrt(200);
  printf("answer is %f\n", root);
}

输出结果:
answer is 14.142136

题目
求整数N的开方,精度在0.001

二分法
若N大于1,则从[1, N]开始,low = 1, high = N, mid = low + (high - low) >> 1开始进行数值逼近

若N小于1,则从[N, 1]开始,low = 0, high = N, mid = low + (high - low) >> 1开始进行数值逼近

ac代码

 /**
   * 创新工厂2014年校招算法题目,求整数N的开方,精度为0.001
   */ 

  #include <stdio.h>
  #include <stdlib.h>
  #include <math.h> 

  #define ACCURACY 0.001 

  double newSqrt(double n)
  {
    double low, high, mid, tmp; 

    // 获取上下界
    if (n > 1)  {
      low = 1;
      high = n;
    } else {
      low = n;
      high = 1;
    } 

    // 二分法求开方
    while (low <= high) {
      mid = (low + high) / 2.000; 

      tmp = mid * mid; 

      if (tmp - n <= ACCURACY && tmp -n >= ACCURACY * -1) {
        return mid;
      } else if (tmp > n) {
        high = mid;
      } else {
        low = mid;
      }
    } 

    return -1.000;
  } 

  int main(void)
  {
    double n, res; 

    while (scanf("%lf", &n) != EOF) {
      res = newSqrt(n);
      printf("%lf\n", res);
    } 

    return 0;
  }
(0)

相关推荐

  • 详细解析C语言中的开方实现

    关于C语言中的开方计算,首先想到的当然是sqrt()函数,让我们先来回顾一下它的基本用法: 头文件:#include <math.h> sqrt() 用来求给定值的平方根,其原型为: double sqrt(double x); 参数 x 为要计算平方根的值. 如果 x < 0,将会导致 domain error 错误,并把全局变量 errno 的值为设置为 EDOM. 返回值 返回 x 平方根. 注意,使用 GCC 编译时请加入-lm. 实例计算200 的平方根值. #include

  • 深度解析C语言中的变量作用域、链接和存储期的含义

    在c中变量有三种性质: 1.存储期限:变量的存储期限决定了变量占用的内存空间什么时候会被释放,具有动态存储期限的变量会在所属的程序块被执行时获得内存空间,在结束时释放内存空间.具有静态存储期限的变量在程序运行的整个期间都会占用内存空间. 2.作用域:变量有块作用域也有文件作用域,结合序章第一张图可以明白块作用域是在某些程序块内起作用,文件作用域是在整个c文件之内起作用. 3.链接:链接是各个文件之间的关系,具有内部链接的变量只在本文件内起作用,具有外部链接的变量可以在不同文件内起作用.具有无链接

  • 深度解析C语言中数据的存储

    目录 前言 数据类型介绍 类型的基本归类 整型家族 浮点数家族 构造类型 指针类型 空类型 前言 在VS编译器里有release和debug两种形式,debug包含调试信息,release不包含调试信息,并会对程序进行优化 int main() { int i = 0; int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; for (i = 0; i <= 12; i++) { arr[i] = 0; printf("hehe\n"); } return

  • 解析C语言中如何正确使用const

    基本解释 const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助.虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题. 问题: const变量 & 常量为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?const int n = 5;int a[n]; 答

  • 详细谈谈C语言中动态内存

    目录 前言 1.关于动态内存的函数 1.1malloc和free函数 1.2calloc函数 1.3realloc函数 2.常见的动态内存错误 2.1对NULL指针解引用 2.2对动态内存开辟的空间越界访问 2.3 对非动态开辟内存使用free释放 2.4 使用free释放一块动态开辟内存的一部分 2.5对同一块动态内存多次释放 2.6内存泄漏 补充:为什么要引入动态内存分配 总结 前言 关于动态内存管理,可能有学习过的小伙伴,也有没有听说过的.没有听说过的小伙伴会觉得很奇怪啊,为什么要动态开辟

  • 深入解析C语言中函数指针的定义与使用

    1.函数指针的定义     函数是由执行语句组成的指令序列或者代码,这些代码的有序集合根据其大小被分配到一定的内存空间中,这一片内存空间的起始地址就成为函数的地址,不同的函数有不同的函数地址,编译器通过函数名来索引函数的入口地址,为了方便操作类型属性相同的函数,c/c++引入了函数指针,函数指针就是指向代码入口地址的指针,是指向函数的指针变量. 因而"函数指针"本身首先应该是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整形变量.字符型.数组一样,这里是指向函数.C在编译时

  • 解析C语言中位字段内存分配的问题

    C语言的位字段是个比较有意思的特性.它的目的是在一个机器字中保存多个对象(每个对象占据若干bit),从而节省内存资源,同时又避免复杂的位运算.在此不再讨论位字段的具体语法,下面将研究位字段的存储特性. 先说含有多个字段(field)的字(word)所占空间的规律--含有多个字段的字的大小是所有字段的类型中的最长的那个的倍数.但要确定究竟是最长类型的几倍则比较复杂,这要看是否需要考虑类型对齐问题(即一个字段能否跨越两个最长类型). 例1: struct word {char  field1 : 1

  • 深入解析Swift语言中的协议

    协议为方法,属性和其他要求的功能提供了一个蓝本.它只是描述了方法或属性的骨架,而不是实现.方法和属性实现还可以通过定义类,函数和枚举完成.协议的一致性是指方法或属性满足协议的要求. 语法 协议也遵循类似类,结构和枚举的语法: 复制代码 代码如下: protocol SomeProtocol {     // protocol definition } 协议在类,结构或枚举类型命名声明.单个和多个协议的声明也是可以的.如果多个协议规定,它们必须用逗号分隔. 复制代码 代码如下: struct So

  • 深入解析C语言中的内存分配相关问题

    C内存分配区域 程序代码区 存放函数体的二进制代码 全局数据区 全局变量和静态变量的存储是放在一起的.初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.常量数据存放在另一个区域里.这些数据在程序结束后由系统释放.我们所说的BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称 栈区 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似

  • 详细介绍Python语言中的按位运算符

    按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 按位与   ( bitwise and of x and y ) &  举例: 5&3 = 1  解释: 101  11 相同位仅为个位1 ,故结果为 1 按位或   ( bitwise or of x and y ) |  举例: 5|3 = 7  解释: 101  11 出现1的位是 1 1 1,故结果为 111 按位异或 ( bitwise exclusive or of x and y ) ^  举例:

随机推荐