解题思路:创建、遍历数组没有难度,交换时考虑指针

注意事项:细节决定成败!易错点:可能是最大值先出现,也可能是最小值先出现,因此不能乱用break

参考代码:

#include<stdio.h>

//创建

void create(int a[]){

int i;

for(i=0;i<10;i++){

scanf("%d",&a[i]);

}

//遍历

void travel(int a[]){

int i;

for(i=0;i<10;i++){

printf("%d ",a[i]);

}

}

//交换

void swap(int* p){

int* q = p;  //因为p会变,因此需要用q来存数组的地址

int max = *p;

int min = *p;

int i,t;

for(i=1;i<=10;p++,i++){  //找到最大值和最小值

if(max<*p) max = *p;

if(min>*p) min = *p;

}

p = q;

for(i=0;i<10;p++,i++){  //用指针确认最大值和最小值所在位置,进行交换操作

if(*p==min){

t = *p;

*p = *(p-i);      //找规律+两数交换

*(p-i) = t;

}

if(*p==max){

t = *p;

*p = *(p + (9 - i));       //找规律+两数交换

*(p + (9 - i)) = t;

}

}

}

//主函数

int main(){

int a[10];

create(a);

swap(&a[0]);

travel(a);

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论