C语言 找出数组10个数里第二大的数和原始下标 不知道哪里错了 求大神帮忙

#include <stdio.h>
int main()
{
int i,temp,j,flag,w,klag,a[10];
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
temp=a[0];
for(j=0;j<=9;j++)
{
if(a[j]>=a[0])
{a[0]=a[j];
flag=j;}
}
a[flag]=temp;
for(w=1;w<=9;w++)
{
if(a[w]>=a[1])
{a[1]=a[w];
klag=w;
}
}
if(klag=flag)
{printf("0");
printf("%d",temp);}
else
{printf("%d",klag);
printf("%d",a[klag]);}
return(0);
}

看不懂你写的代码逻辑,但是一个明显的问题就是不能做值的交换,否则原始下标的位置就对不上了。给你段验证过的代码:
#include <stdio.h>
int main()
{
  int i,max1,max2,a[10];
  for(i=0;i<=9;i++)
  {
   scanf("%d",&a[i]);
  }
  
  if(a[0] > a[1]) {
  max1 = 0;
  max2 = 1;
  }
  else {
  max1 = 1;
  max2 = 0;
  }
  for(i = 2; i < 10; i++) {
  if(a[i] > a[max1]) {
  max2 = max1;
  max1 = i;
  }
  else if(a[i] > a[max2])
  max2 = i;
  }
  
  printf("第二大的数下标是:%d 值是:%d\n", max2, a[max2]);
  return(0);
}

温馨提示:答案为网友推荐,仅供参考
相似回答