XDuo 发表于 2019-12-27 17:20:44

小白求解答

/*输入一个小于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:29:04

我觉得可能是%d的问题,你输出的结果取整了,你试试%f看看行不行。我也是新手,一起加油

XDuo 发表于 2019-12-27 17:33:35

啊,好像因为权限问题(还是我不会使用?不知道怎么上传图片),我没办法上传运行错误结果的图片,现在我重新运行了几次,可以成功正常运行了,以上代码没有修改

sunrise085 发表于 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;
}

XDuo 发表于 2019-12-27 17:34:09

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

好的,加油

jackz007 发表于 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

XDuo 发表于 2019-12-27 17:36:52

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

哦哦,好的,我会注意的,谢谢

sunrise085 发表于 2019-12-27 17:37:29

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

你的代码是有问题的。
若是第一次输入数据符合要求,可以直接出结果。若第一次输入不符合要求,会进入if…else…进行第二次输入,但是若第二次输入仍然不符合要求,则会按照第二次输入的数据进行计算。应该把中键判断是否输入符合要求的部分放入循环中,知道输入符合要求才能出循环。

XDuo 发表于 2019-12-27 17:43:32

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

啊,不知道我理解的对不对哈,就是要把中间if...else if...语句放在一个循环里面吗?

XDuo 发表于 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”,和我想要的结果不一样

sunrise085 发表于 2019-12-27 17:58:57

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

我帮你修改了。程序在上面。你看看吧

XDuo 发表于 2019-12-28 14:42:00

sunrise085 发表于 2019-12-27 17:58
我帮你修改了。程序在上面。你看看吧

感谢感谢
页: [1]
查看完整版本: 小白求解答