鱼C论坛

 找回密码
 立即注册
查看: 1398|回复: 11

[已解决]小白求解答

[复制链接]
发表于 2019-12-27 17:20:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*输入一个小于1000的正数,并且要求对其进行检查是否是小于1000的正数,然后求其平方根,若平方根是小数,则显示整数部分*/

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

int main(){
    int i,k;

        printf("请输入一个小于1000的正数:");
        scanf("%d",&i);

        if(i>=1000){
                printf("请按要求输入!!\n请输入一个小于1000的正数:");
                scanf("%d",&i);
        }
        else if(i<0){
                printf("请按要求输入!!\n请输入一个小于1000的正数:");
                scanf("%d",&i);
        }

        k=sqrt((double)i);
        printf("%d的平方根是 : %d",i,k);
        return 0;
}

今天试着写书上的题目,在这一题的时候出现了一个问题,就是输入1000,还有 1001的时候,控制台显示1000(1001)的平方根是31,请问是我代码哪里不对吗?
最佳答案
2019-12-27 17:33:46
你应该把中间判断输入是否正确放在一个循环中,当输入值符合要求的时候才执行下面的计算语句。
你的程序没有循环,若两次输入数据都不符合要求,程序也会继续向下执行,计算第二次输入的值的平方根。
#include <stdio.h>
#include <math.h>

int main(){
    int i,k;

    printf("请输入一个小于1000的正数:");
    scanf("%d",&i);
    while(1){
        if(i>=1000 or i<0){
            printf("请按要求输入!!\n请输入一个小于1000的正数:");
            scanf("%d",&i);
        }
        else
            break;
    }
        k=sqrt((double)i);
        printf("%d的平方根是 : %d",i,k);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-27 17:29:04 | 显示全部楼层
我觉得可能是%d的问题,你输出的结果取整了,你试试%f看看行不行。我也是新手,一起加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-27 17:33:35 | 显示全部楼层
啊,好像因为权限问题(还是我不会使用?不知道怎么上传图片),我没办法上传运行错误结果的图片,现在我重新运行了几次,可以成功正常运行了,以上代码没有修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-27 17:33:46 | 显示全部楼层    本楼为最佳答案   
你应该把中间判断输入是否正确放在一个循环中,当输入值符合要求的时候才执行下面的计算语句。
你的程序没有循环,若两次输入数据都不符合要求,程序也会继续向下执行,计算第二次输入的值的平方根。
#include <stdio.h>
#include <math.h>

int main(){
    int i,k;

    printf("请输入一个小于1000的正数:");
    scanf("%d",&i);
    while(1){
        if(i>=1000 or i<0){
            printf("请按要求输入!!\n请输入一个小于1000的正数:");
            scanf("%d",&i);
        }
        else
            break;
    }
        k=sqrt((double)i);
        printf("%d的平方根是 : %d",i,k);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-27 17:34:09 | 显示全部楼层
百分号 发表于 2019-12-27 17:29
我觉得可能是%d的问题,你输出的结果取整了,你试试%f看看行不行。我也是新手,一起加油

好的,加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-27 17:36:18 | 显示全部楼层
本帖最后由 jackz007 于 2019-12-27 17:39 编辑

        1000、1001 的平方根确实是 31,有何不妥吗?
         30 x 30 = 900
         31 x 31 = 961
         32 x 32 = 1024
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-27 17:36:52 | 显示全部楼层
sunrise085 发表于 2019-12-27 17:33
你应该把中间判断输入是否正确放在一个循环中,当输入值符合要求的时候才执行下面的计算语句。
你的程序没 ...

哦哦,好的,我会注意的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-27 17:37:29 | 显示全部楼层
XDuo 发表于 2019-12-27 17:33
啊,好像因为权限问题(还是我不会使用?不知道怎么上传图片),我没办法上传运行错误结果的图片,现在我重 ...

你的代码是有问题的。
若是第一次输入数据符合要求,可以直接出结果。若第一次输入不符合要求,会进入if…else…进行第二次输入,但是若第二次输入仍然不符合要求,则会按照第二次输入的数据进行计算。应该把中键判断是否输入符合要求的部分放入循环中,知道输入符合要求才能出循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-27 17:43:32 | 显示全部楼层
sunrise085 发表于 2019-12-27 17:37
你的代码是有问题的。
若是第一次输入数据符合要求,可以直接出结果。若第一次输入不符合要求,会进入if ...

啊,不知道我理解的对不对哈,就是要把中间if...else if...语句放在一个循环里面吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-27 17:45:53 | 显示全部楼层
jackz007 发表于 2019-12-27 17:36
1000、1001 的平方根确实是 31,有何不妥吗?
         30 x 30 = 900
         31 x 31 = 961
...

emm...没没没,可能是我没有表达清楚,就是我想在输入i值的时候进行判断,如果大于或者等于1000,就要求重新输入,但是开始的运行结果显示 “1000(1001)的平方根是31”,和我想要的结果不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-27 17:58:57 | 显示全部楼层
XDuo 发表于 2019-12-27 17:43
啊,不知道我理解的对不对哈,就是要把中间if...else if...语句放在一个循环里面吗?

我帮你修改了。程序在上面。你看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-28 14:42:00 | 显示全部楼层
sunrise085 发表于 2019-12-27 17:58
我帮你修改了。程序在上面。你看看吧

感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表