题目要求:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
解题思路:作为一个还未接触到指针等相关知识的C语言初学者,我运用的是最普通最基础的解法,保证人人都能看懂。
首先定义一个数组,然后输入十个整数:
int main() { int arr[10] = { 0 }; for (int i = 0;i < 10;i++) { scanf("%d", &arr[i]); }
接下来的问题就是如何在十个数中找出最大值与最小值?
我用的办法比较笨,就是逐一比较。
首先说说找最大值:
先将数组中的第一个数赋值给变量a,再用数组中的十个数字轮流与a进行比较。
如果这个值比a大,我们就立马将这个值赋给a,十个数循环一遍,最后得出的a的值一定是十个数里的最大值。
同时为了方便后期交换位置,我们再定义一个变量pos1确定这个最大值的下标。
具体代码实现如下:
for (int i = 0;i < 10;i++) { if (arr[i] >= a) { a = arr[i]; pos1 = i; }
找最小值的方法和找最大值一模一样,也是比较赋值。
再定义一个变量b与下标变量pos2。
具体代码实现如下:
if (arr[i] < b) { b = arr[i]; pos2 = i; }//注意这里的if语句也是包含在上面那个for循环之中的!
已经找到了最大值、最小值和它们的下标,接下来换位置就比较简单了。
题目要求将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
但是这里要注意一个问题:
如果我们直接将a赋给arr[9],b赋给arr[0]的话,就会有一个问题,那就是原本数组中的最大值和最小值数值没有发生改变。
也就是说如果这样输出就会有两个最大值和两个最小值。
为了避免这种情况,我们之前的下标就派上用场了。
因为要实现位置的交换,我们可以直接先一步将arr[9]和arr[0]赋给arr[pos1]和arr[pos2]。
然后再将a赋给arr[9],b赋给arr[0],就避免了重复输出的问题。
具体代码实现如下:
arr[pos1] = arr[9]; arr[pos2] = arr[0]; arr[0] = b; arr[9] = a;
遍历输出:
for (int i = 0;i < 10;i++) { printf("%d ", arr[i]); }
最后附上总的代码:
int main() { int arr[10] = { 0 }; for (int i = 0;i < 10;i++) { scanf("%d", &arr[i]); } int a = arr[0]; int b = arr[0]; int pos1,pos2 = 0; for (int i = 0;i < 10;i++) { if (arr[i] >= a) { a = arr[i]; pos1 = i; } if (arr[i] < b) { b = arr[i]; pos2 = i; } } arr[pos1] = arr[9]; arr[pos2] = arr[0]; arr[0] = b; arr[9] = a; for (int i = 0;i < 10;i++) { printf("%d ", arr[i]); } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复