要求是随机产生100个点(Xi,Yi),1<=i<=100,1<=Xi,Yi<=100,输出100个点。再输出100阶的行列式a(i)[j],其中a(i)[j]为(Xi,Yi)和(Xj,Yj)的距离。然后输出行列式中的最大元素和最小元素,并输出它们的行和列,即输出a(i)[j]形式,确定i和j的值。我试着编了一个程序,但是有两个问题,一是无法保证100个点都不相同,二是实在无法输出最值的行列。请大家指点一下。
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int i,j,row,colum;
float max_value(float array[101][101])
{
float max=array[1][1];
for(i=1;i<101;i++)
for(j=1;j<101;j++)
if(array[i][j]>max)
max=array[i][j];
return(max);
}
float min_value(float array[101][101])
{
float min=array[1][1];
for(i=1;i<101;i++)
for(j=1;j<101;j++)
if(array[i][j]<min)
min=array[i][j];
return(min);
}
main()
{
int a[101],x[101],y[101];
float b[101][101],max,min;
time_t t;
srand((unsigned) time(&t));
for(i=1;i<101;i++)
{
x[i]=rand()%100+1;
y[i]=rand()%100+1;
}
for(i=1;i<101;i++)
printf("a[%d]=(%d,%d)\t",i,x[i],y[i]);
for(i=1;i<101;i++)
for(j=1;j<101;j++)
b[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
printf("array A:\n");
for(i=1;i<101;i++)
{
for(j=1;j<101;j++)
printf("%7.2f",b[i][j]);
printf("\n");
}
max=max_value(b);
printf("The max number is %5.2f\n",max);
min=min_value(b);
printf("The min number is %5.2f\n",min);
getch();
}
----------------解决方案--------------------------------------------------------
float max_value(float array[101][101],int* max_x,int* max_y);
通过指针返回最大元素的下标。在C++中可以使用引用方便多了
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int i,j,row,colum;
static int rowmax,colmax,rowmin,colmin;
#define N 10
float max_value(float array[N][N])
{
float max=array[0][0];
rowmax=0;
colmax=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(array[i][j]>max)
{
max=array[i][j];
rowmax=i;
colmax=j;
}
return(max);
}
float min_value(float array[N][N])
{
float min=array[0][0];
rowmin=0;
colmin=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(array[i][j]<min)
{
min=array[i][j];
rowmin=i;
colmin=j;
}
return(min);
}
main()
{
int a[N],x[N],y[N];
float b[N][N],max,min;
time_t t;
srand((unsigned) time(NULL));
for(i=0;i<N;i++)
{
x[i]=rand()%N+1;
y[i]=rand()%N+1;
}
for(i=0;i<N;i++)
printf("a[%d]=(%d,%d)\t",i,x[i],y[i]);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
printf("array A:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%7.2f",b[i][j]);
printf("\n");
}
max=max_value(b);
printf("The max number is %5.2f\n",max);
printf("max located at (%d,%d)",rowmax,colmax);
printf("\n");
min=min_value(b);
printf("The min number is %5.2f\n",min);
printf("min located at (%d,%d)",rowmin,colmin);
printf("\n");
//getchar();
}
这样就可以了吧,我是刚学的c语言,请大家指教
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int i,j,row,colum;
float max_value(float array[101][101])
{
float max=array[1][1];
for(i=1;i<101;i++)
for(j=1;j<101;j++)
if(array[i][j]>max)
max=array[i][j];
return(max);
}
float min_value(float array[101][101])
{
float min=array[1][1];
for(i=1;i<101;i++)
for(j=1;j<101;j++)
if(array[i][j]<min)
min=array[i][j];
return(min);
}
main()
{
int a[101],x[101],y[101];
float b[101][101],max,min;
time_t t;
srand((unsigned) time(&t));
for(i=1;i<101;i++)
{
x[i]=rand()%100+1;
y[i]=rand()%100+1;
}
for(i=1;i<101;i++)
printf("a[%d]=(%d,%d)\t",i,x[i],y[i]);
for(i=1;i<101;i++)
for(j=1;j<101;j++)
b[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
printf("array A:\n");
for(i=1;i<101;i++)
{
for(j=1;j<101;j++)
printf("%7.2f",b[i][j]);
printf("\n");
}
max=max_value(b);
printf("The max number is %5.2f\n",max);
min=min_value(b);
printf("The min number is %5.2f\n",min);
getchar();
return 0;
}
the max number is 130.38
the min number is 0.00
----------------解决方案--------------------------------------------------------