长春工业大学课程设计程序代码课程设计名称运筹学课程设计专业信息管理与信息系统班级130506班学生姓名于松南、张鑫蕊、赵改玲、赵海潮指导教师王亚君、王忠吉2015年7月3日#includestdio.h#includemath.hintm;//记录约束条件方程组的个数intn;//记录未知量的个数floatM=1000000.0;floatA[100][100];//用于记录方程组的数目和系数floatC[100];//用于存储目标函数中各个变量的系数floatb[100];//用于存储常约束条件中的常数floatCB[100];//用于存储基变量的系数floatseta[100];//存放出基与入基的变化情况floatcn[100];//存储检验数矩阵floatx[100];intnum[100];//用于存放出基与进基变量的情况floatZ=0;//记录目标函数值voidshuru();voidprint();intmincz();intfind_line(inta);voidexchange(inta,intb);intmain(){inti,j=0;intp,q,temp;//q:换入,p:换出shuru();printf(\n--------------------------------------------------------------------------\n);printf(\tCB\tXB\tb\t);for(i=0;in;i++)printf(X(%d)\t,i+1);for(i=0;in;i++)x[i]=0;printf(\n);while(1){q=mincz();if(q==-1){print();printf(\n所得解已经是最优解!\n);printf(\n最优解为:\n);for(j=0;jm;j++){temp=num[j]-1;x[temp]=b[j];}for(i=0;in;i++){printf(x%d=%.2f,i+1,x[i]);Z=Z+x[i]*C[i];}printf(Z=%.2f,Z);break;}print();p=find_line(q);printf(\np=%d,q=%d,p,q);if(q==-1)break;exchange(p,q);}return0;}intmincz(){inti,k=0;intflag=0;//检验数标记floatmin=0;for(i=0;in;i++)if(cn[i]=0)flag=1;else{flag=0;break;}if(flag==1)return-1;//进行到此处,说明存在0的检验数//找到最小的检验数,作为换入变量for(i=0;in;i++){if(mincn[i]){min=cn[i];k=i;}}returnk;}intfind_line(inta){inti,k,j;intflag=0;floatmin;k=a;for(i=0;im;i++)if(A[i][k]=0)flag=1;else{flag=0;break;}if(flag==1){printf(\n该线性规划无最优解!\n);return-1;}for(i=0;im;i++){if(A[i][k]0)seta[i]=b[i]/A[i][k];elseseta[i]=M;}min=M;for(i=0;im;i++){if(min=seta[i]){min=seta[i];j=i;}}num[j]=k+1;CB[j]=C[k];returnj;}voidexchange(intp,intq){inti,j,c,l;floattemp1,temp2,temp3;c=p;//行号,换出l=q;//列号,换入temp1=A[c][l];//A[c][l]主元b[c]=b[c]/temp1;for(j=0;jn;j++)A[c][j]=A[c][j]/temp1;//主元化为1for(i=0;im;i++){if(i!=c)if(A[i][l]!=0){temp2=A[i][l];b[i]=b[i]-b[c]*temp2;//主元所在列,其余元素化为0for(j=0;jn;j++)A[i][j]=A[i][j]-A[c][j]*temp2;}}temp3=cn[l];for(i=0;in;i++)cn[i]=cn[i]-A[c][i]*temp3;}voidprint(){inti,j=0;printf(\n--------------------------------------------------------------------------\n);for(i=0;im;i++){printf(%8.2f\tX(%d)%8.2f,CB[i],num[i],b[i]);for(j=0;jn;j++)printf(%8.2f,A[i][j]);printf(\n);}printf(\n--------------------------------------------------------------------------\n);printf(\t\t\t);for(i=0;in;i++)printf(%8.2f,cn[i]);printf(\n--------------------------------------------------------------------------\n);}voidshuru(){inti,j;//循环变量intk;printf(请输入线性规划问题的约束条件个数M:);scanf(%d,&m);printf(请输入线性规划问题的决策变量个数N:);scanf(%d,&n);printf(\n请输入方程组的系数矩阵A(%d行%d列):\n,m,n);for(i=0;im;i++)for(j=0;jn;j++)scanf(%f,&A[i][j]);printf(\n请输入初始基变量的数字代码矩阵:\n);for(i=0;im;i++)scanf(%d,&num[i]);printf(\n请输入方程组右边的值矩阵b:\n);for(i=0;im;i++)scanf(%f,&b[i]);printf(\n请输入目标函数各个变量的系数所构成的系数阵C:\n);for(i=0;in;i++)scanf(%f,&C[i]);for(i=0;in;i++)cn[i]=-C[i];for(i=0;im;i++){k=num[i]-1;CB[i]=C[k];}}