C语言用户输入N(N>1)个正整数,使用一重循环(不许使用循环嵌套)求出其中的次大数。

用户输入N(N>1)个正整数,使用一重循环(不许使用循环嵌套)求出其中的次大数(第二大的数)。

#include<stdio.h>
int main()
{ int i,n,max1,max2;
  scanf("%d",&n);
  int a[n];
  for(i=0; i<n; i++)
    scanf("%d",&a[i]);
  max1=a[0]>a[1]?a[0]:a[1];
  max2=a[0]+a[1]-max1;
  for(i=2; i<n; i++)
    if(a[i]>max1)
    { max2=max1;
      max1=a[i];
    }
    else if(a[i]>max2)max2=a[i];
  printf("次大数=%d\n",max2);
  return 0;
}

追问

你这个不OK啊,数组不能用变量啊。

追答

违背题目的哪一条要求了?还有“数组不能用变量”究竟是什么意思?

下面的程序改写过了,运行结果与上面的相同。

#include<stdio.h>
int main()
{ int i,n,a,b,max1,max2;
  scanf("%d%d%d",&n,&a,&b);
  max1=a>b?a:b;
  max2=a+b-max1;
  for(i=2; i<n; i++)
  { scanf("%d",&a);
    if(a>max1)
    { max2=max1;
      max1=a;
    }
    else if(a>max2)max2=a;
  }
  printf("次大数=%d\n",max2);
  return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-14
#include <stdio.h>
#define N 5

int main()
{
    int numbers[N];
    int max, nextMax;
    printf("请输入 N = %d 个数\n", N);
    
    for(int i = 0; i < N; ++i) {
        scanf("%d", numbers+i);
    }
    max = numbers[0];
    nextMax = max;
    for(int i = 0; i < N; ++i) {
        if(numbers[i] > max) {
            nextMax = max;
            max = numbers[i];
        } else if(numbers[i] > nextMax) {
            nextMax = numbers[i];
        }
    }

    printf("次大的数为 %d", nextMax);
    return 0;
}

追问

最后执行时还有一个错误,这个是怎么弄的

追答// 会不会你编译器版本太老了,你用这个程序再试试
#include <stdio.h>
#define N 5
 
int main()
{
    int numbers[N];
    int i, max, nextMax;
    printf("请输入 N = %d 个数\n", N);
     
    for(i = 0; i < N; ++i) {
        scanf("%d", numbers+i);
    }
    max = numbers[0];
    nextMax = max;
    for(i = 0; i < N; ++i) {
        if(numbers[i] > max) {
            nextMax = max;
            max = numbers[i];
        } else if(numbers[i] > nextMax) {
            nextMax = numbers[i];
        }
    }
 
    printf("次大的数为 %d", nextMax);
    return 0;
}

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