先介绍一下怎么使用数组读取一组数字:
在C语言中,使用数组读取一组数字非常简单。首先,您需要定义一个数组来存储这组数字。数组是一个有序的数据集合,可以保存多个相同类型的元素。
假设你希望读取的数字组成一个整数数组,可以按照以下步骤进行操作:
- 首先,在程序开始的地方,声明一个整数类型的数组。例如,可以使用以下语法声明一个名为
numbers
的整型数组,用来存储10个数字:
int ar[10];
这将创建一个名为arr
的数组,其大小为10个整数。
- 接下来,您可以使用循环语句(如
for
循环)来逐个读取用户输入的数字并存储到数组中。例如,以下代码段将依次读取用户输入的10个数字,并将它们存储到arr数组中:
for (int i = 0; i < 10; i++) {
printf("请输入第 %d 个数字:", i + 1);
scanf("%d", &arr[i]);
}
在每次循环中,程序会提示用户输入一个数字,并使用scanf
函数将输入的数字存储到数组中的相应位置。
- 当用户输入完所有数字后,数组
arr
中就存储了这组数字。你可以根据需要对这些数字进行进一步的处理。
接下来介绍一下什么是冒泡排序:
冒泡排序是一种简单但有效的排序算法,在计算机科学中被广泛应用。它的原理很简单,通过相邻元素的比较和交换来实现排序。冒泡排序的名称源自于元素像冒泡一样移动到正确的位置。
下面让我以通俗易懂的方式来解释一下冒泡排序的过程:
假设我们有一个包含 n 个元素的数组,我们要按照从小到大的顺序对它进行排序。冒泡排序会重复执行以下步骤:
- 从数组的第一个元素开始,依次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。
- 继续向下扫描数组,重复执行第一步,直到达到倒数第二个元素为止。这样,第一次扫描之后,最大的元素已经被移动到了数组的最后一个位置。
- 重复执行上述步骤,但此次不再考虑已排序好的最后一个元素。每次扫描都将最大的元素移动到倒数第二个位置。
- 重复执行以上步骤,直到所有元素都排序完毕。
通过不断地交换相邻元素并移动最大的元素到正确的位置,冒泡排序会逐步将整个数组排序好。
到这里就可写程序了:
/*数组排序,*/
#include <stdio.h>
int main(){
int arr[10], input = 0; //定义一个数组
printf("请输入十组数字\n");
for(int i = 0; i < 10; i++){ //使用for循环读入十组数字
scanf("%d", &arr[i]);
}
//给用户个选择
printf("\n扣“1”从小到大, 扣“其它”从大到小\n");
scanf("%d", &input);
//扣1的话就从小到大排
if(input == 1){
printf("从小到大排列为:\n");
for(int i = 0; i < 10; i ++){ //循环十次,对应读入的十个元素,使每个元素都参与排列
for(int k = 9; k > i; k--){ //从后往前,各个元素进行比较,把最小元素放在最前,以此类推
int tmp = 0;
if(arr[k] <= arr[k -1]){ //满足条件前后元素交换位置
tmp = arr[k];
arr[k] = arr[k - 1];
arr[k - 1] = tmp;
}
}
printf("%d\t", arr[i]); //最小元素已经排列在前,所以每个元素排列结束,依次打印即可
}
}
//否则的话就从大到小排
else{
printf("从大到小排列为:\n");
for(int i = 0; i < 10; i ++){ //循环十次,对应读入的十个元素,使每个元素都参与排列
for(int k = 0; k <9 - i; k++){ //从前往后,各个元素进行比较,把最大元素放在最后,以此类推
int tmp = 0;
if(arr[k] >= arr[k + 1]){ //满足条件前后元素交换位置
tmp = arr[k];
arr[k] = arr[k + 1];
arr[k + 1] = tmp;
}
}
printf("%d\t", arr[9 - i]); //最大元素已经排列在前,所以每个元素排列结束,依次打印即可
}
}
return 0;
}
最后说一下上面代码的一些细节与主要逻辑:
这段程序是用来对输入的10个数字进行排序的。程序首先会要求用户输入这10个数字,然后根据用户的选择,进行从小到大或从大到小的排序。
程序的主要逻辑如下:
- 首先,程序声明了一个大小为10的整型数组
arr
,用来存储用户输入的10个数字。 - 接下来,程序通过一个
for
循环,从用户输入获取这10个数字,并将它们依次存储到数组arr
中。 - 紧接着,程序要求用户输入一个数字
input
。如果用户输入的是1,则程序将进行从小到大的排序;如果用户输入的是其他数字,则程序将进行从大到小的排序。 - 如果用户选择从小到大排序,程序将进入相应的逻辑。程序使用两个嵌套的
for
循环,外层循环用来控制每一轮的比较次数,内层循环用来逐个比较相邻的两个元素,因为每次外层循环结束,都会有一个元素被排到指定位置,所以只比较剩下的元素即可,如k < 9 - i
确保我们在每一轮排序中只比较尚未排列的元素。随着每一轮排序的进行,已经排列好的元素会逐渐移到数组的后面,所以我们在新的一轮排序中不需要再考虑它们。通过不断地交换元素的位置,将最小的元素逐渐移动到数组的前面。 - 类似地,如果用户选择从大到小排序,程序将进入另一段逻辑。程序也是使用两个嵌套的
for
循环,但这次是通过不断地交换元素的位置,将最大的元素逐渐移动到数组的后面。 - 最后,程序将按照用户选择的排序方式,依次打印出排序后的数组元素。
至此,整个程序的功能就解释完毕了!通过以上的排序算法,用户可以方便地对输入的数字进行从小到大或从大到小的排序。