鱼C论坛

 找回密码
 立即注册
查看: 2499|回复: 10

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

[复制链接]
发表于 2013-11-1 16:27:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 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;

        }

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-1 16:28:23 | 显示全部楼层
顶下先 求高手解释 打印结果不对啊  貌似我的程序逻辑上没错 囧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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吗   

要试着手写程序运行的结果,这样就能找出问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-11-1 17:03:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-1 19:25:55 | 显示全部楼层
引用 首个回复的兄弟 你的改动不正确  改成1 我的第一个循环求值就是错误的 因为是迭代 要首先算 4*(4-1) 你一改 整个 循环都错了 囧 多谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-1 19:26:26 | 显示全部楼层
顶 上去啊  来 个 指教下 多谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-1 19:31:26 | 显示全部楼层
我明白了 多谢 楼上的兄弟 说的有道理 这就是循环中的问题 我错了  多谢!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-1 20:23:19 | 显示全部楼层
开头就乘了零。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-6 18:29:00 | 显示全部楼层
10楼正解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 08:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表