一个很奇妙的C语言问题,简单的都解释不了,帮下忙

来源:百度知道 编辑:UC知道 时间:2024/06/27 06:59:33
#include <stdio.h>
#include <math.h>
int time(int H,int h,int a,int v)
{
return((sqrt(v*v+2*a*(H-h))-v)/a);
}
void main()
{

int t1,t2,H,h1,a1,v1,h2,a2,v2;
/*for(i=0;i<10;i++)*/
{
scanf("%d%d%d%d%d%d%d",H,h1,a1,v1,h2,a2,v2);
t1=time(H,h1,a1,v1);
t2=time(H,h2,a2,v2);
if(t1==t2)
printf("Square!\n");
else if(t1<t2)
printf("Monkey one win!\n");
else
printf("Monkey two win!\n");
}
}
以上的程序也就是解一个一元二次方程组,姑且放下time函数是否应该精确到小数,我给出一个纯整数的数据322 65 3 4 65 3 4,按这组数求出的t1,t2肯定是相等的了,程序运行结果也表示相等。可是,大家试着改一下这int t1,t2,H,h1,a1,v1,h2,a2,v2;成为int H,h1,a1,v1,h2,a2,v2,t1,t2;就是把t1,t2拉到后面来定义。
运行,居然说不相等!!
难道这变量定义还有个顺序而言了??
我晕,写在txt里时还有,不知怎么地到编译器里就没了
先谢谢一楼了,虽然我还没再测试,但是感觉应该没问题了

#include <stdio.h>
#include <math.h>
int time(int H,int h,int a,int v)
{
return((sqrt(v*v+2*a*(H-h))-v)/a);
}
void main()
{

int t1,t2,H,h1,a1,v1,h2,a2,v2;
/*for(i=0;i<10;i++)*/
{
scanf("%d%d%d%d%d%d%d",&H,&h1,&a1,&v1,&h2,&a2,&v2); //注意scanf时的格式
t1=time(H,h1,a1,v1);
t2=time(H,h2,a2,v2);
if(t1==t2)
printf("Square!\n");
else if(t1<t2)
printf("Monkey one win!\n");
else
printf("Monkey two win!\n");
}
}