简介
在本实验中,你将学习如何在 C 编程中找到数据集的范围。本实验涵盖以下步骤:1)读取并对数组进行排序,2)通过找出最大值和最小值之间的差值来计算范围,以及 3)打印范围。本实验提供了一个逐步指南和示例代码,以帮助你理解使用 C 分析数据集统计属性的过程。
读取并对数组进行排序
在这一步中,你将学习如何读取一个数字数组并对其进行排序,为计算范围做准备。我们将使用一种简单的方法来输入和组织数据集。
首先,让我们创建一个 C 程序来读取并对数组进行排序:
#include <stdio.h>
#define MAX_SIZE 100
// 交换两个元素的函数
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 冒泡排序函数,用于对数组进行排序
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
int main() {
int numbers[MAX_SIZE];
int n;
// 读取元素数量
printf("输入元素数量 (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 对数组进行排序
sortArray(numbers, n);
// 打印排序后的数组
printf("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
让我们详细分析一下关键部分:
- 我们定义了一个最大数组大小为 100 个元素。
swap()函数用于交换两个数组元素。sortArray()使用冒泡排序将元素按升序排列。- 在
main()函数中,我们:- 读取元素数量
- 输入数组元素
- 对数组进行排序
- 打印排序后的数组
示例编译和执行:
gcc -o array_sort array_sort.c
./array_sort
示例输出:
输入元素数量(最大 100): 5
输入 5 个整数:
42 15 7 23 11
排序后的数组: 7 11 15 23 42
范围 = 最大值 - 最小值
在这一步中,你将学习如何通过找出已排序数组中的最大值和最小值之间的差值来计算数据集的范围。
让我们修改之前的程序来计算范围:
#include <stdio.h>
#define MAX_SIZE 100
// 交换两个元素的函数
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 冒泡排序函数,用于对数组进行排序
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
// 计算范围的函数
int calculateRange(int arr[], int size) {
// 如果数组为空,返回 0
if (size == 0) return 0;
// 范围是已排序数组中最后一个(最大值)元素与第一个(最小值)元素的差值
return arr[size - 1] - arr[0];
}
int main() {
int numbers[MAX_SIZE];
int n;
// 读取元素数量
printf("输入元素数量 (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 对数组进行排序
sortArray(numbers, n);
// 计算并打印范围
int range = calculateRange(numbers, n);
printf("最小值:%d\n", numbers[0]);
printf("最大值:%d\n", numbers[n - 1]);
printf("范围:%d\n", range);
return 0;
}
此步骤中的关键修改:
- 添加了
calculateRange()函数来计算范围 - 通过从已排序数组中的第一个(最小值)元素减去最后一个(最大值)元素来计算范围
- 添加了打印语句以显示最小值、最大值和范围值
示例编译和执行:
gcc -o range_calculator range_calculator.c
./range_calculator
示例输出:
输入元素数量(最大 100): 5
输入 5 个整数:
42 15 7 23 11
最小值: 7
最大值: 42
范围: 35
范围表示数据集的离散程度,通过从已排序数组中的最小值减去最大值来计算。
打印范围
在这最后一步中,你将学习如何以用户友好的方式格式化并显示范围计算结果,为输出增添一些统计背景信息。
让我们创建一个范围计算程序的增强版本:
#include <stdio.h>
#define MAX_SIZE 100
// 交换两个元素的函数
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 冒泡排序函数,用于对数组进行排序
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
// 计算范围的函数
int calculateRange(int arr[], int size) {
// 如果数组为空,返回 0
if (size == 0) return 0;
// 范围是最后一个(最大值)元素与第一个(最小值)元素的差值
return arr[size - 1] - arr[0];
}
// 打印详细范围信息的函数
void printRangeAnalysis(int arr[], int size, int range) {
printf("\n--- 统计范围分析 ---\n");
printf("数据集大小:%d\n", size);
printf("最小值:%d\n", arr[0]);
printf("最大值:%d\n", arr[size - 1]);
printf("范围:%d\n", range);
// 额外的见解
printf("\n解释:\n");
printf("范围表示数据集中值的离散程度。\n");
printf("较大的范围表明数据中的变异性更大。\n");
}
int main() {
int numbers[MAX_SIZE];
int n;
// 读取元素数量
printf("输入元素数量 (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 对数组进行排序
sortArray(numbers, n);
// 计算范围
int range = calculateRange(numbers, n);
// 打印详细的范围分析
printRangeAnalysis(numbers, n, range);
return 0;
}
此步骤中的关键改进:
- 添加了
printRangeAnalysis()函数以提供全面的输出 - 包含了关于范围和数据变异性的额外背景信息
- 格式化输出以使其更具信息性和可读性
示例编译和执行:
gcc -o range_analysis range_analysis.c
./range_analysis
示例输出:
输入元素数量(最大 100): 6
输入 6 个整数:
10 25 7 42 15 33
--- 统计范围分析 ---
数据集大小: 6
最小值: 7
最大值: 42
范围: 35
解释:
范围表示数据集中值的离散程度。
较大的范围表明数据中的变异性更大。
该程序现在提供了对数据集范围更全面的视图,帮助用户理解计算的统计意义。
总结
在本实验中,你首先学习了如何使用简单的冒泡排序算法读取并对数字数组进行排序。这一步为计算范围准备了数据集。接下来,你学习了如何通过从已排序数组中的最小值减去最大值来找到数据集的范围。最后,你将打印计算出的范围。完成这些步骤后的关键学习要点是读取和排序数组,以及数据集范围的概念。



