导航:首页 > 源码编译 > c均值算法的实现

c均值算法的实现

发布时间:2023-02-06 22:24:43

Ⅰ C语言编从键盘输入十个数,计算其平均值,并将大于平均值的数输出

源代码如下:

#include <stdio.h>

int main()

{

int n, i;

float num[100], sum = 0.0, average;

printf("输入元素个数: ");

scanf("%d", &n);

while (n > 100 || n <= 0)

{

printf("Error! 数字需要在1 到 100 之间。 ");

printf("再次输入: ");

scanf("%d", &n);

}

for(i = 0; i < n; ++i)

{

printf("%d. 输入数字: ", i+1);

scanf("%f", &num[i]);

sum += num[i];

}

average = sum / n;

printf("平均值 = %.2f", average);

return 0;

}

(1)c均值算法的实现扩展阅读

C语言自定义名字的要求

1、可以使用大小写字母、下划线、数字,但第一个字母必须是字母或者下划线。

2、字母区分大小写,BASIC语言不区分大小写。

Ⅱ 编写一个程序,求两个数的平均值(用C语言)

例子如下:

知识扩展:

算术平均数( arithmetic mean),又称均值,是统计学中最基本、最常用的一种平均指标,分为简单算术平均数、加权算术平均数。它主要适用于数值型数据,不适用于品质数据。

算术平均数是加权平均数的一种特殊形式(特殊在各项的权重相等)。在实际问题中,当各项权重不相等时,计算平均数时就要采用加权平均数;当各项权相等时,计算平均数就要采用算术平均数。

Ⅲ C语言输入三个整数,计算并输出它们的平均值

int main(void)可以修改成void main。getchar()是为了程序不立刻返回,能够看到屏幕输出的数据,也可以不使用。

输入三个整数计算并输出它们的平均值的源代码如下:

#include<bits/stdc++.h>

using namespace std;

int main(){

int a,b,c;

cin>>a>>b>>c;

cout<<(a+b+c)/3;

return 0;

}

(3)c均值算法的实现扩展阅读

求整数的和与均值的源代码如下:

#include<bits/stdc++.h>

using namespace std;

int main(){

long long n,a;

cin>>n;

long long sum=0;

double pjz;

for(long long i=1;i<=n;i++)

{

cin>>a;

sum+=a;

}

pjz=sum/(double)n;

printf("%lld %.5lf",sum,pjz);

return 0;

}

Ⅳ 模糊C均值聚类算法(FCM)

【嵌牛导读】FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种柔性的模糊划分。

【嵌牛提问】FCM有什么用?

【嵌牛鼻子】模糊C均值聚类算法

【嵌牛正文】

聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类、图像处理和模糊规则处理等众多领域中获得最广泛的应用。它把一个没有类别标记的样本按照某种准则划分为若干子集,使相似的样本尽可能归于一类,而把不相似的样本划分到不同的类中。硬聚类把每个待识别的对象严格的划分某类中,具有非此即彼的性质,而模糊聚类建立了样本对类别的不确定描述,更能客观的反应客观世界,从而成为聚类分析的主流。

模糊聚类算法是一种基于函数最优方法的聚类算法,使用微积分计算技术求最优代价函数,在基于概率算法的聚类方法中将使用概率密度函数,为此要假定合适的模型,模糊聚类算法的向量可以同时属于多个聚类,从而摆脱上述问题。 模糊聚类分析算法大致可分为三类:

1)分类数不定,根据不同要求对事物进行动态聚类,此类方法是基于模糊等价矩阵聚类的,称为模糊等价矩阵动态聚类分析法。

2)分类数给定,寻找出对事物的最佳分析方案,此类方法是基于目标函数聚类的,称为模糊C 均值聚类。

3)在摄动有意义的情况下,根据模糊相似矩阵聚类,此类方法称为基于摄动的模糊聚类分析法。

我所学习的是模糊C 均值聚类算法,要学习模糊C 均值聚类算法要先了解虑属度的含义,隶属度函数是表示一个对象x 隶属于集合A 的程度的函数,通常记做μA (x),其自变量范围是所有可能属于集合A 的对象(即集合A 所在空间中的所有点),取值范围是[0,1],即0<=μA (x)<=1。μA (x)=1表示x 完全隶属于集合A ,相当于传统集合概念上的x ∈A 。一个定义在空间X={x}上的隶属度函数就定义了一个模糊集合A ,或者叫定义在论域X={x}上的模糊子集A 。对于有限个对象x 1,x 2,……,x n 模糊集合A 可以表示为:A ={(μA (x i ), x i ) |x i ∈X } (6.1)

有了模糊集合的概念,一个元素隶属于模糊集合就不是硬性的了,在聚类的问题中,可以把聚类生成的簇看成模糊集合,因此,每个样本点隶属于簇的隶属度就是[0,1]区间里面的值。

FCM 算法需要两个参数一个是聚类数目C ,另一个是参数m 。一般来讲C 要远远小于聚类样本的总个数,同时要保证C>1。对于m ,它是一个控制算法的柔性的参数,如果m 过大,则聚类效果会很次,而如果m 过小则算法会接近HCM 聚类算法。算法的输出是C 个聚类中心点向量和C*N的一个模糊划分矩阵,这个矩阵表示的是每个样本点属于每个类的隶属度。根据这个划分矩阵按照模糊集合中的最大隶属原则就能够确定每个样本点归为哪个类。聚类中心表示的是每个类的平均特征,可以认为是这个类的代表点。从算法的推导过程中我们不难看出,算法对于满足正态分布的数据聚类效果会很好。

通过实验和算法的研究学习,不难发现FCM算法的优缺点:

首先,模糊c 均值泛函Jm 仍是传统的硬c 均值泛函J1 的自然推广。J1 是一个应用很广泛的聚类准则,对其在理论上的研究已经相当的完善,这就为Jm 的研究提供了良好的条件。

其次,从数学上看,Jm与Rs的希尔伯特空间结构(正交投影和均方逼近理论) 有密切的关联,因此Jm 比其他泛函有更深厚的数学基础。

最后,FCM 聚类算法不仅在许多邻域获得了非常成功的应用,而且以该算法为基础,又提出基于其他原型的模糊聚类算法,形成了一大批FCM类型的算法,比如模糊c线( FCL) ,模糊c面(FCP) ,模糊c壳(FCS) 等聚类算法,分别实现了对呈线状、超平面状和“薄壳”状结构模式子集(或聚类) 的检测。

模糊c均值算法因设计简单,解决问题范围广,易于应用计算机实现等特点受到了越来越多人的关注,并应用于各个领域。但是,自身仍存在的诸多问题,例如强烈依赖初始化数据的好坏和容易陷入局部鞍点等,仍然需要进一步的研究。

Ⅳ c语言实现输入n个数并求平均值

#include<stdio.h>

int main()

{

int num;

double sum = 0;

int count = 0;

while(scanf("%d", &num) && num != -1)//输入-1停止

{

sum += num;

count++;

}

printf("%f", sum / count);

return 0;

}

(5)c均值算法的实现扩展阅读:

程序解析:

先将变量初始化,采用while循环,设置循环标志(直接采用scanf()函数,直到输入一个负数-1)结束循环。最后采用printf()函数输出即可。注意数据类型的转换。

Ⅵ c算法 求平均值问题(递归)

*n就是乘以n的意思啊
设这组数字是 4 5 2 4 7 88(共6 个)
一开始f->link 肯定不是NULL了,所以一直往下递归,直到最后一个元素时,f->link 等于了NULL,n也就变为了1,return回去的就是最后一个元素88了,而返还回去的值给了 倒数第二个递归,即sum=88*1,n++(n变为了2),然后返还(88*1+7)/2(即最后两项的平均值),然后再sum=【(88*1+7)/2】*2(最后两项的和),n++(n等于了3),返还(88*1+2+4)/3(即最后3项的平均值).......依次类推到链首部,就这样了

希望你能理解

Ⅶ C语言求平均值

你好!

#include<stdio.h>

intmain(void)
{
doublex=0,z=0;
inty=0;
inty1=0;

printf("请输入10个数,空格分开:");
for(y=0;y<10;y++)
{
scanf("%lf",&x);
if(z>=0)
{
z=z+x;
y1++;
}
getchar();
}
printf("平均数是:%.2lf ",z/y1);
return0;
}

Ⅷ 模糊c均值算法matlab程序

function [center, U, obj_fcn] = FCMClust(data, cluster_n, options)
% FCMClust.m 采用模糊C均值对数据集data聚为cluster_n类
%
% 用法:
% 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options);
% 2. [center,U,obj_fcn] = FCMClust(Data,N_cluster);
%
% 输入:
% data ---- nxm矩阵,表示n个样本,每个样本具有m的维特征值
% N_cluster ---- 标量,表示聚合中心数目,即类别数
% options ---- 4x1矩阵,其中
% options(1): 隶属度矩阵U的指数,>1 (缺省值: 2.0)
% options(2): 最大迭代次数 (缺省值: 100)
% options(3): 隶属度最小变化量,迭代终止条件 (缺省值: 1e-5)
% options(4): 每次迭代是否输出信息标志 (缺省值: 1)
% 输出:
% center ---- 聚类中心
% U ---- 隶属度矩阵
% obj_fcn ---- 目标函数值
% Example:
% data = rand(100,2);
% [center,U,obj_fcn] = FCMClust(data,2);
% plot(data(:,1), data(:,2),'o');
% hold on;
% maxU = max(U);
% index1 = find(U(1,:) == maxU);
% index2 = find(U(2,:) == maxU);
% line(data(index1,1),data(index1,2),'marker','*','color','g');
% line(data(index2,1),data(index2,2),'marker','*','color','r');
% plot([center([1 2],1)],[center([1 2],2)],'*','color','k')
% hold off;

if nargin ~= 2 & nargin ~= 3, %判断输入参数个数只能是2个或3个
error('Too many or too few input arguments!');
end

data_n = size(data, 1); % 求出data的第一维(rows)数,即样本个数
in_n = size(data, 2); % 求出data的第二维(columns)数,即特征值长度
% 默认操作参数
default_options = [2; % 隶属度矩阵U的指数
100; % 最大迭代次数
1e-5; % 隶属度最小变化量,迭代终止条件
1]; % 每次迭代是否输出信息标志

if nargin == 2,
options = default_options;
else %分析有options做参数时候的情况
% 如果输入参数个数是二那么就调用默认的option;
if length(options) < 4, %如果用户给的opition数少于4个那么其他用默认值;
tmp = default_options;
tmp(1:length(options)) = options;
options = tmp;
end
% 返回options中是数的值为0(如NaN),不是数时为1
nan_index = find(isnan(options)==1);
%将denfault_options中对应位置的参数赋值给options中不是数的位置.
options(nan_index) = default_options(nan_index);
if options(1) <= 1, %如果模糊矩阵的指数小于等于1
error('The exponent should be greater than 1!');
end
end
%将options 中的分量分别赋值给四个变量;
expo = options(1); % 隶属度矩阵U的指数
max_iter = options(2); % 最大迭代次数
min_impro = options(3); % 隶属度最小变化量,迭代终止条件
display = options(4); % 每次迭代是否输出信息标志

obj_fcn = zeros(max_iter, 1); % 初始化输出参数obj_fcn

U = initfcm(cluster_n, data_n); % 初始化模糊分配矩阵,使U满足列上相加为1,
% Main loop 主要循环
for i = 1:max_iter,
%在第k步循环中改变聚类中心ceneter,和分配函数U的隶属度值;
[U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);
if display,
fprintf('FCM:Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
end
% 终止条件判别
if i > 1,
if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro,
break;
end,
end
end

iter_n = i; % 实际迭代次数
obj_fcn(iter_n+1:max_iter) = [];

% 子函数
function U = initfcm(cluster_n, data_n)
% 初始化fcm的隶属度函数矩阵
% 输入:
% cluster_n ---- 聚类中心个数
% data_n ---- 样本点数
% 输出:
% U ---- 初始化的隶属度矩阵
U = rand(cluster_n, data_n);
col_sum = sum(U);
U = U./col_sum(ones(cluster_n, 1), :);

% 子函数
function [U_new, center, obj_fcn] = stepfcm(data, U, cluster_n, expo)
% 模糊C均值聚类时迭代的一步
% 输入:
% data ---- nxm矩阵,表示n个样本,每个样本具有m的维特征值
% U ---- 隶属度矩阵
% cluster_n ---- 标量,表示聚合中心数目,即类别数
% expo ---- 隶属度矩阵U的指数
% 输出:
% U_new ---- 迭代计算出的新的隶属度矩阵
% center ---- 迭代计算出的新的聚类中心
% obj_fcn ---- 目标函数值
mf = U.^expo; % 隶属度矩阵进行指数运算结果
center = mf*data./((ones(size(data, 2), 1)*sum(mf'))'); % 新聚类中心(5.4)式
dist = distfcm(center, data); % 计算距离矩阵
obj_fcn = sum(sum((dist.^2).*mf)); % 计算目标函数值 (5.1)式
tmp = dist.^(-2/(expo-1));
U_new = tmp./(ones(cluster_n, 1)*sum(tmp)); % 计算新的隶属度矩阵 (5.3)式

% 子函数
function out = distfcm(center, data)
% 计算样本点距离聚类中心的距离
% 输入:
% center ---- 聚类中心
% data ---- 样本点
% 输出:
% out ---- 距离
out = zeros(size(center, 1), size(data, 1));
for k = 1:size(center, 1), % 对每一个聚类中心
% 每一次循环求得所有样本点到一个聚类中心的距离
out(k, :) = sqrt(sum(((data-ones(size(data,1),1)*center(k,:)).^2)',1));
end

Ⅸ c语言 求平均数 设计求n个整数平均值的函数int average(int *p , int n),计算并返回指针p指向的存储区域

#include <stdio.h>
#include<malloc.h>

void average( float *p, int n )
{
int i,sum = 0,num;

for(i=0;i<n;i++)
{
printf("input the %d number:\n",i+1);
scanf("%d",&num);
sum += num;
}
*p = (float)sum/(float)n;

return ;
}

int main()
{
int n;
float num;

printf("input the number of numbers:\n");
scanf("%d",&n);
average(&num,n);
printf("the final average is %.2f\n",num);

return 0;
}
按照你的题目意思,稍微改了下,题目是要用*p指针来返回结果,所以只要在average函数内对*p赋值,那么main函数就能得到这个值,不知道你要打开文件做什么的,没看到题目有这个要求,就去掉了,既然先输入数字个数,那么接下来肯定要输入对应个数的数字,既然average没有这个参数进行传递,只能到average内部去接收了,另外题目并不需要保留输入的数字,所以也不用定义数组,用一个变量不停地替换接收就行了,回到主函数打印最后结果就可以了。。。
平均值用float类型,打印%.2f意思是保留小数点后2位。。。

Ⅹ 用C语言设计一个求三个数平均值的程序

考虑到是初学者,所以用最简单的思路来一个程序,定义四个变量,三个变量用于存储输入的三个数,第四个变量用于存储所求的平均数。

代码如下:

int main()

{

int a=0,b=0,c=0,average=0;

scanf("%d %d %d",&a, &b, &c);

average = (a+b+c)/3;

printf("%d", average);

return 0;

}

下图中有注释于结果测试:

阅读全文

与c均值算法的实现相关的资料

热点内容
杀破狼2结局都死了吗 浏览:437
主角叫陆宇的小说排行榜 浏览:944
程序员害怕去酒吧 浏览:121
有部很肉的写大学的小说 浏览:421
鬼习班 浏览:699
十四路末班车鬼片电影完整版免费 浏览:349
日本电影 网站 浏览:357
抗战大片60部 浏览:67
校园卡是否经过加密 浏览:270
泰国电影免费 浏览:43
女主通过系统慢慢变美的小说 浏览:483
国术电影大全 浏览:756
三星贴片机离线编程 浏览:669
完美世界txt下载全本精校小说 浏览:935
轰炸机电影有哪些 浏览:906
国外嗨皮咳嗽服务器地址 浏览:101
爱妾电影里面女演员的名字 浏览:693
电子回单溯源码 浏览:318
幽幻僵尸演员 浏览:83
女主重生从小就有系统变美 浏览:865