2014年苏州大学计算机研究生复试机试编程题c语言

题目要求如下:

从网页上下载 input.dat 文件,里面是用二进制编写的,里面放了一堆 int 型的数,每个数占 4 个字节,每
次读取两个,这两个数构成一个坐标.
规定处于第一象限的数是有效点(即 x>0, y>0 的坐标),问这么多点中有效点有多少个?
现在用户从键盘输入一个坐标和一个数字 k ,设计算法输出 k 个离该坐标距离最近的点的坐标和每个坐标到
该点的距离,写入到 output.txt 文件中
 

期间看错了题目,以为是每个点的距离(见注释段),后来改正了代码,由于没有output文件所以rand生成

 

 

#include
#include
#include
#include
#include
typedef struct 
{
	int x;
	int y;
	double juli;
}Point;

double distance(Point* a,Point* b)
{
	int juli=(a->x - b->x)*(a->x - b->x)+(a->y-b->y)*(a->y-b->y);
	return sqrt((double)(juli));
}

void mp_sort(Point* ptr,int count)
{
	Point temp;
	for(int i=0;iptr[j+1].juli)
			{
				temp=ptr[j];
				ptr[j]=ptr[j+1];
				ptr[j+1]=temp;				
			}
} 

int main()
{
	FILE* fpw;
	FILE* fr;
	int* data;
	int k=0;
	Point* points=NULL;
	Point dian; 
	int count,valid_num;
	fpw=fopen("input.dat","wb");
	data=(int*)malloc(sizeof(int)*16);
	srand(time(NULL));
	for(int i=0;i<16;i++)
	{
		data[i]=rand()%64-32;
	}
	fwrite(data,sizeof(int),16,fpw);
	free(data);
	fclose(fpw);
	fr=fopen("input.dat","rb");
	fseek(fr,0,SEEK_END);
	count=ftell(fr)/sizeof(int);
	rewind(fr);
	data=(int*)malloc(sizeof(int)*count);
	fread(data,sizeof(int),count,fr);
	int points_num=count/2;
	points=(Point*)malloc(sizeof(Point)*points_num);
	for(int i=0;i0&&points[i].y>0)
			valid_num++;
	}
	printf("the number of valid points is %d \n",valid_num);
	printf("输入k\n");
	scanf("%d",&k);
	printf("输入个点的坐标\n");
	scanf("%d %d",&dian.x,&dian.y);
	for(int i=0;i

2014年苏州大学计算机研究生复试机试编程题c语言_第1张图片

结果见图

你可能感兴趣的:(C//C++)