求最小值,次(第2)小值.....值.奇怪的输出

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:34:39
#include<stdio.h>
main()
{int a[10];
int i,max,mai,map,maz;
printf("shu ru 10 wei shu:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
max=a[0];
for(i=0;i<10;i++)
if(a[i]<max)max=a[i];
mai=a[1];
for(i=0;i<10;i++)
if(a[i]<mai&&a[i]!=max)mai=a[i];
map=a[1];
for(i=0;i<10;i++)
if(a[i]<map&&a[i]!=max&&a[i]!=mai)map=a[i];
maz=a[1];
for(i=0;i<10;i++)
if(a[i]<maz&&a[i]!=max&&a[i]!=mai&&a[i]!=map)maz=a[i];
printf("最小数为%d,第2小为%d,第3小为%d,第4小为%d",max,mai,map,maz);
}我输入1,2,3,4,5,6,7,8,9,0
输出0,1,2,2
输入0,9,8,7,6,5,4,3,2,1
输出0,1,2,3
不同输入为什么会有不同答案

/*
你的程序编错了,这样编当从小到大输入,a[1]始终不会小于后面输入的数,
所以不可能发生交换,实际上,从小到大输入的时候,输出应为:0 1 1 1,
程序这样改就好了:

*/
#include<stdio.h>
void main()
{
int a[10];
int i,max,mai,map,maz,j;
printf("shu ru 10 wei shu:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{
max=a[i];
a[i]=a[j];
a[j]=max;
}
max=a[0];
mai=a[1];
map=a[2];
maz=a[3];
printf("最小数为%d,第2小为%d,第3小为%d,第4小为%d\n",max,mai,map,maz);
}