📄 quotation_ analyser.c
字号:
//in.txt:存放所有报价
//out.txt:存放10个子报价分析结果
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define CN 22 //单位个数
#define RN 10 //随机选取的子报价个数
#define QN 13 //报价子项数
void sort(float rn[][CN]) //对报价进行排序
{
int i,j,k;
float swap;
for(k=0;k<RN;k++)
{
for(i=1;i<CN-1;i++)
{
for(j=1;j<CN-i;j++)
{
if(rn[k][j]>rn[k][j+1])
{
swap=rn[k][j];
rn[k][j]=rn[k][j+1];
rn[k][j+1]=swap;
}
}
}
}
//for(i=0;i<RN;i++)
}
float getb(float rn[][CN],int n) //获得B值
{
float sum=0;
int i;
for(i=1;i<CN;i++)
sum+=rn[n][i];
// printf("%d ",sum);
if(CN>10 && CN<=15) //10<num<=15的情况
{
sum-=rn[n][1]-rn[n][2]-rn[n][CN-2]-rn[n][CN-1];
return sum/(float)(CN-5);
}
if(CN>15) // num>15的情况
{
sum=sum-rn[n][1]-rn[n][2]-rn[n][CN-2]-rn[n][CN-1]-rn[n][3]-rn[n][CN-1];
return sum/(float)(CN-7);
}
return 0;
}
void getrandomnum(float rn[][CN],float an[][CN],float result[][CN]) //获得10个随机不重复的子报价
{
int i,j,random;
srand((unsigned)time(NULL));
for(i=0;i<RN;i++)
{
random=rand()%(QN-1)+1;
while(1) //避免重复选取
{
if(an[random][0]==0)
{
rn[i][0]=(float)random;
result[i][0]=(float)random;
for(j=1;j<CN;j++)
rn[i][j]=an[random][j];
an[random][0]=1;
break;
}
random=rand()%(QN-1)+1;
}
}
}
void getresult(float rn[][CN],float result[][CN],float an[][CN]) //获得分析结果
{
int i,j,k;
float b;
for(i=0;i<RN;i++)
{
b=getb(rn,i);
j=(int)rn[i][0];
for(k=1;k<CN;k++)
{
if(an[j][k]<0.95*b)
result[i][k]-=(float)((0.95*b-an[j][k])/b*100*0.05);
else
{
if(an[j][k]>1.05*b)
result[i][k]-=(float)((an[j][k]-1.05*b)/b*100*0.1);
}
if(result[i][k]<0)
result[i][k]=0;
}
}
}
void main()
{
int i,j;
float allnum[QN][CN]; //存放所有报价,第一列为标志位
float randomnum[RN][CN];
float result[RN][CN]; //存放得分,第一列为随机选取的子报价项
FILE *fp;
for(i=0;i<RN;i++)
for(j=1;j<CN;j++)
result[i][j]=2.00;
fp=fopen("in.txt","r");
if( !fp)
{
printf("can't open file ,exiting ...\n");
exit(1);
}
for(i=1;i<QN;i++)
{
for(j=1;j<CN;j++)
fscanf(fp,"%f " ,&allnum[i][j]);
allnum[i][0]=0;
}
fclose(fp);
getrandomnum(randomnum,allnum,result);
sort(randomnum);
getresult(randomnum,result,allnum);
fp=fopen("out.txt","w");
if( !fp)
{
printf("can't open file ,exiting ...\n");
exit(1);
}
for(i=65;i<=85;i++)
fprintf(fp," %3c",i);
fprintf(fp,"\n");
for(i=0;i<RN;i++)
{
fprintf(fp," %2.0f:",result[i][0]);
for(j=1;j<CN-1;j++)
fprintf(fp,"%3.2f ",result[i][j]);
fprintf(fp,"%3.2f\n",result[i][CN-1]);
}
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -