以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  荤菜求助:计算s=2*2!+3*3!(2平方的阶乘加三平方的阶乘)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=45328)


--  作者:荤菜
--  发布时间:4/12/2007 2:00:00 PM

--  荤菜求助:计算s=2*2!+3*3!(2平方的阶乘加三平方的阶乘)

计算s=2*2!+3*3!(2平方的阶乘加三平方的阶乘)
我在此调用f1(用来算平方),而f1又调用f2函数(用来算阶乘,用的是递归),但为什么得不到正确的结果?
int f1(p)                  /*f1函数*/
int p;
{int y,r;
y=p*p;
r=f2(y);
return r;
}
int f2(q)               /*f2函数*/
int q;
{int y;
if(q==1||q==0)
  y=1;
  else
  y=q*f2(q-1);
  return(y);
  }
main()                      /*main函数*/
{int y;
y=f1(2)+f1(3);
printf("%d",y);
getch();
}
--  作者:elfstone
--  发布时间:4/12/2007 2:06:00 PM

--  
你这个程序最后算出的结果是不是2?


--  作者:elfstone
--  发布时间:4/12/2007 2:09:00 PM

--  
以下是引用荤菜在2007-4-12 14:00:00的发言:
计算s=2*2!+3*3!(2平方的阶乘加三平方的阶乘)
我在此调用f1(用来算平方),而f1又调用f2函数(用来算阶乘,用的是递归),但为什么得不到正确的结果?
int f1(p)                  /*f1函数*/
int p;
{int y,r;
  y=p*p;
  r=f2(y);
  return r;
  }
  int f2(q)               /*f2函数*/
  int q;
  {int y;
  if(q==1||q==0)
   y=1;
   else
   y=q*f2(q-1);
   return(y);

   }
  main()                      /*main函数*/
  {int y;
  y=f1(2)+f1(3);
  printf("%d",y);
  getch();
  }

问题出在红色那块,你有没有看出来。。。


--  作者:荤菜
--  发布时间:4/12/2007 10:26:00 PM

--  
我把他改成:
int f1(p)                  /*f1函数*/
int p;
{int y,r;
  y=p*p;
  r=f2(y);
  return r;
  }
  int f2(q)               /*f2函数*/
  int q;
  {int y;
  if(q<0)
printf("error");
else if(q==1||q==0)
   y=1;
   else
   y=q*f2(q-1);
   return(y);
   }
  main()                      /*main函数*/
  {int y;
  y=f1(2)+f1(3);
  printf("%d",y);
  getch();
  }
结果居然是-30312,没用啊!
--  作者:leona
--  发布时间:4/13/2007 2:42:00 PM

--  
在函数f1里调用f2,但f2还没有定义,
可以在f1的定义前,先定义f2

或者,在f1的定义前,对f2函数原型声明


--  作者:卷积内核
--  发布时间:4/13/2007 7:37:00 PM

--  
写的好乱,建议以后写程序按规范写,这样的程序没有多少人愿意帮你看。
--  作者:elfstone
--  发布时间:4/14/2007 12:38:00 AM

--  

以下是引用elfstone在2007-4-12 14:06:00的发言:
你这个程序最后算出的结果是不是2?


[/quote]

[quote]以下是引用elfstone在2007-4-12 14:09:00的发言:
[quote]以下是引用荤菜在2007-4-12 14:00:00的发言:
  计算s=2*2!+3*3!(2平方的阶乘加三平方的阶乘)
  我在此调用f1(用来算平方),而f1又调用f2函数(用来算阶乘,用的是递归),但为什么得不到正确的结果?
  int f1(p)                  /*f1函数*/
  int p;
  {int y,r;
   y=p*p;
   r=f2(y);
   return r;
   }
   int f2(q)               /*f2函数*/
   int q;
   {int y;
   if(q==1||q==0)
    y=1;
    else
    y=q*f2(q-1);
    return(y);

    }
   main()                      /*main函数*/
   {int y;
   y=f1(2)+f1(3);
   printf("%d",y);
   getch();
   }
[/quote]

问题出在红色那块,你有没有看出来。。。


发现我犯了个错误,你这个程序可以得到正确结果,虽说写的即不规范又不简洁,但不积跬步无以致千里,编程之道还在于多多实践,努力总会有所收获。。。

PS:你有的什么编译器?


--  作者:elfstone
--  发布时间:4/14/2007 12:41:00 AM

--  
以下是引用卷积内核在2007-4-13 19:37:00的发言:
写的好乱,建议以后写程序按规范写,这样的程序没有多少人愿意帮你看。

对新人还是要耐心一点,毕竟我们也从那个阶段走过。。。


--  作者:荤菜
--  发布时间:4/14/2007 12:51:00 AM

--  
我用的是win tc1.91,我真的很菜,我编译器都不太清楚,我只是拿到一个题目就编,我现在在自学c语言,平日里别人在玩游戏,我还在做题,我已经自学了半年了,这几天感觉难题特别多,我实在想不出,才问的,我真的很想学c语言.
--  作者:elfstone
--  发布时间:4/14/2007 1:10:00 AM

--  
以下是引用荤菜在2007-4-14 0:51:00的发言:
我用的是win tc1.91,我真的很菜,我编译器都不太清楚,我只是拿到一个题目就编,我现在在自学c语言,平日里别人在玩游戏,我还在做题,我已经自学了半年了,这几天感觉难题特别多,我实在想不出,才问的,我真的很想学c语言.

刚开始学总会遇到这样那样的问题,这么长时间你坚持下来就很不容易了,不要灰心,努力总会有所收获,编译器建议你用dev-c++,turboC个人感觉不是很好,devcpp支持标准C,短小精悍却很严谨,初学的时候多看些例程,广泛的阅读的方法很适合自学。。。


--  作者:荤菜
--  发布时间:4/14/2007 3:14:00 PM

--  
呵呵,谢谢了,先表达一下自己的决心.用dev-c++真的能得到正确的结果了吗?
--  作者:荤菜
--  发布时间:4/14/2007 5:41:00 PM

--  
终于找到原因啦,其实很简单的一个问题,却让我想了这么长的时间!!
  long int f1(p)                  /*f1函数*/
  int p;
  {int y;
  long int f2(),r;
   y=p*p;
   r=f2(y);
   return r;
   }
   long int f2(q)               /*f2函数*/
   int q;
   {long int y;
   if(q==1||q==0)
    y=1;
    else
    y=q*f2(q-1);
    return(y);
    }
   main()                      /*main函数*/
   {long int y;                /*问题出在这一步,不能写成int y;*/
   y=f1(2)+f1(3);
   printf("%ld",y);
   getch();
   }
结果是362904
--  作者:lixiaoting
--  发布时间:7/29/2007 3:58:00 PM

--  
#include<conio.h>
int f2(int q)               /*f2函数*/
{   int y;
    if(q==1||q==0)
    y=1;
    else
    y=q*f2(q-1);
    return(y);
}
int f1(int p)                  /*f1函数*/
{
    int y,r;
    y=p*p;
    r=f2(y);
    return r;
}
main()                      /*main函数*/
{  int y;
    y=f1(2)+f1(3);
    printf("%d\n",y);
}

--  作者:lixiaoting
--  发布时间:7/29/2007 3:59:00 PM

--  
#include<conio.h>
int f2(int q)               /*f2函数*/
{   int y;
    if(q==1||q==0)
    y=1;
    else
    y=q*f2(q-1);
    return(y);
}
int f1(int p)                  /*f1函数*/
{
    int y,r;
    y=p*p;
    r=f2(y);
    return r;
}
main()                      /*main函数*/
{  int y;
    y=f1(2)+f1(3);
    printf("%d\n",y);
}

--  作者:taoyx
--  发布时间:8/9/2007 11:03:00 AM

--  
hao
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
16,855.470ms