简介
在本实验中,你将学习如何用 C 语言确定数据集的众数。本实验涵盖以下步骤:
读取数字数组:你将学习如何在 C 语言中读取数字数组,这是确定数据集众数的关键第一步。该程序允许输入一组数字,并为频率分析做好准备。
计算频率以找到最常见的值:你将修改之前的程序,计算数组中每个数字的频率,并确定最常见的值(众数)。
打印众数:最后,你将打印出众数,即数据集中出现频率最高的值。
在本实验中,你将学习如何用 C 语言确定数据集的众数。本实验涵盖以下步骤:
读取数字数组:你将学习如何在 C 语言中读取数字数组,这是确定数据集众数的关键第一步。该程序允许输入一组数字,并为频率分析做好准备。
计算频率以找到最常见的值:你将修改之前的程序,计算数组中每个数字的频率,并确定最常见的值(众数)。
打印众数:最后,你将打印出众数,即数据集中出现频率最高的值。
在这一步中,你将学习如何在 C 语言中读取数字数组,这是确定数据集众数的关键第一步。我们将创建一个 C 程序,该程序允许输入一组数字,并为频率分析做好准备。
首先,让我们为众数计算程序创建一个新的 C 文件:
cd ~/project
nano mode_calculation.c
现在,将以下代码添加到该文件中:
#include <stdio.h>
#define MAX_SIZE 100
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]);
}
// 打印输入的数组以验证输入
printf("输入的数组:");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
编译并运行该程序:
gcc mode_calculation.c -o mode_calculation
./mode_calculation
示例输出:
输入元素数量(最大 100): 5
输入 5 个整数:
3 4 2 4 1
输入的数组: 3 4 2 4 1
让我们来分析一下这段代码的关键部分:
#define MAX_SIZE 100
设置了数组的最大限制,以防止溢出。scanf()
用于输入元素数量和数组值。这段代码展示了 C 语言中的基本数组输入,这对于我们的众数计算过程至关重要。在接下来的步骤中,我们将在此基础上进行频率计数并确定众数。
在这一步中,我们将修改之前的程序,计算数组中每个数字的频率,并确定最常见的值(众数)。
打开现有文件并更新代码:
cd ~/project
nano mode_calculation.c
用以下实现替换之前的代码:
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int numbers[MAX_SIZE];
int frequencies[MAX_SIZE] = {0};
int n, i, j, mode = 0, max_frequency = 0;
// 输入元素数量
printf("输入元素数量 (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 计算每个数字的频率
for (i = 0; i < n; i++) {
int count = 1;
for (j = 0; j < n; j++) {
if (i!= j && numbers[i] == numbers[j]) {
count++;
}
}
frequencies[i] = count;
// 跟踪众数
if (count > max_frequency) {
max_frequency = count;
mode = numbers[i];
}
}
// 打印频率
printf("\n频率:\n");
for (i = 0; i < n; i++) {
printf("数字 %d 出现 %d 次\n", numbers[i], frequencies[i]);
}
// 打印众数
printf("\n众数:%d (出现 %d 次)\n", mode, max_frequency);
return 0;
}
编译并运行程序:
gcc mode_calculation.c -o mode_calculation
./mode_calculation
示例输出:
输入元素数量(最大 100): 6
输入 6 个整数:
2 3 4 2 2 5
频率:
2 出现 3 次
3 出现 1 次
4 出现 1 次
2 出现 3 次
2 出现 3 次
5 出现 1 次
众数: 2 (出现 3 次)
此实现中的关键点:
frequencies
数组来存储每个数字的计数。在这最后一步中,我们将增强众数计算程序,以处理多个众数,并提供更全面的统计信息输出。
打开现有文件并更新代码:
cd ~/project
nano mode_calculation.c
用以下实现替换之前的代码:
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int numbers[MAX_SIZE];
int frequencies[MAX_SIZE] = {0};
int unique_numbers[MAX_SIZE];
int n, i, j, unique_count = 0, max_frequency = 0;
// 输入元素数量
printf("输入元素数量 (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 输入数组元素
printf("输入 %d 个整数:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 找出唯一数字及其频率
for (i = 0; i < n; i++) {
int is_unique = 1;
for (j = 0; j < unique_count; j++) {
if (numbers[i] == unique_numbers[j]) {
is_unique = 0;
break;
}
}
if (is_unique) {
unique_numbers[unique_count] = numbers[i];
// 计算此唯一数字的频率
int count = 0;
for (j = 0; j < n; j++) {
if (numbers[i] == numbers[j]) {
count++;
}
}
frequencies[unique_count] = count;
// 更新最大频率
if (count > max_frequency) {
max_frequency = count;
}
unique_count++;
}
}
// 打印详细的众数信息
printf("\n统计分析:\n");
printf("数字总数:%d\n", n);
printf("唯一数字数量:%d\n", unique_count);
printf("\n频率分布:\n");
for (i = 0; i < unique_count; i++) {
printf("数字 %d: %d 次\n",
unique_numbers[i], frequencies[i]);
}
// 打印众数
printf("\n众数:\n");
for (i = 0; i < unique_count; i++) {
if (frequencies[i] == max_frequency) {
printf("- %d (出现 %d 次)\n",
unique_numbers[i], frequencies[i]);
}
}
return 0;
}
编译并运行程序:
gcc mode_calculation.c -o mode_calculation
./mode_calculation
示例输出:
输入元素数量(最大 100): 7
输入 7 个整数:
2 3 4 2 2 5 5
统计分析:
数字总数: 7
唯一数字数量: 4
频率分布:
数字 2: 3 次
数字 3: 1 次
数字 4: 1 次
数字 5: 2 次
众数:
- 2 (出现 3 次)
此版本的主要改进:
在本实验中,你将学习如何在 C 语言中读取数字数组,并计算每个数字的频率以确定众数,众数是数据集中最常见的值。首先,你将创建一个 C 程序,该程序允许输入一组数字,并为频率分析做好准备。然后,你将修改该程序以计算每个数字的频率并确定众数。最后,你将把众数打印到控制台。
完成这些步骤后的关键学习要点如下:
scanf()
函数在 C 语言中读取数字数组。