#include<math.h>
#include<iostream.h>
float matrix[100][100],x[100] /* 记录总方程的数组,解的数组 */
int a[100] /* 记录基础,非基础的解的情况,0:非基础,1:基础 */
int m,n,s,type /* 方程变量,约束数,求最大最小值的类型,0:最小 1:最大 */
int indexe,indexl,indexg /* 剩余变量,松弛变量,人工变量 */
void Jckxj()
{
int i,j
for(i=0i<ni++)
for(j=0j<sj++)
if(matrix[i][j]==1&&a[j]==1){
x[j]=matrix[i][s]
j=s
}
for(i=0i<si++)
if(a[i]==0) x[i]=0
}
int Rj()
{
int i
for(i=0i<si++)
if(fabs(matrix[n][i])>=0.000001)
if(matrix[n][i]<0) return 0
return 1
}
int Min()
{
int i,temp=0
float min=matrix[n][0]
for(i=1i<si++)
if(min>matrix[n][i]){
min=matrix[n][i]
temp=i
}
return temp
}
void JustArtificial()
{
int i
for(i=m+indexe+indexli<si++)
if(fabs(x[i])>=0.000001){
printf("No Answer\n")
return
}
}
int Check(int in)
{
int i
float max1=-1
for(i=0i<ni++)
if(fabs(matrix[i][in])>=0.000001&&max1<matrix[i][s]/matrix[i][in])
max1=matrix[i][s]/matrix[i][in]
if(max1<0)
return 1
return 0
}
int SearchOut(int *temp,int in)
{
int i
float min=10000
for(i=0i<ni++)
if(fabs(matrix[i][in])>=0.000001&&(matrix[i][s]/matrix[i][in]>=0)&&min>matrix[i][s]/matrix[i][in]){
min=matrix[i][s]/matrix[i][in]
*temp=i
}
for(i=0i<si++)
if(a[i]==1&&matrix[*temp][i]==1) return i
}
void Mto(int in,int temp)
{
int i
for(i=0i<=si++)
if(i!=in)
matrix[temp][i]=matrix[temp][i]/matrix[temp][in]
matrix[temp][in]=1
}
void Be(int temp,int in)
{
int i,j
float c
for(i=0i<=ni++){
c=matrix[i][in]/matrix[temp][in]
if(i!=temp)
for(j=0j<=sj++)
matrix[i][j]=matrix[i][j]-matrix[temp][j]*c
}
}
void Achange(int in,int out)
{
int temp=a[in]
a[in]=a[out]
a[out]=temp
}
void Print()
{
int i,j,k,temp=0
for(i=0i<ni++){
for(k=tempk<sk++)
if(a[k]==1){
printf("X%d ",k)
temp=k+1
k=s
}
for(j=0j<=sj++)
printf("%8.2f",matrix[i][j])
printf("\n")
}
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <math.h>
int main (){
int p,q,r,a1,b1,c1,a2,b2,c2,m1,n1,m2,n2,x,y,max,min,k1,k2,k3
printf("目标函数 f=px+qy+r\n输入 p=,q=,r=\n")
scanf("%d %d %d",&p,&q,&r)
printf("输入约束条件组\na1x+b1y+c1>=0\na2x+b2y+c2<=0\nm1<=x<=n1\nm2<=y<=n2\n"
"a1= b1= c1= a2= b2= c2= m1= n1= m2= n2=\n")
scanf("%d %d %d %d %d %d %d %d %d %d",&a1,&b1,&c1,&a2,&b2,&c2,&m1,&n1,&m2,&n2)
max=0
min=0
for(x=m1x<=n1x++)
{
for(y=m2y<=n2y++)
{
k1=a1*x+b1*y+c1
k2=a2*x+b2*y+c2
if(k1==0 &&k2==0)
{
k3=p*x+q*y+r
if(max<k3)
max=k3
else if(min>k3)
min=k3
break
}
}
}
printf("目标函数最大值,最小值\nf(max)=%d f(min)=%d",max,min)
system("pause")
return 0
}
C=c的转置if(command='c')||(command='C')
m小于等于n。
if(m<=n)
其它我是用数学来算的,即利用矩形的数学算法来加入C语言算出来的。看来你是不需要的!