【C语言】用指针的方法处理:输入十个整数,将其中最小的数与第一个数交换,将最大数和最后一个数交换

分析:
1.获取数组中最大值和最小值及其下标
2.将其调换到相应位置
注意事项:
1.避免重复交换
2.考虑特殊情况(如首位极值相反或已对应)
水平有限,望各位在评论区共同讨论。

#include "stdio.h"
#include "stdlib.h"
void get_ex_val_pos(int *n, int *max, int *min, int *max_p, int *min_p); //声明
int main(void)
{
    int num[10], i;
    int max, min;
    int max_p, min_p;
    printf("Please enter ten nums:\n");//接收值
    for (i = 0; i < 10; i++)
    {
        scanf("%d", (num + i));
    }
    get_ex_val_pos(num, &max, &min, &max_p, &min_p);//调用函数
    if (*num == *(num + max_p) && *(num + 9) == *(num + min_p))//首位极值相反的特殊情况单独判断
    {
        *(num + min_p) ^= *num ^= *(num + min_p) ^= *num;
    }
    if (*num != *(num + min_p) || *(num + 9) != *(num + max_p))//普通判断
    {
        *(num + min_p) ^= *num ^= *(num + min_p) ^= *num;
        *(num + max_p) ^= *(num + 9) ^= *(num + max_p) ^= *(num + 9);
    }
    for (i = 0; i < 10; i++)
    {
        printf("%d ", *(num + i));//输出
    }

    system("pause");
}
void get_ex_val_pos(int *n, int *max, int *min, int *max_p, int *min_p)//获取数组内极值及下标
{
    int i;
    *max = *min = *n; //初始化数值
    for (i = 1; i < 10; i++)
    {
        if (*max < *(n + i))
        {
            *max = *(n + i);
            *max_p = i;
        }
    }
    for (i = 1; i < 10; i++)
    {
        if (*min > *(n + i))
        {
            *min = *(n + i);
            *min_p = i;
        }
    }
}
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值