c语言:输入4个数求里面第二大的数(求教自己想了很久没想通小白一个)

如题所述

int main(void) {
  int num[4];// 声明一个数组,保存4个元素
  int i = 0, j = 0;
  for (; i < 4; ++i) {
    scanf ("%d", &num[i]);
    for (j = i; j > 0; --j) { // 这里读入了一个数据,进行插入排序;判断读入的数据如果比之前的大,则移动到数组前面
      if (num[j] > num[j - 1]) {
int tmp = num[j - 1];
num[j - 1] = num[j];
num[j] = tmp;
      } else {
 break;
      }
    }
  }
  printf ("%d\n", num[1]);
  return 0;
}

追问

如果输入3 5 5 5怎么样

追答

那你就输出的时候再判断一下了

输出的时候:

int first = num[0];
for (i = 1; i < 4; ++i) {
  if (num[i] != first) {
    printf("%d\n", num[i]);  // 找到第一个不等于最大值的数,那就是第二大了
    break;
  }
}
if (i == 4) {
  printf("%d\n", first); // 没有找到,那么只能输出第一个最大值,或者其他情况了
}

追问

原来是这样

回去试下谢了

好像不太对

是要求第二大的数

不是最大

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-11
从小到大排序,取第二个。
循环,直接比较,记录最大值与次大值,每次循环满足条件做两次交换,循环完成后就能得到你要的结果。追问

这个办法我试过

输入3 5 5 5不行

不是

输入3 3 5 5

不行

会输出3

就3 5 5 5第二大是3结果输出了5

第2个回答  2017-10-11
#include <stdio.h>

int main()

{

int i,a[4],max;

for(i=0;i<4;i++)

{

scanf("%d",&a[i]);

}

max=0;

for(i=1;i<4;i++)

{

if(a[max]<a[i])

{

max=i;

}

}

i=a[max];

a[max]=a[0];

a[0]=i;

max=1;

for(i=2;i<4;i++)

{

if(a[max]<a[i])

{

max=i;

}

}

printf("第二大的是:%d\n",a[max]);

return 0;

}追问

大神这个我没看太懂

追答

max=0;

for(i=1;i<4;i++)

{

if(a[max]<a[i])

{

max=i;

}

}
上面这一段是找出4个数里的最大的那个数在哪个位置。
i=a[max];

a[max]=a[0];

a[0]=i;
上面这一段是把最大的那个数和第一个数交换一下。
max=1;

for(i=2;i<4;i++)

{

if(a[max]<a[i])

{

max=i;

}

}
上面这一段是把第一个数排除出去,在剩下的3个数里找出最大的那个数的位置,这个位置就是第二大的数的位置了。

追问

如果出现3 5 5 5

也可以出现吗

追答

输入3 5 5 5 结果会是5

追问

但第二大是3

😂

怎么办

追答

改成这样:
#include
int main()
{
int i,j=0,a[4],b[4],max;
for(i=0;i0)
{
max=0;
for(i=1;i<j;i++)
{
if(b[max]<b[i])
{
max=i;
}
}
printf("第二大的是:%d\n",b[max]);
}
else
{
printf("没有第二大的数\n");
}
return 0;
}

追问

可以呀

这个怎么加上while(scanf("%d",&a[i]){}

这个怎么加上while(scanf("%d",&a[i])!=EOF){}

需要连续输入不停止

很苦难

苦恼

追答

不明白你的意思

追问

就是每次输了4个数然后出了结果,会出现“任意键以退出”,但我想继续输不退出

追答

改成这样:
#include
int main()
{
int i,j=0,a[4],b[4],max;
while(1){
j=0;
for(i=0;i0)
{
max=0;
for(i=1;i<j;i++)
{
if(b[max]<b[i])
{
max=i;
}
}
printf("第二大的是:%d\n",b[max]);
}
else
{
printf("没有第二大的数\n");
}
}
return 0;
}

本回答被网友采纳
相似回答