咿咿呀呀 发表于 2013-11-1 16:27:21

C 阶乘 跟着甲鱼视频我自己学着编写的 不懂显示结果怎么是 0?纯新手求解释 谢大侠

# include <stdio.h>


int square (int x);
int factorial (int y);

int main (void)

{
        int m, n, e, f;
        int a = 2;
        int b = 3;

        m = square (a);
        n = square (b);//程序到这一步都是对的 为嘛往下就错了 囧

        e = factorial (m); //这里我单步调试为什么是垃圾值
        f = factorial (n);
    printf("%d", e + f);//为什么是零


        return 0;
}

        int square (int x)
        {
                int z;
                z = x * x;
       
                return z;
        }

        int factorial (int y)
        {
                int i;
                int q = 1;

                for(i = 0; i <= y; ++i)
                        q = q * (y - i);
                return q;

        }

咿咿呀呀 发表于 2013-11-1 16:28:23

顶下先 求高手解释 打印结果不对啊貌似我的程序逻辑上没错 囧

芐頁—无罪 发表于 2013-11-1 16:46:03

本帖最后由 芐頁—无罪 于 2013-11-1 16:52 编辑

   int factorial (int y)   
      {
                int i;
                int q = 1;

                for(i = 1; i <y; ++i)
                        q = q * (y - i);
                return q;

      }
你改成这样就OK了你之前的是因为循环开头部分与结束部分都是乘以0结果能不是0吗   

要试着手写程序运行的结果,这样就能找出问题

wh1003665041 发表于 2013-11-1 17:03:57

咿咿呀呀 发表于 2013-11-1 19:25:55

引用 首个回复的兄弟 你的改动不正确改成1 我的第一个循环求值就是错误的 因为是迭代 要首先算 4*(4-1) 你一改 整个 循环都错了 囧 多谢

咿咿呀呀 发表于 2013-11-1 19:26:26

顶 上去啊来 个 指教下 多谢!!

咿咿呀呀 发表于 2013-11-1 19:31:26

我明白了 多谢 楼上的兄弟 说的有道理 这就是循环中的问题 我错了多谢!!!!!!

yuqiuwangzi 发表于 2013-11-1 20:23:19

开头就乘了零。。。

zdzws 发表于 2013-11-2 18:48:20

你问的那个问题中错误在这   int factorial (int y)         {               int i;               int q = 1;                  for(i = 1; i <y; ++i)                         q = q * (y - i);               return q;          } 将i设置成以1开头的循环,因为++i是先+1再赋值,而i++是先赋值再+1,或者你把++i换成i++用0也行,如果先+1的话会导致最后一个循环值为y-i=0,导致结果为0

sacrifice 发表于 2013-11-2 23:05:00

# include <stdio.h>


int square (int x);
int factorial (int y);

int main (void)

{
      int m, n, e, f;
      int a = 2;
      int b = 3;

      m = square (a);
      n = square (b);//程序到这一步都是对的 为嘛往下就错了 囧

      e = factorial (m); //这里我单步调试为什么是垃圾值
      f = factorial (n);
                //printf("%d\n",e);
                //printf("%d\n",f);
    printf("%d\n", e + f);//为什么是零


      return 0;
}

      int square (int x)
      {
                int z;
                z = x * x;
      
                return z;
      }

      int factorial (int y)
      {
                int i;
                int q = 1;

                for(i = 0; i < y; ++i)//这里不能等于,否则最后y=i,结果必然为0
                        q = q * (y - i);
                return q;

      }


我改了一下,现在正确了,你注意一下我改的地方:lol:

陈小邪 发表于 2013-11-6 18:29:00

10楼正解。
页: [1]
查看完整版本: C 阶乘 跟着甲鱼视频我自己学着编写的 不懂显示结果怎么是 0?纯新手求解释 谢大侠