c 语言 1159 最大的两个数 指针专题

/*****
题目描述
求n个整数中的最大的两个元素。要求定义一个函数LargestTow(),求数组a的最大的两个元素,分别存入形参指针pfirst和psecond所指存储单元,函数原型如下:
void LargestTow(int a[],int n,int *pfirst,int *psecond)
{
/*数组a有n个元素,将数组中的最大值存入形参指针pfirst所指内存单元,将数组中第二大的值存入形参指针psecond所指内存单元。 */
}
输入
输入有两行,输入第一行是一个整数n,1<n<=1000;第二行是n个整数,由空格隔开。
输出
输出两个整数,表示数组中最大的两个值。输出占一行。
样例输入 Copy
5
6 3 4 9 8
样例输出 Copy
9 8
*****/
!!!!!本题采用的思想是 先对数组进行从大到小排序 然后输出前两个数即可

#include <stdio.h>
#include <stdlib.h>
void LargestTow(int a[],int n,int *pfirst,int *psecond);
int main()
{
    int a[1005];
    int n,i,second,first;
    int *pf,*ps;
    pf = &first;
    ps = &second;

    //输入数组
    scanf("%d",&n);
    for(i = 0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    LargestTow(a,n,pf,ps);
    printf("%d %d",*pf,*ps);
    return 0;
}
void LargestTow(int a[],int n,int *pfirst,int *psecond)
{
    /*数组a有n个元素,将数组中的最大值存入形参指针pfirst所指内存单元,将数组中第二大的值存入形参指针psecond所指内存单元。 */
    int i,j,t;
    ///只需实现从大到小排序 然后输出前两个值就行
    for(i = 0; i<n; i++)
    {
        for(j = i+1; j<n; j++)
        {
            if(a[i] < a[j])
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
    *pfirst = a[0];
    *psecond = a[1];
}

发布了84 篇原创文章 · 获赞 0 · 访问量 1801

猜你喜欢

转载自blog.csdn.net/qq_39345244/article/details/105018845