输入10个整数, 将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。①输入10个数;②进行处理;③输出10个数。

输入10个整数,
将其中最小的数与第一个数对换,
把最大的数与最后一个数对换。

写三个函数; ①输入10个数;②进行处理;③输出10个数。

输入
10个整数

输出
整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)

样例输入
2 1 3 4 5 6 7 8 10 9
样例输出
1 2 3 4 5 6 7 8 9 10


#include 
#include 
#include 
#include 
void swap_int_pointer(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
//在此下方插入自定义函数对的声明:
/* 用指针读入并保存数字 */
int read(int *p, int n)
{
    for (int i = 0; i < n; i++)
    {
        
        if(scanf("%d", p + i) == EOF)
        {
            return 0;
        }
    }
    return 1;
}
void deal(int *p,int n)
{
    int min_index = 0; /* 最小元素的 索引/偏移量 */
    int max_index = 0;
    
    for (int i = 1; i < n; i++)
    {
        if (*(p + min_index) > *(p + i))
        {
            min_index = i;
        }
/*         
        由于本题要求交换的操作有两处,故不宜同时确定min_index 和max_index,因为第一次swap后元素的排列很可能发生了改变.
        宜再第一次swap后再重新扫描.
        if (*(p + max_index) < *(p + i))
        {
            max_index = i;
        } */
    }

    // int temp;
    // temp = *(p+min_index);
    // *(p+min_index) = *(p);
    // *p = temp;
    swap_int_pointer(p + min_index, p);
    //这里发生了自定义的函数嵌套调用,因为内部的函数在外部函数之前定义了所以不必再在调用函数里声明,类似于main()
    for (int i = 1; i < n; i++)
    {

        if (*(p + max_index) < *(p + i))
        {
            max_index = i;
        }
    }
    swap_int_pointer(p + max_index, p + n - 1);
}
void print(int *p,int n)
{
    for(int i = 0;i<n;i++)
    {
        printf("%d ",*(p+i));
    }
    printf("\n");
}
//主函数main
int main()
{
    //复制模版式删除这个或者再下面一个
    int n;

    int size_int = sizeof(int);
    int *p;
//printf ("test\n");
    p = (int *)malloc(10 * size_int);
    //free(p);

    while (read(p, 10))
    {
        deal(p, 10);
        print(p, 10);
    }

    free(p);

    return 0;
} 

你可能感兴趣的:(输入10个整数, 将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。①输入10个数;②进行处理;③输出10个数。)