C语言的一段代码,请帮看一下错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/06/11 20:17:49
是按书上打的,结果运行出错,如下:

void inv(int x[],int n)
{
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;}
return;
}
main()
{int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("The original array:\n");
for(i=0;i<=10;i++)
printf("%d,",a[i]);
printf("\n");
inv(a,10);
printf("The array has been inverted:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
getch();
}
输出结果是:The original array:
3,7,9,11,0,6,7,5,4,2,-24
The array has been inverted:
2,4,5,7,6,0,11,9,7,3,
为什么上面一行数字后面多出个-24?那是什么?错在哪里了?

在main()函数的第三行,i不能取10,从0到10的话,有11个数,超出了数组的范围,超出范围的那个值要打出来的话,是一个随机值,改成i<10就成了。

void inv(int x[],int n)
{
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;}
return;
}
main()
{int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("The original array:\n");
for(i=0;i<=10;i++)//i<=10多打印一次了,打印了11次
printf("%d,",a[i]);
printf("\n");
inv(a,10);
printf("The array has been inverted:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
getch();
}

C语言引用时的下标从0开始,比你定义时的值小1。

for(i=0;i<=10;i++)
应为for(i=0;i<10;i++)

你主函数里面的一个for循环写错了,本来你的数组的大小是十,可是你的循环既然是从0开始的i的终值应该是9而你的i的终值确是10所以你的输出最后多加了一个-24那是系统自动给你加的

main()函数中第三行:

for(i=0;i<=10;i++)

改为

for(i=0;i<10;i++)