#include
int main()
{
int min,min_loc,a[10],i;
printf("输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
min=a[0];
for(i=1;i<10;i++)
{
if(a[i]<min)
{ min=a[i];
min_loc=i;
}
}
a[min_loc]=a[0];
a[0]=min;
printf("最小值是%d \n这是第%d个数 \n",min,min_loc+1);
printf("%d \n",a[i]);
}
int min, min_loc, a[10], i,j;
printf("输入10个数:\n");
for (i = 0; i<10; i++)
scanf("%d", &a[i]);
min = a[0];
min_loc = 0;
for (i = 1; i<10; i++)
{
if (a[i]<min)
{
min = a[i];
min_loc = i;
}
}
j = a[0];
a[0] = a[min_loc];
a[min_loc] = j;
printf("最小值是%d \n这是第%d个数 \n", min, min_loc + 1);
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
a[min_loc]=a[0];
a[0]=min;
->
int temp = a[min_loc];
a[min_loc]=a[0];
a[0] = temp;
10个数的数组的序号是从a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],程序中第二个for循环: for(i=1;i<10;i++) i++后,i的值在循环中取到9后跳出循环,然后i增加1变成了10,所以当最后一行代码,在输出a[i]时,i的取值是10,在定义的数组中是没有,所以无论输入什么,最终得到的是一个溢出的值37
他们都已经说的很清楚了,最后你i增加到10,a[10]已经越界了,刚好你的电脑就得到37这个数,中间变量的确可以不用,还有个小问题就是没有初始化min_loc
#include<stdio.h>
int main(){
int min, min_loc, a[10], i;
printf("输入10个数:\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
min = a[0];
min_loc = 0; //bug:初始化min_loc
for (i = 1; i < 10; i++)
{
if (a[i] < min)
{
min = a[i];
min_loc = i;
}
}
a[min_loc] = a[0];
a[0] = min;
printf("最小值是%d \n这是第%d个数 \n", min, min_loc + 1);
for (i = 0; i < 10; i++) { //重置i=0
printf("%d \n", a[i]);
}
return 0;
}