如何编写 C 语言程序来统计数组中各元素的出现频率?在阅读本文之前,请参考数组文章以了解大小、索引位置等概念。
C 语言统计数组中各元素出现频率的示例
该程序要求用户输入数组大小和元素。接下来,它将找出该数组中每个元素出现的频率(总次数)。
#include <stdio.h>
int main()
{
int arr[10], FreqArr[10], i, j, Count, Size;
printf("\n Please Enter Number of elements in an array : ");
scanf("%d", &Size);
printf("\n Please Enter %d elements of an Array : ", Size);
for (i = 0; i < Size; i++)
{
scanf("%d", &arr[i]);
FreqArr[i] = -1;
}
for (i = 0; i < Size; i++)
{
Count = 1;
for(j = i + 1; j < Size; j++)
{
if(arr[i] == arr[j])
{
Count++;
FreqArr[j] = 0;
}
}
if(FreqArr[i] != 0)
{
FreqArr[i] = Count;
}
}
printf("\n Frequency of All the Elements in this Array are : \n");
for (i = 0; i < Size; i++)
{
if(FreqArr[i] != 0)
{
printf("%d Occurs %d Times \n", arr[i], FreqArr[i]);
}
}
return 0;
}

在这个统计数组中各元素出现频率的程序中,我们声明了一个大小为 10 的一维数组 arr[],并声明了变量 i 用于遍历元素。
第一个 C 编程 printf 语句要求用户输入数组 arr[] 的大小(数组可以容纳的元素数量)。scanf 语句会将用户输入的数值赋给 Size 变量。
第一个 For 循环将帮助遍历 arr[5] 数组中的每个单元格。For 循环内的条件 (i < Size) 确保编译器不会超出限制。
For 循环内的 scanf 语句会将用户输入的数值存储到每个单独的数组元素中。例如 arr[0], arr[1], arr[2], arr[3], arr[4]。FreqArr[i] = -1 表示我们尚未开始计算某个元素的频率。
下一行,我们还有两个 For 循环来遍历数组中的每个元素。If 语句用于检查重复项。
从上面的截图可以看出,用户为 C 语言统计数组中各元素出现频率的程序输入的数值是:
a[5] = {10, 20, 20, 10, 50}
第一个 For 循环 – 第一次迭代:for(i = 0; i < 5; 0++)
条件 (0 < 5) 为真。
Count = 1
第二个 For 循环 – 第一次迭代:for(j = 0 + 1; 1 < 5; 1++)
条件 (1 < 5) 为真。因此,它将开始执行循环内的语句。
if(arr[i] == arr[j])
if(10 == 20) – 条件为假。
第二个 For 循环 – 第二次迭代:for(j = 2; 2 < 5; 2++)
条件 (2 < 5) 为真。
if(arr[i] == arr[j])
if(10 == 20) – 条件为假。
第二个 For 循环 – 第三次迭代:for(j = 3; 3 < 5; 3++)
C 语言统计数组中各元素出现频率的程序中的条件 (3 < 5) 为真。
if(arr[i] == arr[j])
if(10 == 10) – 条件为真。
Count++ 表示 Count = 2。
FreqArr[j] = 0
第二个 For 循环 – 第四次迭代:for(j = 4; 4 < 5; 4++)
条件 (4 < 5) 为真。
if(arr[i] == arr[j])
if(10 == 50) – 条件为假。
第二个 For 循环 – 第五次迭代:for(j = 5; 5 < 5; 5++)
条件 (5 < 5) 为假。因此,编译器将退出第二个 For 循环。
接下来,它将进入 If 语句。
if(FreqArr[i] != 0)
FreqArr[0] = Count => 2
对剩余的迭代执行相同的操作。
最后,我们使用 For 循环打印元素。我建议您参考打印元素文章以了解循环。
C 语言统计数组中各元素出现频率的示例 2
在我们之前的程序中,我们计算了数组中每个元素的频率。此程序允许用户选择数组元素并使用 IF Else 语句检查该特定元素的频率。
#include <stdio.h>
int main()
{
int arr[10], i, j, k, Size;
printf("\n Please Enter Number of elements in an array : ");
scanf("%d", &Size);
printf("\n Please Enter %d elements of an Array \n", Size);
for (i = 0; i < Size; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i < Size; i++)
{
for(j = i + 1; j < Size;)
{
if(arr[i] == arr[j])
{
for(k = j; k < Size; k++)
{
arr[k] = arr[k + 1];
}
Size--;
}
else
{
j++;
}
}
}
printf("\n Final Array after Deleteing Duplicate Array Elements is:\n");
for (i = 0; i < Size; i++)
{
printf("%d\t", arr[i]);
}
return 0;
}
