标题:请教大神,关于c语言函数调用阶乘问题
只看楼主
chen18351163
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-9
结帖率:0
已结贴  问题点数:20 回复次数:8 
请教大神,关于c语言函数调用阶乘问题
#include<stdio.h>
double fun(int n)
{  
  double result=1.0;
  if(n<0)
return -1;
else
{
   while(n>1&&n<107)
      result*=n;
      n++;
     return result;
}
 }
viod main()
{
   int n;
scanf("%d",&n);
printf("\n%d=%lf\n",n,fun(n));
}
输入>1且<107的数时无结果。怎么解决
搜索更多相关主题的帖子: double result c语言 
2015-04-09 11:51
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
得分:5 
阶乘需要用到函数递归,你没有使用,当然得不到结果。
2015-04-09 12:02
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:5 
这跟用不用递归没关系。他的n++在循环之外,while实际是个死循环。基础还很薄弱。

重剑无锋,大巧不工
2015-04-09 12:18
chen18351163
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-9
得分:0 
回复 3楼 beyondyf
那要怎么改?
2015-04-09 16:04
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
得分:5 
这是我近期写的一个关于计算阶乘的程序:
 
程序代码:
/* 计算一个数的阶乘 */
//用两种方法来计算 0 - 12 之间 任何一个数的阶乘
//一种 循环 一种递归 
#include <stdio.h>
#include <windows.h>
long f_fact(int num);
long r_fact(int num);
void main()
{
    int num;
    printf("阶乘数计算程序!\n");
    printf("请输入0 - 12 之间任何一个数(q键退出程序):");
    while(scanf("%d",&num)==1){
    if(num<0||num>12){
    printf("不可超出范围值!请重新输入:");
    scanf("%d",&num);
    }
    else{
          printf("用for循环得出来的该数阶乘值:%d\n",f_fact(num));
          printf("用递归程序得出来该数阶乘值:%d\n",r_fact(num));
    }
    printf("请输入0 - 12 之间任何一个数(q键退出程序):");
    }
    printf("Bye!\n");
    Sleep(1500);
}
long f_fact(int num)//for 循环
{
    int fact=1,i;
    if(num==0)
    fact=1;
    else{
       for(i=1;i<=num;i++)//这里关键点是 fact初始值为1 fact的值 随着i的不断自增 也不断增加;
       fact*=i;//fact=fact*i 比如说i要自增到5 i不断的增加 而fact的初始值为1 所以就是1*2*3*4*5
    }
      return fact;
}
long r_fact(int num)//递归也是循环的一种 但这种方法 需要慎用! 
{
    long fact;
    if(num>0)
      fact=num*r_fact(num-1);
    else 
    fact=1;
    return fact;
          //递归可以理解为函数的一次次调用本身 直到某个条件满足时 停止调用 但递归有利也有弊 需要慎用.
}

个人意见 如有不明白 尽管指出

<%谦虚学习,用心做人,没有最好,只有更好!%>
2015-04-09 16:14
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:5 
加个大括号

一片落叶掉进了回忆的流年。
2015-04-09 16:14
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
得分:0 
这是我帮你改了一下的源代码:
程序代码:
#include<stdio.h>
#include<conio.h>
long fun(int n);
void main()
{
   int n;
   printf("请输入一个数值:");
   scanf("%d",&n);
   printf("\nabout %d fact =%ld\n",n,fun(n));
   getch();//暂停 查看结果
}
long fun(int n)//使用long类型
{ 
  int i; 
  long result=1;//初始化
   if(n==0)  //0的阶乘是1
    return 1;
  else{
     for(i=1;i<=n;i++)//利用for循环
       result*=i;
  }
   return result;
}

<%谦虚学习,用心做人,没有最好,只有更好!%>
2015-04-09 16:43
chen18351163
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-9
得分:0 
回复 7楼 逍风
为什么把long改成double,输出却是0啊。
2015-04-09 17:15
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
得分:0 
你把 long 改成 double 类型后 但输出格式没有变 输出可能不是你想要的 甚至直接为0 所以要注意 输出格式要与相应数据类型想匹配 否则会出现意想不到的结果

<%谦虚学习,用心做人,没有最好,只有更好!%>
2015-04-09 22:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443742-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.385072 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved