简介
在本实验中,你将学习如何用C语言计算四分位距(IQR)。本实验涵盖读取和排序一组数字数组、找到第一四分位数和第三四分位数(Q1和Q3)的位置,然后将IQR计算为Q3与Q1之差的步骤。完成本实验后,你将对如何使用C语言进行此统计分析有扎实的理解。
在本实验中,你将学习如何用C语言计算四分位距(IQR)。本实验涵盖读取和排序一组数字数组、找到第一四分位数和第三四分位数(Q1和Q3)的位置,然后将IQR计算为Q3与Q1之差的步骤。完成本实验后,你将对如何使用C语言进行此统计分析有扎实的理解。
在这一步中,你将学习如何读取一组数字数组并对其进行排序,为计算四分位距(IQR)做准备。我们将使用C语言来完成这项任务。
首先,让我们为IQR计算创建一个C源文件:
cd ~/project
nano iqr_calculation.c
现在,让我们编写读取和排序数组的初始代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 用于qsort的比较整数的函数
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int numbers[MAX_SIZE];
int n, i;
// 读取元素数量
printf("输入元素数量(最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 对数组进行排序
qsort(numbers, n, sizeof(int), compare);
// 打印排序后的数组
printf("排序后的数组: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
编译程序:
gcc -o iqr_calculation iqr_calculation.c
运行程序并提供一个示例输入:
./iqr_calculation
示例输出:
输入元素数量(最大100): 6
输入6个整数:
45 22 14 65 97 72
排序后的数组: 14 22 45 65 72 97
让我们来分析一下这段代码:
compare()
函数被 qsort()
用于对整数进行排序qsort()
用于将数组按升序排序在这一步中,我们将修改上一个程序,通过找到Q1和Q3的位置来计算四分位距(IQR)。
打开上一个源文件:
cd ~/project
nano iqr_calculation.c
更新代码以计算IQR:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// 用于qsort的比较整数的函数
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
// 计算Q1和Q3的函数
double calculateQuartile(int *arr, int n, double position) {
int index = floor(position);
double fraction = position - index;
if (fraction == 0) {
return arr[index - 1];
} else {
return arr[index - 1] * (1 - fraction) + arr[index] * fraction;
}
}
int main() {
int numbers[MAX_SIZE];
int n, i;
double q1, q3, iqr;
// 读取元素数量
printf("输入元素数量(最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 对数组进行排序
qsort(numbers, n, sizeof(int), compare);
// 计算Q1和Q3的位置
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// 计算Q1和Q3
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// 计算IQR
iqr = q3 - q1;
// 打印结果
printf("排序后的数组: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
printf("Q1: %.2f\n", q1);
printf("Q3: %.2f\n", q3);
printf("IQR: %.2f\n", iqr);
return 0;
}
编译更新后的程序:
gcc -o iqr_calculation iqr_calculation.c -lm
运行程序并提供一个示例输入:
./iqr_calculation
示例输出:
输入元素数量(最大100): 7
输入7个整数:
12 15 18 22 25 30 35
排序后的数组: 12 15 18 22 25 30 35
Q1: 15.00
Q3: 30.00
IQR: 15.00
代码中的关键点:
calculateQuartile()
处理偶数和奇数大小的数组在这最后一步中,我们将专注于以清晰且信息丰富的方式格式化并呈现四分位距(IQR)的结果。
打开上一个源文件:
cd ~/project
nano iqr_calculation.c
更新代码以增强IQR输出并添加一些描述性文本:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// 之前的函数保持不变(compare和calculateQuartile)
int main() {
int numbers[MAX_SIZE];
int n, i;
double q1, q3, iqr;
// 清屏以获得更好的展示效果
printf("\033[2J\033[1;1H");
// IQR介绍
printf("四分位距(IQR)计算器\n");
printf("=====================================\n\n");
// 读取元素数量
printf("输入元素数量(最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 对数组进行排序
qsort(numbers, n, sizeof(int), compare);
// 计算Q1和Q3的位置
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// 计算Q1和Q3
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// 计算IQR
iqr = q3 - q1;
// 详细输出
printf("\n数据分析结果\n");
printf("--------------------\n");
printf("原始数据集: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n\n");
// 格式化的IQR输出
printf("四分位数分析:\n");
printf("第一四分位数(Q1): %.2f\n", q1);
printf("第三四分位数(Q3): %.2f\n", q3);
printf("四分位距(IQR): %.2f\n", iqr);
// IQR的解释
printf("\n解释:\n");
printf("IQR表示数据中间50%的分布范围。\n");
printf("较小的IQR表明数据更一致,\n");
printf("而较大的IQR则表明数据的变异性更大。\n");
return 0;
}
编译更新后的程序:
gcc -o iqr_calculation iqr_calculation.c -lm
运行程序并提供一个示例输入:
./iqr_calculation
示例输出:
四分位距(IQR)计算器
=====================================
输入元素数量(最大100): 7
输入7个整数:
12 15 18 22 25 30 35
数据分析结果
--------------------
原始数据集: 12 15 18 22 25 30 35
四分位数分析:
第一四分位数(Q1): 15.00
第三四分位数(Q3): 30.00
四分位距(IQR): 15.00
解释:
IQR表示数据中间50%的分布范围。
较小的IQR表明数据更一致,
而较大的IQR则表明数据的变异性更大。
主要改进:
在本实验中,你首先学习了如何在C语言编程中读取和排序一组数字。你创建了一个C源文件,编写了初始代码来读取数组元素并使用qsort()
函数对其进行排序。然后你打印了排序后的数组以验证排序过程。
接下来,你将修改上一个程序,通过找到第一四分位数(Q1)和第三四分位数(Q3)的位置来计算四分位距(IQR),然后将IQR计算为Q3 - Q1。最后,你将打印计算出的IQR。