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: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吗
要试着手写程序运行的结果,这样就能找出问题
引用 首个回复的兄弟 你的改动不正确改成1 我的第一个循环求值就是错误的 因为是迭代 要首先算 4*(4-1) 你一改 整个 循环都错了 囧 多谢
顶 上去啊来 个 指教下 多谢!! 我明白了 多谢 楼上的兄弟 说的有道理 这就是循环中的问题 我错了多谢!!!!!! 开头就乘了零。。。 你问的那个问题中错误在这 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 # 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: 10楼正解。
页:
[1]