搜索
查看: 2570|回复: 6
打印 上一主题 下一主题

输入一个整数n(1<=n<=9),求n 的阶乘,小问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-1-26 19:06:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
输入一个整数n(1<=n<=9),求n 的阶乘
为什么第一遍数字输入后,不会显示重输,第二才会显示?


最佳答案

查看完整内容

这段代码问题很多……{:soso_e127:} 首先要认识到,计算机执行代码的顺序和你写代码的顺序是一样的,因为你先写了 scanf("%d",&n);然后才是 因此计算机照着执行,即先等待用户输入一个值,再输出“重新输入”。 而且,这里你用的是if(n=9) 如果按你的要求,即输入的值为1~9(包含1和9)的数字,那么也就是说n9这个范围内的数才是不合法的,若按n=9来做,输入1和9时就会出问题,且你没有考虑到若用户输入的第二个值仍不合法怎 ...
沙发
发表于 2014-1-26 19:06:02 | 只看该作者
本帖最后由 981013 于 2014-1-27 13:55 编辑

这段代码问题很多……{:soso_e127:}
首先要认识到,计算机执行代码的顺序和你写代码的顺序是一样的,因为你先写了
scanf("%d",&n);
然后才是

  1. printf("重新输入\n");
复制代码
因此计算机照着执行,即先等待用户输入一个值,再输出“重新输入”。
而且,这里你用的是if(n<=1||n>=9)
如果按你的要求,即输入的值为1~9(包含1和9)的数字,那么也就是说n<1||n>9这个范围内的数才是不合法的,若按n<=1||n>=9来做,输入1和9时就会出问题,且你没有考虑到若用户输入的第二个值仍不合法怎么办(此时应不断要求用户输入值,直至输入数据合法为止),因此该句应改为
  1. while(n<=1||n>=9)
复制代码
接下来一句if(1<=n<=9)
这句不管是从程序流程还是语句本身来说都没有用途,首先前面的语句已经确保1<=n<=9了。然后,C语言不支持判断一个数是否大于(等于)一个数的同时还小于(等于)另一个数(有点绕),即if(0<a<10),while(1000>=a>=99)这类语句都是不正确的,在啊哈C这里这类语句不会被当做是错误,但无论如何()内的表达式始终被认为是真,例如:
  1. while(1<=a<=99)
  2. {
  3. printf("yes\n");
  4. a++;
  5. }
复制代码

这一段不论a的值为-1,0,100,1000,50或是什么其他的数,都会永不停止的打出yes,即发生了死循环。
因此在进行这类判断时,因写成if(n>=1&&n<=9)的形式。

另外:

  1. m=m*i;
  2. i=i+1;
复制代码
可以简写成:
  1. m*=i;
  2. i++;
复制代码
最后附上完全修改完后的代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int n,m,i;
  6. i=1;
  7. m=1;
  8. scanf("%d",&n);
  9. while(n<1||n>9)
  10. {
  11. printf("重新输入\n");
  12. scanf("%d",&n);
  13. }
  14. while(i<=n)
  15. {
  16. m=m*i;
  17. i=i+1;
  18. }
  19. printf("%d\n",m);
  20. system("pause");
  21. return 0;
  22. }
复制代码


板凳
发表于 2014-1-26 22:58:40 | 只看该作者
本帖最后由 河蟹 于 2014-1-26 23:01 编辑

这是当然的事情了,你的printf语句放在scanf语句后面,相当于,如果没有输入正确数字的话,优先执行的是scanf语句。当然会要你再输入一次的说
地板
发表于 2014-1-26 23:58:47 | 只看该作者
第一遍输入数字是在第4行,之后你并没有像第8、9行那样跟着输出一个提示信息啊。
5#
 楼主| 发表于 2014-1-27 20:39:57 | 只看该作者
981013 发表于 2014-1-27 13:47
这段代码问题很多……
首先要认识到,计算机执行代码的顺序和你写代码的顺序是一样的,因为 ...

非常感谢~!!
6#
发表于 2018-10-17 00:53:37 | 只看该作者
#include <stdio.h> #include <stdlib.h> int main() { int n,m,i; i=1; m=1; scanf("%d",&n); if(n<=1||n>=9) {     printf("重新输入\n"); } else     {         while(i<=n)         {             m=m*i;             i=i+1;         }     }     printf("%d\n",m); system("pause"); return 0; }
7#
发表于 2018-10-17 00:54:04 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,m,i;
i=1;
m=1;
scanf("%d",&n);
if(n<=1||n>=9)
{
    printf("重新输入\n");
}
else
    {
        while(i<=n)
        {
            m=m*i;
            i=i+1;
        }
    }
    printf("%d\n",m);
system("pause");
return 0;
}
另一种方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表