(指针处理)输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换 写3个函数:①输入10个数;②进行处理;③输出10个数。

思路: 分开处理,先找出最大数的位置,交换后,再找出最小数的位置,再交换。(思路:也可以同时找最大数和最小数的位置,但经过最小值和第一个数对换后,最大值的位置可能出现了变化,即如果说原来10个数最大值就在第一个位置,第一次交换后,最大数变成了最小值的位置,而不再是开始找到的最大值位置,因此要if判断讨论最大值是否为第一个数)

代码:

#include <stdio.h>
#define N 10
int main(){
    void swap1(int *q);
    int num[N],*p,*q=num;
    printf("请输入%d个数:\n",N);
    //num+i是数组元素num[i]的地址
    for(p=num;p<(num+N);p++){
        scanf("%d",p);
    }
    printf("您输入的数字为:\n");
    //指针移动打印,for循环结束,指针已移动到末尾
    for(p=num;p<(num+N);p++){
        printf("%d ",*p);
    }
    p=num;
    printf("\n-----------------------\n");
    printf("\n-----------------------\n");
    swap1(q);
    return 0;
}
void swap1(int *q){
    int *p1=q,*p2=q;
    //可以在此处初始化min,但不能在此处初始化max,否则经过找最小值交换后,max的值未在num[0]处,不方便遍历
    int min=*q,max,site1=0,site2=0,temp;
    printf("初始值min=%d\n",min);
    //找到最小值和它所在的位置
    for(int i=0;i<N;i++,p1++){
        if(*p1<min){
            min=*p1;
            site1=i;
        }
    }
    printf("最小值所在位置为num[%d]\n",site1);
    printf("最小值为%d\n",min);
    //将最小值和第一个数对换
    p1=q;
    temp=*p1;//temp=num[0];
    *p1=min;//num[0]=min;
    *(p1+site1)=temp;//num[site1]=temp;
    //检查交换结果
    printf("交换结果为:\n");
    for(p1=q;p1<(q+N);p1++){
        printf("%d ",*p1);
    }
    printf("\n-----------------------\n");
    max=*q;
    printf("初始值max=%d\n",max);
    for(int i=0;i<N;i++,p2++){
        if(*p2>max){
            max=*p2;
            site2=i;
        }
    }
    printf("最大值所在位置为num[%d]\n",site2);
    printf("最大值为%d\n",max);
    p2=q;
    temp=*(p2+(N-1));
    *(p2+(N-1))=max;
    *(p2+site2)=temp;
    //检查交换结果
    printf("交换结果为:\n");
    for(p2=q;p2<(q+N);p2++){
        printf("%d ",*p2);
    }
}

运行结果:
在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值