苏州大学计算机专业2015年复试上机真题

该博客主要介绍了苏州大学计算机专业2015年复试的一道上机真题,涉及二进制数据处理。题目要求从二进制文件中读取int型坐标,找出第一象限的有效点(x>0, y>0)数量,并根据用户输入的k和n,在有效点中找到距离小于n且满足条件的点进行输出。博客提供了模拟数据来源及控制台输入输出示例。" 106596067,8273330,AI软件下载安装全攻略:解压密码及常见问题解答,"['Adobe', '软件安装', '设计工具', '创意视觉设计', '教程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

数据文件里面是用二进制编写的,里面放了一堆int型的数,每个数占4个字节,每次读取两个,这两个数构成一个坐标。
(1)规定处于第一象限的数是有效点,(即x>0,y>0的坐标),问这么多点中有效点有多少个?

(2)从键盘上输入k和n,从第一问中的有效点中找出 距离小于n,距离小于n的点的个数要大于k,将它们以文本格式输出到文件中。

输入描述:

1、模拟数据下载网址,数据同2012年
https://download.youkuaiyun.com/download/tsc5214/11012209
2、控制台输入的数据:1 4

输出描述:

控制台输出内容:
读取的数据中有效点有13个

Output.txt

(X,Y) 个数
(8,9) 3
(6,8) 3
(8,6) 3
(8,9) 3

代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int seekValidPoints(struct coordinate co[],int num,struct coordinate validco[]);
void seekPoints(struct coordinate validco[],int validnum);
struct coordinate{
	int x;
	int y;
};
int main(){
	FILE *fp;
	struct coordinate co[100];
	struct coordinate validco[100];
	int i=0;
	int validnum=0;
	if((fp=fopen("D:\\2019Post\\pat\\pat\\data2012.dat","r"))==NULL){
		printf("can not open the file");
		exit(0);
	}
	while(fread(&co[i].x,4,1,fp)){
		fread(&co[i].y,4,1,fp);
		i++;
	}
	fclose(fp);
	validnum=seekValidPoints(co,i,validco);
	printf("读取的数据中有效点有%d个\n",validnum);
	seekPoints(validco,validnum);
	return 0;
}
int seekValidPoints(struct coordinate co[],int num,struct coordinate validco[]){
	int i,count=0;
	for(i=0;i<num;i++){
		if(co[i].x>0&&co[i].y>0){
			validco[count].x=co[i].x;
			validco[count].y=co[i].y;
			count++;
		}
			
	}
	return count;
}

void seekPoints(struct coordinate validco[],int validnum){
	int k,n;
	int t,i,j,s;
	int* num;
	FILE *fa;
	scanf("%d %d",&k,&n);
	num=(int*)malloc(sizeof(int)*validnum);
	for(t=0;t<validnum;t++){
		num[t]=0;
	}
	for(i=0;i<validnum;i++)
		for(j=0;j<validnum;j++){
			if(i!=j){
				double result;
				result=sqrt((double)((validco[i].x-validco[j].x)*(validco[i].x-validco[j].x)+(validco[i].y-validco[j].y)*(validco[i].y-validco[j].y)));
				if(result<n)
					num[i]++;
			}
		}
	if((fa=fopen("D:\\2019Post\\pat\\pat\\Output2015.txt","w"))==NULL){
		printf("can not open the file");
		exit(0);
	}
	fprintf(fa,"(X,Y) 个数\n");
	for(s=0;s<validnum;s++){
		if(num[s]>k){
			fprintf(fa,"(%d,%d) %d\n",validco[s].x,validco[s].y,num[s]);
		}
	}
	fclose(fa);
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值