c语言 求一维数组中最小值所在位置

来源:百度知道 编辑:UC知道 时间:2024/05/27 05:21:52
如下程序
main()
{ int a[5];
for(int i=1,j=0;i<5;i++)
{ if(a[j]>a[i])j=i;
}
printf("%d",j);
}
如果数组中有两个最小值,例如:a[0]=3,a[1]=6,a[2]=2,a[3]=2,a[4]=1,a[5]=1的时候,只能得到a[4]这个位置,而得不到a[5],该怎么改呢?

可以接下来再用一个循环来判断有没有跟这个数一样的数就可以了吧!
for(i=0;i<5&&i!=j;i++)
{if(a[i]!=a[j]) continue;
else printf("%d",i);
}

再循环的时候记得把相等的变量复制给另外一个变量存起来就可以了。
不妨设置一个index[6] = {0];全部初始化为0,把最小的所有项对应的为止设置为1.
最后检索这个索引数组,是1的就输出位置。是0的就不管。

你学C多久了,数组a[5]只有a[0] a[1] a[2] a[3] a[4]哪有a[5]啊?
还有就是你没有给数组赋值,你的程序怎么去比啊

你开int a[5]的数组的话只能表示a[0]-a[4],要表示a[5]的话就要开int a[6]的数组,表示a[0]到a[5]。

#include<stdio.h>
#define M 10
int min(int n[])
{
int t,i;
for(i=1;i<M;i++)
if(n[i]<n[0])
{
t=n[i];
n[i]=n[0];
n[0]=t;
}
return n[0] ;
}
void main()
{
int i,a[M];
printf("Please putin some numbers:\n");
for(i=0;i<M;i++)
scanf("%d",&a[i]);
for(i=0;i<M;i++)
if(a[i]==min(a))
printf("the min number is the %dst number:%d.\n",i+1,a[i]);
}

一次全遍历 这有什么难的
注意执行效率奥