c语言寻找第三大的数字

输入一串数字,寻找其中第三大的数字,如果没有第三大的数,就输出最大的数字

我把排序封装成一个函数给你,如下





#include<stdio.h>
//冒泡排序
void sort(int arr[], int size)
{
    int j,i,temp;
    for (i = 0; i < size-1;i ++)
    {
        int count = 0;
        for (j = 0; j < size-1 - i; j++)//size-1-i是因为每一趟就会少一个数比较
        {
            if (arr[j] > arr[j+1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
            {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                count = 1;
            }
        }
        if (count == 0)            //如果某一趟没有交换位置,则说明已经排好序,直接退出循环
                break;    
    }
}
int main(){
    int N,i;
    printf("请输入一串数字的个数:\n");
    scanf("%d",&N);
    int a[N];
    for(i=0;i<N;i++){
        scanf("%d",&a[i]);
    }
   //调用sort函数
   sort(a,N);
   if(N<3){printf("没有第三大的值,最大值为:%d",a[N-1]);}
   else{printf("第三大的数为:%d",a[N-3]);}
    return 0;
}

①没有第三大值的情况:

img


②有第三大值的情况:

img

定义三个变量,分别记录最大,次大和第三大数。输入的数分别与各个数比较大小

#include <stdio.h>
int main()
{
    int m1=0,m2=0,m3=0;
    int s1=0,s2=0,s3=0;
    int n;
    while(scanf("%d",&n) != EOF)
    {
        if(s1==0 || n>m1)
        {
            if(s2 != 0)
                s3 = 1;
            if(s1 != 0)
                s2 = 1;
            s1 = 1;
            m3 = m2;
            m2 = m1;
            m1 = n;


        }
        else if(s2==0 || n>m2)
        {
            if(s2 != 0)
                s3 = 1;
            s2 = 1;
            m3 = m2;
            m2 = n;
        }
        else if(s3==0 || n>m3)
        {
            s3 = 1;
            m3 = n;
        }
    }
    if(s3 != 0)
        printf("%d",m3);
    else
        printf("%d",m1);
    return 0;
}

我简单写了一个实现供你参考。如果对你有帮助请采纳。

#include <stdio.h>

int main() {
    int n;//表示要输入几个数字
    printf("请输入数字个数:");
    scanf("%d", &n);
    int a = 0, b = 0, c = 0; // a是最大的,b是第二大的,c是第三大的
    for (int i = 0; i < n; i++) {
        int tmp;
        scanf("%d", &tmp);
        if (tmp > a) {
            c = b;
            b = a;
            a = tmp;
        } else if (tmp > b) {
            c = b;
            b = tmp;
        } else if (tmp > c) {
            c = tmp;
        }
    }
    printf("第三大数字为:%d\n", c);
    return 0;
}