程序会输出负数的原因是,在这个程序中你没有对每次运算的结果进行检查,因此当乘积超出了long类型的最大值时,就会产生溢出,导致结果为负数。 为了避免这个问题,你可以在每次运算后检查结果是否已经超出了long类型的范围,并在必要时退出循环。可以这样改: #include<stdio.h> main() { long i; i=chengji(); printf("%ld", i); } long chengji () { long a, b=1; for (a=1; a<=100; a+=2) { if (b > LONG_MAX/a) break; b *= a; } return b; }