#include <stdio.h> main() { int s=1,i; printf("输入一个数:"); scanf("%d",&i); while (i>0) { s=s*i; i++; } printf("%d!=%d\n",i,s); }
我这个是输入一个数。然后求它的阶乘。为何报错误。谢谢指教。
首先,我们先来看这个
while (i>0) { s=s*i; i++; }
这个循环一直要加到 i<=0 时候,i>0为假,才停止循环...够戗的(要循环3万多次!)。这个时候的 i 早就被加得面目全非了。
所以循环的判断条件必须先要改 while(i!=0)
第二个要改的是 i++; 因为阶乘都是正数,所以 i++; 无论如何都只能得到一个正数,直到超出整形变量的范围,从-32768开始,所以,为了配合循环的判断条件,把 i++; 改为 i--;
然后再来看看这个:printf("%d!=%d\n",i,s);
首先要明确一点的是:i 的值在上面的循环中早就已经被改动了!所以这里不应该再用 i 来表示你输入的初值,你可以在循环开始之前定义一个变量,专门在这里代替 i 即可
所以整个程序应该为
#include <stdio.h> main() { int s=1,i; printf("输入一个数:"); scanf("%d",&i); m=i; /*令m=i,m 专门用来表示输入的初值,专款专用哦*/ while(i!=0) /*修改了循环的判断条件*/ { s=s*i; i--; /*为了配合循环的判断条件 i++; 改为 i--;*/ } printf("%d!=%d\n",m,s); /*用 m 在这里来代替 i*/ }
因为我看到这个帖子的时候已经是深夜了,眼困难耐,难免有说不详细或者罗嗦的地方(甚至还有错误)请多包涵
此外,还需注意一点的是:因为s为int 型的变量,所以他的范围要比long int 小很多,在输入 i 的时候要考虑下结果 s 是不是在int 允许的范围之内
[此贴子已经被作者于2004-07-23 02:47:53编辑过]