C语言 在文件中存放的均为40至60之间的正整数,要求统计每个正整数出现的次数,按次数升序排序并输出?

在文件in.dat中存放的均为40至60之间的正整数,要求统计每个正整数出现的次数,按次数升序排序并输出。

第1个回答  2023-03-10
参考代码如下:

#include <stdio.h>
#define N 100 //定义数组长度为100,假设文件中的最大正整数不超过100
int main()
{
FILE *fp; //定义文件指针
int a[N] = {0}; //定义一个数组,用来存放每个正整数出现的次数,初始值都为0
int num; //定义一个变量,用来读取文件中的每个数字
int i, j, t; //定义三个变量,用来进行排序操作
fp = fopen("in.dat", "r"); //打开文件in.dat,并以只读模式打开
if (fp == NULL) //判断文件是否打开成功
{
printf("Can not open file!\n"); //如果失败,输出提示信息并退出程序
return -1;
}
while (fscanf(fp, "%d", &num) != EOF) //循环读取文件中的每个数字,直到文件结束
{
a[num]++; //如果是,则对应的数组元素加1,表示该数字出现了一次
}
fclose(fp); //关闭文件

for (i = 0; i < N - 1; i++) //对数组进行冒泡排序,按照出现次数从小到大排列
{
for (j = 0; j < N - i - 1; j++)
{
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}

for (i = 0; i < N; i++) //输出排序后的结果
{
if (a[i] > 0) //只输出出现过的正整数及其次数
{
printf("%d: %d\n", i, a[i]);
}

}

}
相似回答