当前位置: 代码迷 >> C语言 >> 分成多个函数时,无法输出正确答案
  详细解决方案

分成多个函数时,无法输出正确答案

热度:144   发布时间:2006-12-23 10:30:40.0
分成多个函数时,无法输出正确答案

首先感谢指导我的朋友们。
刚刚学了函数,于是想练练手,但程序编完以后发现一个问题。
若是独立的三个程序,他们都可以运行,但是合并后,问题却出现了,就是无法输出正确答案。
程序的目的是为了求组合问题,
main()
{
int a,b,c,d;
float sum;
int frist(int a);
int second(int a,int b);
scanf("%i,%i",&a,&b);
c=frist(a);
d=second(a,b);
sum=c/d;
printf("the sum is %f",sum);
getch();
}


int second(int a,int b)
{
int sum,j;
sum=1;
scanf("%i,%i",&a,&b);
j=b;
while(b>=j-a+1)
{
sum=sum*b;
--b;
}
return(sum);
}


int frist(int a)
{
int sum;
sum=1;
scanf("%i",&a);
while (a!=0)
{
sum=sum*a;
--a;
}
return(sum);
}

搜索更多相关的解决方案: 输出  

----------------解决方案--------------------------------------------------------

出现除法时最好把分子或分母其中一个强制转换成float型,否则结果会是int型的


----------------解决方案--------------------------------------------------------
以下是引用mghtyys在2006-12-23 10:30:40的发言:

首先感谢指导我的朋友们。
刚刚学了函数,于是想练练手,但程序编完以后发现一个问题。
若是独立的三个程序,他们都可以运行,但是合并后,问题却出现了,就是无法输出正确答案。
程序的目的是为了求组合问题,
main()
{
int a,b,c,d;
float sum;
int frist(int a);
int second(int a,int b);
scanf("%i,%i",&a,&b); \*此处已经输入了a,b
c=frist(a); \*且此处也传递了!
d=second(a,b);
sum=c/d;
printf("the sum is %f",sum);
getch();
}


int second(int a,int b)
{
int sum,j;
sum=1;
scanf("%i,%i",&a,&b);
j=b;
while(b>=j-a+1)
{
sum=sum*b;
--b;
}
return(sum);
}


int frist(int a)
{
int sum;
sum=1;
scanf("%i",&a); \*这里为何还要输入?看不明白!
while (a!=0)
{
sum=sum*a;
--a;
}
return(sum);
}

整形数相除结果仍为整数,且采用向0取整的方法取整

借问一句:%i 是什么型数?


----------------解决方案--------------------------------------------------------
main()
{
int a,b,c,d; /*b c d 整形的*/
float sum; /*sum 实型的,难道要用实型的数据空间,来存放整形的和*/
int frist(int a);
int second(int a,int b);
scanf("%i,%i",&a,&b);
c=frist(a);
d=second(a,b);
sum=c/d; /*整形的数除法要小心,因为没有小数*/
printf("the sum is %f",sum);
getch();
}

这几处就不正确
----------------解决方案--------------------------------------------------------
以下是引用mghtyys在2006-12-23 10:30:40的发言:

首先感谢指导我的朋友们。
刚刚学了函数,于是想练练手,但程序编完以后发现一个问题。
若是独立的三个程序,他们都可以运行,但是合并后,问题却出现了,就是无法输出正确答案。
程序的目的是为了求组合问题,
main()
{
int a,b,c,d;
float sum;
int frist(int a);
int second(int a,int b);
scanf("%i,%i",&a,&b); // %i 有符号十进制整数(与%d相同)
c=frist(a);
d=second(a,b);
sum= (float) c / d;
printf("the sum is %f",sum);
getch();
}


int second(int a,int b)
{
int sum,j;
sum=1;
scanf("%i,%i",&a,&b); // 这里好象多此一举了
j=b;
while(b>=j-a+1)
{
sum=sum*b;
--b;
}
return(sum);
}


int frist(int a)
{
int sum;
sum=1;
scanf("%i",&a); // 这里好象多此一举了
while (a!=0)
{
sum=sum*a;
--a;
}
return(sum);
}


----------------解决方案--------------------------------------------------------

以下是引用xianlin_lea在2006-12-23 14:02:28的发言:

整形数相除结果仍为整数,且采用向0取整的方法取整

借问一句:%i 是什么型数?

记得好想等于%d
----------------解决方案--------------------------------------------------------

郁郁郁闷.....
----------------解决方案--------------------------------------------------------

不好意思,因为是把三个程序合编的,整合过程中,出现了
这么低级的错误,对不起


----------------解决方案--------------------------------------------------------

在国外的书籍中%i与%d是可以通用的


----------------解决方案--------------------------------------------------------
由于学校网络问题,所以发表帖子以后一直没能上网
刚刚上来后,看到还是有这么多朋友热心指教,
非常感动,经过slong的指正,程序得到正常的运行。
我不禁感觉到,在编程的道路上,仔细才是王道。
在此,我再一次感谢那些曾经帮助过我的朋友们

----------------解决方案--------------------------------------------------------
  相关解决方案