本篇文章中,我们将讲述在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#includeint 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;}

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