搜索
查看: 1705|回复: 18
打印 上一主题 下一主题

一个好标题,将获得更多人关注哦。求阶乘的代码

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-22 12:34:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
我要求n 的阶乘,可是1<=n<=9,折个条件要满足,而我的代码是就算我输入10,他还是能给出答案,我要的是只能是1到9的答案,输入10后无法输出答案的代码。

最佳答案

查看完整内容

你直接告诉我,上面那段代码哪些不让用,哪些你看不懂不就好了? 另外,书上那道习题的意思是,输入的数据只会在[1,9],而不是超过这个范围就一定不输出正确答案,你不用考虑超过范围这个问题
沙发
发表于 2014-4-22 12:35:00 | 只看该作者
18320012584 发表于 2014-4-22 13:33
我理解不了你说的这段话,不过我上面要提问的就是  《啊哈c思考快你一步》这本书的第四章,第四节,求和, ...

你直接告诉我,上面那段代码哪些不让用,哪些你看不懂不就好了?

另外,书上那道习题的意思是,输入的数据只会在[1,9],而不是超过这个范围就一定不输出正确答案,你不用考虑超过范围这个问题
板凳
发表于 2014-4-22 13:04:15 | 只看该作者
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>

  4. int fac(int);

  5. int main()
  6. {
  7.         int n;
  8.         scanf("%d", &n);
  9.         assert(n >= 1 && n <= 9);
  10.         printf("%d\n", fac(n));
  11.         system("pause");
  12.         return 0;
  13. }

  14. int fac(int n)
  15. {
  16.         if(n == 1)
  17.                 return 1;
  18.         return n * fac(n-1);       
  19. }
复制代码
地板
 楼主| 发表于 2014-4-22 13:05:59 | 只看该作者

不好意思,我要的是只能用while或者if语句来实现的。。。。。我只学到了while,if
5#
发表于 2014-4-22 13:08:05 | 只看该作者
18320012584 发表于 2014-4-22 13:05
不好意思,我要的是只能用while或者if语句来实现的。。。。。我只学到了while,if

那段连while if都没用,不是比你要求的更高?
6#
 楼主| 发表于 2014-4-22 13:33:53 | 只看该作者
我理解不了你说的这段话,不过我上面要提问的就是  《啊哈c思考快你一步》这本书的第四章,第四节,求和,那节内容的动手试一试的习题,如果有那道习题的答案也可以。
7#
 楼主| 发表于 2014-4-22 14:07:48 | 只看该作者
那真是谢谢你了,我被道题困恼了几天了,如果不用考虑范围的话,我早就知道答案了
8#
发表于 2014-4-22 14:51:11 | 只看该作者
9#
发表于 2014-4-22 14:51:16 | 只看该作者
10#
发表于 2014-4-22 15:20:51 | 只看该作者
本帖最后由 河蟹 于 2014-4-22 16:10 编辑

想要限制范围的话按下面的那样写就行了
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int fac(int);
  4. int main()
  5. {
  6.     int n;
  7.     printf("请输入1到9的数字:");
  8.     scanf("%d", &n);
  9.     if(n>9||n<1)
  10.     printf("对不起,你的输入超出范围!\n");
  11.     else
  12.     {

  13.        fac(n);//额,这个是多余的可以删除
  14.        printf("求得阶乘结果为:%d\n", fac(n));
  15.     }
  16.         system("pause");
  17.         return 0;
  18. }
  19. int fac(int n)
  20. {
  21.         if(n == 1)
  22.                 return 1;
  23.         return n * fac(n-1);        
  24. }
复制代码
11#
发表于 2014-4-22 15:36:26 | 只看该作者
河蟹 发表于 2014-4-22 15:20
想要限制范围的话按下面的那样写就行了

这样多算一次fac(n)
12#
发表于 2014-4-22 15:38:14 | 只看该作者
本帖最后由 河蟹 于 2014-4-23 20:31 编辑

再来一个加入了while循环,当输入超出范围时更正输入
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int fac(int);
  4. int main()
  5. {
  6.     int i=0,n;
  7.     printf("请输入1到9的数字:");
  8.     scanf("%d", &n);
  9.     do
  10.     {
  11.       if(n<=9&&n>=1)
  12.        {  
  13.          i=fac(n);
  14.          printf("求得n的阶乘结果为:%d\n",i);
  15.          
  16.        }
  17.       else
  18.       {
  19.          printf("对不起,你的输入超出范围!请重新输入:\n");
  20.          printf("请输入1到9的数字:");<span style="line-height: 1.5;">       </span>
复制代码
13#
发表于 2014-4-22 15:41:43 | 只看该作者
本帖最后由 河蟹 于 2014-4-22 15:42 编辑
rosynirvana 发表于 2014-4-22 15:36
这样多算一次fac(n)

嗯,所以后面就更正了,直接赋值的说,仔细一看,确实是我的疏忽,直接把fac()放入printf里就行了
14#
发表于 2014-4-22 15:48:20 | 只看该作者
河蟹 发表于 2014-4-22 15:41
嗯,所以后面就更正了,直接赋值的说,仔细一看,确实是我的疏忽,直接把fac()放入printf里就行了

注视的斜杠反了……
\\是无法编译的……
15#
发表于 2014-4-22 15:54:50 | 只看该作者
河蟹 发表于 2014-4-22 15:38
再来一个加入了while循环,当输入超出范围时更正输入

循环里面放scanf记得清缓冲区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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