原题链接:[编程入门]自定义函数之整数处理
解题思路:解题关键还是在第二个函数——进行处理。
根据题目我们要处理的是找出最大值or最小值,之后按要求交换位置即可;再仔细观察我们不难发现最大值和最小值要求其实差不多,那么我们的问题就变成
找最小值——利用数组,假设第一位为最小值,然后不断比较
保存最小值位置——找到最小值后,用个数记录当前位置;
之后与第一位交换
最大值也是类似
参考代码:
#include<stdio.h>
#define n 10
//输入
int in(int a[100]){
int i;
for(i=0;i<n;i++){
scanf("%d",a[i]);
}
return 0;
}
//主要排序交换函数
int change(int a[100]){
int max,min;
int x=0; //记录最大or最小值的位置
int temp,i;
min=a[0]; //假设最小值是第一位,之后一个一个比较
for(i=1;i<n;i++){
if(a[i]<min){
min=a[i];
x=i;
}
}
//这里注意应该是确定最小值后交换,避免重复交换
temp=a[0]; //与第一位交换
a[0]=a[x];
a[x]=temp;
//从上面可以确定第一位是最小值,所以从第二位开始假设
max=a[1];
for(i=2;i<n;i++){
if(a[i]>max){
max=a[i];
x=i;
}
}
temp=a[9]; //与最后一位交换
a[9]=a[x];
a[x]=temp;
return 0;
}
int out(int a[100]){
int i;
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
int main(){
int a[n];
in(a);
change(a);
out(a);
return 0;
}但个人感觉代码有些冗余,而且本人不太会用指针,如有更好的,欢迎讨论
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复