C语言刷题系列——5.使用函数判断完全平方数

使用函数判断完全平方数

  • 一)题目要求
    • ⭐1,函数接口定义:
    • ⭐2,裁判测试程序样例:
  • 二)如何判断n是否为完全平方数?
    • 铺垫1:“开平方”函数sqrt( )
    • 铺垫2:函数floor( )
    • 判断是否为完全平方数
  • 三)函数的实现

一)题目要求

⭐1,函数接口定义:

int IsSquare( int n );

其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。

⭐2,裁判测试程序样例:

#include 
#include 

int IsSquare( int n );

int main()
{
    int n;
    scanf("%d", &n);
    if ( IsSquare(n) ) printf("YES\n");
    else printf("NO\n");

    return 0;
}

/* 你的代码将被嵌在这里 */

二)如何判断n是否为完全平方数?

铺垫1:“开平方”函数sqrt( )

所需的头文件:

#include

原型

double sqrt(double x);
//注意返回值为double

铺垫2:函数floor( )

所需的头文件:

#include

原型:

double floor  (double x); 

功能:“下取整”,即取不大于x的最大整数(类似数学中的[ x ])

判断是否为完全平方数

可以先求出n的平方根,然后看它是否为整数,即用一个int型变量c存储sqrt(n)四舍五入后的整数,然后判断c*c是否等于n。

#include
int IsSquare( int n )
{
    int c = floor(sqrt(n)+0.5);
    if(c*c == n)
        return 1;
    else
        return 0;
}

你可能会问:可不可以这样写↓ ?

#include
int IsSquare( int n )
{
    if(sqrt(n)== floor(sqrt(n)) 
        return 1;
    else
        return 0;
}


→直接判断 sqrt(n)是否为整数

理论上当然没问题,但这样写不保险,因为浮点数的运算(和函数)有可能存在误差。

假设在经过大量计算后,由于误差的影响,整数1变成了0.9999999999,floor的结果会是0而不是1。为了减小误差的影响,一般改成四舍五入,即 floor(x+0.5)。如果难以理解,可以想象成在数轴上把一个单位区间往左移动0.5个单位的距离。floor(x)等于1的区间为[1,2),而floor(x+0.5)等于1的区间为[0.5,1.5)

三)函数的实现

(这里只是为了方便查阅,前面是有这段代码的)

#include
int IsSquare( int n )
{
    int c = floor(sqrt(n)+0.5);
    if(c*c == n)
        return 1;
    else
        return 0;
}

你可能感兴趣的:(c语言,算法,程序人生,开发语言,学习方法)