题目要求:输入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分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论