/*
*Author:Lu Daze
*Last modified time: Feb 4th, 2021
*Function: Bayesian minimum wrong decision
*/#include<stdio.h>#include<stdlib.h>#include<math.h>intmain(){// the number of classesint n_class;// The index of max numberint in_d;// denominatordouble denominator=0.0;// apply a one dimensional array for these classesprintf("How many classes can wo choose?\n");scanf("%d",&n_class);double*prior_p,*Den_f,*molecure,*result,*cresult;
prior_p=(double*)calloc(n_class,sizeof(double));//class conditional probability density function
Den_f=(double*)calloc(n_class,sizeof(double));// molecure
molecure=(double*)calloc(n_class,sizeof(double));// The result of caculation
result=(double*)calloc(n_class,sizeof(double));// to copy result
cresult=(double*)calloc(n_class,sizeof(double));// the prior probability of classesprintf("Enter the prior paobability of the classes:\n");for(int i=0;i<n_class;i++)scanf("%lf",&prior_p[i]);printf("Enter the %d class conditional probability density functions please:\n",n_class);for(int i=0;i<n_class;i++)scanf("%lf",&Den_f[i]);for(int i=0;i<n_class;i++)
molecure[i]=Den_f[i]*prior_p[i];// caculate denominatorfor(int i=0;i<n_class;i++)
denominator+=molecure[i];// The result of caculationfor(int i=0;i<n_class;i++)
result[i]=molecure[i]/denominator;// copy result before sort, wihch is used to find the max number's index
cresult=result;// display the resultprintf("The result are:\n");for(int i=0;i<n_class;i++)printf("%lf ",result[i]);printf("\n");//compare all the results, find the last onefor(int i=0;i<n_class-1;i++){if(result[i]>result[i+1]){double min=result[i+1];
result[i+1]=result[i];
result[i]=min;}}// Find the indexfor(int i=0;i<n_class;i++){if(cresult[i]==result[n_class]){//index
in_d=i;break;}elsecontinue;}printf("The object belongs to class %d!\n",in_d+1);free(prior_p);free(Den_f);free(molecure);free(result);//free(cresult);printf("The danamic array prior_p, Den_f, result, molecure, cresult have been released!\n");return0;}