⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pro.c.txt

📁 这是用于综合评判的c语言代码
💻 TXT
字号:
#include<stdio.h>
struct stand
{
float b[100][100];
float bh[100][100];
float b2[100][100];
};
struct stand  h[100];
struct stand  h1[100];
struct stand  w2[100];
struct stand  h2[100];
//一致性检验
int check(float r[],int n,int m)
{double RI,CI[15],CR[15];
  int i;
  switch(n)
  {case 1:
  case 2:RI=0;break;
  case 3:RI=0.58;break;
  case 4:RI=0.9;break;
  case 5:RI=1.12;break;
  case 6:RI=1.24;break;
  case 7:RI=1.32;break;
  case 8:RI=1.41;break;
  case 9:RI=1.45;break;
  case 10:RI=1.49;break;
  case 11:RI=1.51;break;
  default :printf("erro\n");
  }
  for(i=0;i<m;i++)
  CI=(r-n)/(n-1);
  CR=CI/RI;
  for(i=0;i<m;i++)
  {if(CR<0.1)
          return(1);
  else
          return(0);}
}


void main()
{
        int i,j,input,output=1,middle,s1,s2[100],n,v,t1;
        float c[100][100],m,c1[100][100];
        float r1[1],r2[100],w1[100][1],w[100];
        float sum1[100],bht[100][1],t[100],t2=0;
        float sum2[100],sum[100];
    for(i=0;i<100;i++)
        {   sum1=0;
            w1[0]=0;
                w=0;
                t=0;
                sum2=0;
                bht[0]=0;
                sum=0;
        }
        for(j=0;j<100;j++)
    for(i=0;i<100;i++)
                h2[j].bh[0]=0;
        printf("      请输入准则层元素的个数:");
                scanf("\n%d",&middle);
        printf("      请输入方案层元素的个数:");
                scanf("\n%d",&input);
                        printf("下面输入准则层对目标层的相对矩阵(0-9):\n");
            //for(i=0;i<middle;i++)
                             //c=1;
            for(i=0;i<middle;i++)
                        for(j=0;j<middle;j++)
                                { 
                                printf("%d对%d的权重为:",i+1,j+1);
                                scanf("%f",&c[j]);
                                }
            for(i=0;i<middle;i++)
                        for(j=0;j<middle;j++)
                                c1[j]=c[j];
                 for(j=0;j<middle;j++)
                    for(i=0;i<middle;i++)
                                sum1[j]=sum1[j]+c[j];
            for(j=0;j<middle;j++)
                    for(i=0;i<middle;i++)
                                c[j]=c[j]/sum1[j];
                for(i=0;i<middle;i++)
                        for(j=0;j<middle;j++)
                                w1[0]+=c[j];
                for(i=0;i<middle;i++)
                            sum2[0]+=w1[0];
                for(i=0;i<middle;i++)
                            w1[0]=w1[0]/sum2[0];
                for(i=0;i<middle;i++)
                 for(j=0;j<middle;j++)
                            bht[0]=bht[0]+c1[j]*w1[j][0];
            for(i=0;i<middle;i++)
                            t2=t2+bht[0]/w1[0];
                        r1[0]=t2/middle;
                    s1=check(r1,middle,1);
             if(s1==0)
                        printf("未通过一致性检验,请重新输入权重!");
      /*************************这里为检验输出****************************/
                                printf("********准则层对目标层的权向量*********\n");
              for(i=0;i<middle;i++)  
                    printf("         %f\n",w1[0]);
                                printf("最大特征根为:%f\n",r1[0]);
      /*******************************************************************/
             for(n=0;n<middle;n++)
                     for(i=0;i<input;i++)
                                         w2[n].b2[0]=0;
            printf("下面输入方案层对准则层的相对矩阵:\n");
               for(n=0;n<middle;n++)
            for(i=0;i<input;i++)
            for(j=0;j<input;j++)
                        {
                                printf("方案%d对方案%d相对准则%d的权重为:",i+1,j+1,n+1);
                scanf("%f",&h[n].b[j]);
                        }
          for(n=0;n<middle;n++)
            for(i=0;i<input;i++)
            for(j=0;j<input;j++)
                                h1[n].b[j]=h[n].b[j];
             for(n=0;n<middle;n++)
                 for(j=0;j<input;j++)
                         for(i=0;i<input;i++)
                        sum1[j]=sum1[j]+h[n].b[j];
             for(n=0;n<middle;n++)
                 for(j=0;j<input;j++)
                          for(i=0;i<input;i++)
                        h[n].b[j]=h[n].b[j]/sum1[j];
             for(n=0;n<middle;n++)
                     for(i=0;i<input;i++)
                              for(j=0;j<input;j++)
                    w2[n].b2[0]+=h[n].b[j];
            for(n=0;n<middle;n++)
                     for(i=0;i<input;i++)
                              sum[n]=sum[n]+w2[n].b2[0];
                               for(n=0;n<middle;n++)
                     for(i=0;i<input;i++)
                    w2[n].b2[0]=w2[n].b2[0]/sum[n];
             for(n=0;n<middle;n++)
                     for(i=0;i<input;i++)
                      for(j=0;j<input;j++)
                    h2[n].bh[0]=h2[n].bh[0]+h1[n].b[j]*w2[n].b2[j][0];
             for(n=0;n<middle;n++)
                 for(i=0;i<input;i++)
                    t[n]=t[n]+h2[n].bh[0]/w2[n].b2[0];
             for(n=0;n<middle;n++)
                         {
                                 r2[n]=t[n]/input;
                             s2[n]=check(r2,input,middle);                         
                        }
           /*********************这里为检验输出**********************/
                         printf("************方案层对准则层的权向量**********\n");
             for(i=0;i<input;i++)             
                         {
                                 for(n=0;n<middle;n++)
                             printf("    %f",w2[n].b2[0]);
                                 printf("\n");
                         }
                             printf("最大特征根为:");
             for(n=0;n<middle;n++)
                                 printf("      \n%f      ",r2[n]);
       /*********************************************************/
             for(n=0;n<middle;n++)
                         if(s2[n]==0)                                 
                         {printf("未通过一致性检验,请重新输入!");}
                         for(n=0;n<input;n++)
                   for(i=0;i<middle;i++)
              w[n]=w[n]+w1[0]*w2.b2[n][0];
                   printf("\n*****************输出结果*****************\n");
           for(t1=0;t1<input;t1++)
                   printf("   方案%d     ",t1+1);
                   printf("\n");
            for(t1=0;t1<input;t1++)
                printf("  %f  ",w[t1]);
                printf("\n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -