程序在windows下没错,但转入Linux下结果有些问题
题目要求:通过比较两个数组中对应的每个元素的大小,并用large,small,equal计数,比如a数组的第一个元素大于b数组的第一个,则large+=1,以此类推。最后若large大于其他两个变量那么结果为a数组大,另两种结果不用说了拉。很单纯的一道题。
程序如下:
#include<stdio.h>
#include<sys/time.h>
#include<unistd.h>
void lg(int *x,int *y);
int main()
{
int a[10],b[10],i;
struct timeval tv1,tv2;
struct timezone tz;
printf("输入数组a:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("输入数组b:\n");
for(i=0;i<10;i++)
scanf("%d",&b[i]);
gettimeofday(&tv1,&tz);
lg(a,b);
gettimeofday(&tv2,&tz);
printf("比较两数组所用时间:%d\n",tv2.tv_usec-tv1.tv_usec);
return 0;
}
void lg(int *x,int *y)
{
int large=0,equal=0,small=0,i;
for(i=0;i<10;i++)
{
if(x[i]>y[i])large+=1;
else if(x[i]<y[i])small+=1;
else equal+=1;
}
printf("\na[i]>b[i] %d 次 \na[i]=b[i] %d 次 \na[i]<b[i] %d 次 \n\n",large,equal,small);
if(large>small)printf("a数组大于b数组。\n");
else if(large<small)printf("a数组小于b数组。\n");
else printf("a数组等于b数组。\n");
}
说明比较长。各位耐心,谢谢。
原本的目的是比较下传值调用和传址调用的时间差别的,所以这个程序有两个版本。
这个程序在windows下完全正确,但到了Linux下出现小错误。所谓的小错误是指数组大小的比较没有问题,但是计数的结果不对,所以我觉得很怪。
我用另一个版本的就是传值调用则两个系统下都正确。
顺道说一下,我用的两数组如下:
a数组:1 4 7 3 2 8 5 9 4 1
b数组:2 4 3 9 4 1 7 5 3 2
这中间有什么问题么。对了,在Linux下用的gcc编译器。