導航:首頁 > 源碼編譯 > 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均值演算法的實現相關的資料

熱點內容
怎麼雙向傳輸伺服器 瀏覽:286
電腦如何實現跨網段訪問伺服器 瀏覽:549
模塊化網頁源碼位元組跳動 瀏覽:485
梯度下降演算法中遇到的問題 瀏覽:605
伺服器連接電視怎麼接 瀏覽:323
phploop語句 瀏覽:500
交叉編譯工具鏈里的庫在哪 瀏覽:781
安卓手q換號怎麼改綁 瀏覽:399
nba球星加密貨幣 瀏覽:789
命令看網速 瀏覽:124
java堆分配 瀏覽:161
linuxbuiltin 瀏覽:560
cstpdf 瀏覽:941
texstudio編譯在哪 瀏覽:352
國家反詐中心app注冊登記表怎麼注冊 瀏覽:972
加密機默認埠 瀏覽:101
有哪個網站有免費的python源代碼 瀏覽:305
蘋果手機如何導入安卓電話 瀏覽:915
奧利奧雙重解壓 瀏覽:388
安卓賬號怎麼在蘋果手機上玩 瀏覽:798