解题思路:创建、遍历数组没有难度,交换时考虑指针
注意事项:细节决定成败!易错点:可能是最大值先出现,也可能是最小值先出现,因此不能乱用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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复