C语言浮点数求众数(优化版 含详细注释)

"这篇博客介绍了一个C++程序,用于找出数组中的众数(出现次数最多的元素)。程序通过排序和双重循环实现,首先对数组进行升序排序,然后遍历数组寻找出现次数大于或等于一半的元素。如果不存在这样的众数,则输出"NoMods!";否则,程序会输出众数及其出现次数。博客作者欢迎读者交流讨论。"

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 之前发布的那个太草率了,抽空优化了一下,这下可以稍微借鉴一下了

INPUT01:1.1 2.2 3.3

OUTPUT:No mods

INPUT02:1 2 3.1 3.1 3.1

OUTPUT:The Mod:3.1   Frequency of Occurrence:3

INPUT03:-1 -1 -2 -2 -3 -3

OUTPUT:The number of mods:3  Mods:-1,-2,-3   Frequency of Occurrence:2

#include <stdio.h>
#define WRONG -1724
int main(void)
{
	short n,i[7]={[0 ... 6]=1};
	printf("Number:");  scanf("%d",&n);  float ar[n]; //读入n来创建动态数组
	for(i[0]=0;i[0]<n;i[0]++)
	  scanf("%f",ar+i[0]); //读入所需的数据
	for(i[0]=0;i[0]<n-1;i[0]++)
	  for(i[1]=0;i[1]<n-i[0]-1;i[1]++)
	    if(*(ar+i[1])>*(ar+i[1]+1))
	    {
	    	i[2]=*(ar+i[1]);
	    	*(ar+i[1])=*(ar+i[1]+1);
	    	*(ar+i[1]+1)=i[2];
		} //经典的排序方法,将数组从小到大排序
	float sta[10][10]={[0 ... 9]={[0 ... 9]=WRONG}}; //创建二维数组sta,初始化为WRONG是方便后面判断,一维代表出现次数相同的数值有多少个,二维代表某一数值出现的总次数,数组本身储存对应
在C语言中,一组浮点数众数并不是直接内置的功能,因为C语言本身并不支持复杂的数据结构处理。不过你可以通过创建一个自定义函数结合数组或者链表来实现这个功能。这里是一个简单的思路: 1. 定义一个大小足够的哈希表(如数组或动态分配的内存),用于存储每个浮点数值及其出现的次数。 2. 遍历输入的浮点数数组,对于每一个元素: - 如果该元素已经在哈希表中,将其计数加一; - 否则,在哈希表中创建一个新的键值对,值设为1。 3. 遍历哈希表,找到出现次数最多的值。这可以通过遍历哈希表并维护一个最大计数变量以及对应的众数值来完成。 以下是一个简化的伪代码示例: ```c #include <stdio.h> #include <stdlib.h> // 哈希表数据结构(这里假设是一个数组,实际应用中可以使用链表) typedef struct { float num; int count; } Frequency; float findMode(float arr[], int n) { // 初始化哈希表 Frequency *hash = malloc(n * sizeof(Frequency)); for (int i = 0; i < n; ++i) hash[i].count = 0; // 更新哈希表 for (int i = 0; i < n; ++i) { hash[(int)arr[i]].count++; } // 找到众数 float mode = arr[0]; int max_count = 1; for (int i = 0; i < n; ++i) { if (hash[i].count > max_count) { max_count = hash[i].count; mode = arr[i]; } } free(hash); return mode; } int main() { float numbers[] = {1.5, 2.0, 2.0, 3.0, 3.0, 3.0}; int size = sizeof(numbers) / sizeof(numbers[0]); float mode = findMode(numbers, size); printf("众数是: %f\n", mode); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值