【C语言】中,输入一个数组,实现将输入的n个数字按照从大到小的顺序输出。【通俗简单易懂】

本篇文章中,我们将讲述在C语言中,输入一个数组,如何用for循环实现将输入的n个数字按照从大到小输出。

一.定义数组并初始化

首先,我们定义一个整形的数组并将其初始化。输入n,来决定数组中整数的个数。

然后用for循环来输入这个数组中的各个数字。


	int n = 0;
	scanf("%d", &n);

	int* arr = (int*)malloc(sizeof(int) * n);//动态开辟
	
	//输入n个整数
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}


二.排序

接下来,就是对这个数组中的数字进行比较排序了。

我们先来看代码。


	//将这n个数按从大到小排序

	for (i = 0; i < n; i++)
	{
		int temp = 0; //创建temp变量用于存储临时值
		temp = arr[i]; 

/*把arr[i]也就是arr[0]的值赋给temp,避免数组中有负数而产生不必要的错误*/

		int j = 0; //j表示每次循环开始时arr的下标

/* 下面的for循环中,将i赋值给j,
就避免了前面已经排序好的数字再参与到后面的循环(排序)中去。*/

		for (j = i; j < n; j++) 
		{
			if (temp < arr[j])
			{
//如果数组里还有比temp更大的值,那么将它的值和temp互换

				temp = arr[j];
				arr[j] = arr[i];
				arr[i] = temp;

			}
		}

	}

第一次循环时,原数组中arr[0]的值赋给了temp,因此,我们可以没有后顾之忧地在第二个for循环里,将我们找到的数组里的最大值赋给arr[0],再将temp的值赋给原数组中最大的数的位置。

第一次循环结束后,进入第二次循环时,arr[0]这个地址中存放的就是原先数组的最大值,它就不会再参与接下来的循环了。第二次循环结束后,arr[1]的位置存放第二大的数字,以此类推,就实现了我们将数组中的数从大到小排序的目的。

三.输出

最后,我们利用一个简单的for循环,就能将排序之后的数组输出了


	//输出
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;

}

四.运行结果

我们来看程序运行的结果。5是我们输入的n。接下来的五个数字就是我们输入的数字。

最后一行就是经过从大到小排序之后的数字。

可以看出,输入负数时,程序运行结果仍然正确。

五.完整代码

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int n = 0;
	scanf("%d", &n);

	int* arr = (int*)malloc(sizeof(int) * n);
	
	//输入n个整数
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//将这n个数按从大到小排序

	for (i = 0; i < n; i++)
	{
		int temp = 0;
		temp = arr[i];
		int j = 0;
		for (j = i; j < n; j++)
		{
			if (temp < arr[j])
			{

				temp = arr[j];
				arr[j] = arr[i];
				arr[i] = temp;

			}
		}

	}

	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}

	free(arr);
	arr = NULL;

	return 0;
}

最后,希望以上内容能对你有所帮助。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年12月19日
下一篇 2023年12月19日

相关推荐