输入十个整数,找出最小值并将其和第一个整数对换。为什么我的程序无论输入什么最后都输出37

#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;
}