⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exe01.c

📁 数据结构课程设计_任意大数的加减乘运算器
💻 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 + -