想学好c语言的四叶 2023-11-03 20:43 采纳率: 66.7%
浏览 44
已结题

C语言——完全平方数。if语句使用。

img


判断是否是完全平方数,不用sqrt形式。为什么我的12的完全平方数输入后输出是no?

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-11-03 20:47
    关注
    获得0.45元问题酬金

    我给你进行了逐行演绎解释,你输入144之后发生的事情,请查看以下代码注释内容:

    #include<stdio.h>
    int main()
    {
        int n,i=0;
        int m;
        scanf("%d",&n);   //144
        for(i=0;i<n;i++)
        {
            m=i*i;  //这个循环这里只有这一行代码,所以会一直运行到 i=143的时候,此时m=143^2
        }
    
        if(m==n) //现在,判断143^2 与 144是否相等,结果必然是no了。所以这部分代码应该放到上面循环里面,当每一次计算出新的m值就立刻与n进行比较。
        printf("%d",i);
        else
        printf("no");
    return 0;
    }
    

    然后,你的代码修改后如下:

    #include <stdio.h>
    
    int main()
    {
        int n, i = 0;
        int m;
        
        scanf("%d", &n); // 输入n的值
        
        for(i = 0; i < n; i++)
        {
            m = i * i; // 计算i的平方
            
            if(m == n) // 判断平方是否等于n
            {
                printf("%d", i);
                return 0; //当获得结果可以直接结束程序,如此也就没有else语句的必要了,这里直接删掉else
            }
        }
        
        printf("no"); //如果前面循环都跑完了最终才顺利跑到这一行,说明肯定是非完全平方数,直接打印no
        return 0;
    }
    

    另外,以下是使用if语句判断一个数是否是完全平方数的另一种写法的C语言代码供参考:

    #include <stdio.h>
    
    int isPerfectSquare(int num) {
        if (num < 0) {
            return 0;
        }
        int i = 1;
        while (num > 0) {
            num -= i;
            i += 2;
        }
        return num == 0;
    }
    
    int main() {
        int num;
        printf("请输入一个正整数: ");
        scanf("%d", &num);
        if (isPerfectSquare(num)) {
            printf("%d 是一个完全平方数\n", num);
        } else {
            printf("%d 不是一个完全平方数\n", num);
        }
        return 0;
    }
    

    在这个代码中,我们使用了一个名为isPerfectSquare的函数来判断一个数是否是完全平方数。函数中会先判断输入的数是否小于0,如果是则直接返回0。然后使用一个循环来依次减去从1开始的奇数,直到输入的数小于等于0为止。循环结束后如果数为0,则说明是完全平方数,返回1;否则不是完全平方数,返回0。

    main函数中,我们先从用户输入一个正整数,然后调用isPerfectSquare函数来判断这个数是否是完全平方数,并根据返回的结果输出相应的信息。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 请采纳用户回复 11月9日
  • 赞助了问题酬金15元 11月3日
  • 创建了问题 11月3日