C语言程序 没有错误 但是输出结果是负数。。。求大神解答

小弟刚开始学C语言
下面是程序
#include<stdio.h>int jc(int x)
{int i;
for(i=1;i<=(x-1);i++)
x=x*i;
return(x);
}

main(){
int n,k,sum=0;
for(k=1;k<=10;k++)
{
n=jc(k);
sum=sum+n;
printf("%d",k);
printf("!=%d\n",n);
}
printf("sum=%d\n",sum);
return 0;
}

求解 为什么输出结果除了前两次(分别是1,2)都是负数,但是SUM的和却是正数 而且貌似不对。

第1个回答  2013-04-24
{int i; for(i=1;i<=(x-1);i++) x=x*i; 这个地方x一直在变化,不允许的,改为int i , j = x; for(i =1; i <= j -1; i ++)本回答被提问者采纳
第2个回答  2013-04-24
int jc(int x)
{int i;
for(i=1;i<=(x-1);i++)
x=x*i;
return(x);
}
楼主确认一下这个函数,你这个函数是想实现什么功能的?
第3个回答  2013-04-24
#include<stdio.h>
int jc(int x)
{int i,k=1;
for(i=1;i<=x;i++)
k=k*i;
return(k);
}

main()
{
int n,k,sum=0;
for(k=1;k<=10;k++)
{
n=jc(k);
sum=sum+n;
printf("%d",k);
printf("!=%d\n",n);
}
printf("sum=%d\n",sum);
return 0;
}
//请问是不是这样?
第4个回答  2013-04-24
在jc()函数里面加一句int j=x;然后把for()括号里面的x改为j
第5个回答  2013-04-24
#include<stdio.h>
int jc(int x)
{
int i,m=1; //新建一个数保存jc的值
for(i=1;i<=x;i++)
m*=i;//m=m*i;
return(m);
}
main()//这次对了,别的没给你改,函数出问题了。
{
int n,k,sum=0;
for(k=1;k<=10;k++)
{
n=jc(k);
sum=sum+n;
printf("%d",k);
printf("!=%d\n",n);
}
printf("sum=%d\n",sum);
return 0;
}
望采纳,谢谢~

【C语言】有没有大佬知道这个程序为什么会输出一个负数?
程序会输出负数的原因是,在这个程序中你没有对每次运算的结果进行检查,因此当乘积超出了long类型的最大值时,就会产生溢出,导致结果为负数。为了避免这个问题,你可以在每次运算后检查结果是否已经超出了long类型的范围,并在必要时退出循环。可以这样改:include<stdio.h> main(){ long i;i=chengji(...

C语言 为什么我这个程序输入正确数后 结果总为负数
那么长的结果 你不把数据类型改长一点 那么就会数据溢出 变成负数的

c语言问题,为什么会输出负数
算法有错误,最终计算结果是负数。输出自然会是负数。例如:int a=1;int b=a-2;printf("b=%d",b);\/\/输出结果:b=-1超过变量类型的最大取值范围,发生溢出。例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结果就有可能是负数。这种情况,就需...

C语言运行结果的时候为什么会出现负数
必然是溢出了。

c语言一个程序没有错误,在运行时输入两个数,其中有一个数在输出时却是...
输入时用于分隔的都是应该是西文半角的逗号,你输入中文全角的逗号了

为什么C语言算出来是负数?大神们帮忙检查一下吧
for(n=2;n<=16;n=n+2)m=m*(n+1)*(n+2);你的m的初步估计是3的8次方4的8次方乘以2 144194 然后肯定是超出界限了。。int是2个字节。。也就是16位,第一位是数据的正负0正1负,15位是数值最大的值是32767 超出了。。。然后你最后结果的反正是超出范围了。,。最终是哪里超出的就不...

一道C语言题,为什么输出的结果为负数?
你的主要原因是变量w没有初始化,是内存中的遗留值,导致最后输出的结果中全部学生的平均值为2000多的一个负数。修改后源码软下:include <stdio.h>#include <stdlib.h>#define input scanfstruct student{ char num[10]; char name[10]; int score[3]; int total; float avr;}...

C语言的一个程序运行的问题..为什么反显会出错.请大家赐教
对于程序本身没错,编译通过,当你输入数据时,程序对数据进行计算,输入的数据超出-32768~32767时,输入数据错误,也就是说,你输入的数是0~65535时就是正确的数据,再解释,从32767~65535系统认为其为负数,也是正确的数据。在由就是为什么没有显示数据错误的提示,这也不难理解,首先对于数据空间j...

我的数据输出怎么是负数,c语言大神求指教 #include<stdio.h> #define...
那么就直接返回,后面的参数没有办法接收数据,你在scanf中r=%lf,h=%lf这样控制格式,那么在输入数据时,需要r=1.5,h=2.5这样的格式输入,才能让变量r和h接收到你输入的参数,如果你不按照这个格式输入参数,那么scanf函数就会返回错误,变量就有可能接收不到正确的数据,导致程序运行结果不正确 ...

C语言程序,结果会出现负0,请问怎么办?
这是圆周率数值的截断误差引起的,算出的向量就是接近0的负数。要想得正0,圆周率给个 (四舍)五入值:pai=3.14159265359;就可以了。但不能保证别的特殊的输入数会不会 该正0 出现负0。

相似回答