📄 exe01.c
字号:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAXSIZE 9223372036854775807
#define FEATURE_MAX_D 128
typedef struct
{
double descr[FEATURE_MAX_D];
}Feature;//128维的数据类型
void readfile(char*filename,int* num,Feature **feat)
{
FILE*fp;
scanf("%s",filename);
fp=fopen(filename,"rb");
fread(num,sizeof(int),1,fp);
*feat=(Feature *)malloc(*num * sizeof(Feature));
fread(*feat,sizeof(Feature),*num,fp);
fclose(fp);
}//读文件
void ShortestDistance(int DataNum1,int DataNum2,Feature *feat1,Feature *feat2)
{
FILE*fp;
int I=0,dim=0,J=0,count1=0,count2=0,nu;
double sum=0,temp,min=MAXSIZE,distance;
//用I找第一个文件(B)的数据,用J找第二个文件(A)的数据,dim是记录运行的维数,
//count1记录在B中运行的数据顺序,nu记录在A中最近的元素的次序,count2记录在A中运行的元素的次序;
fp=fopen("Result.txt","w+");
for(J=0;J<DataNum2;J++)
{
for(I=0;I<DataNum1;I++)
{//从A中找数据
for(dim=0;dim<128;dim++)
{//每一维的平方和
temp=feat1[I].descr[dim]-feat2[J].descr[dim];
sum=sum+temp*temp;
}
distance=sqrt(sum);//计算欧式距离
count2++;
if(distance<min)
{//求最短距离和该元素的位置
min=distance;
nu=count2;
}
sum=0;//sum置0;
}
count1++;
//fprintf(fp,"当前B中数据位置是: %d\n",count1);
//fprintf(fp,"%d\n",nu);
fprintf(fp,"%f\n",min);
min=MAXSIZE;count2=0;
}
//fprintf(fp,"\n一共搜索B中数据量为:\n");
// fprintf(fp,"%d\n",count1);
fclose(fp);
}//搜索最短距离
void main()
{
char file1name[20],file2name[20];//两个文件名file1name[20]代表A,file2name[20]代表B;
int DataNum1,DataNum2;
Feature *feat1,*feat2;
printf("Enter the data A\n");
readfile(file1name,&DataNum1,&feat1);//读file1name中的数据
printf("Enter the data B\n");
readfile(file2name,&DataNum2,&feat2);//读file2name中的数据
//*----------------------全搜索找最短距离-----------------------------------------*/
ShortestDistance(DataNum1,DataNum2,feat1,feat2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -