int a = sqrt(x)。
如果x是完全平方数,则得到的a是一个正整数,且a的平方等于x。
如果x 不是完全平方数,则x开平方后会是一个小数,保存为int型就会失去精度,变小,那么a的平方就不等于x,会小于x
#include<stdio.h>
#include<math.h>
int isp(int n){
    int i = sqrt(n);  //
    if(n == i * i)    
        return 1;
    else    
        return 0;
    }
int main(){
    int max=0,n,i,j,x;
    scanf("%d",&n);
    for(i=0; i<n; i++){
        scanf("%d ", &x);
        j = isp(x);
        if(j==0 && max < x)
                max=x;
        }
    printf("%d\n", max);
    return 0;
}
为什么不能用if(n / i == i)来验证n是否为完全平方数?
举例说明,比如n=40, 开平方后约为6.3,用int型保存即为6,那么n/i也就是40/6,结果是6.67,保存为int型就是6,那么n/i==i。但40并不是完全平方数。