我是靠谱客的博主 结实吐司,最近开发中收集的这篇文章主要介绍2018年苏州大学计算机研究生复试机试编程题c语言,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

没有具体的题目,大概是这样的,20000个数存储于二进制文件中,读取出来之后求其中的最大子集,其中两两互相不为倍数,不为约数,最大公约数为1,然后输出到指定文件中。

看得出来,该校常见的题目是,c语言对于文件内容输入输出,辅以字符、数字的处理,常见统计、素数等的操作。

以下是代码

1.首先生成20000个数,据说各个数小于500,且挖去了三个数。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
	int* data;
	FILE* fr;
	data=(int*)malloc(sizeof(int)*20000);
	srand(time(NULL));
	for(int i=0;i<20000;i++)
	{
		data[i]=rand()%500+1;
		if(data[i]==3||data[i]==5||data[i]==7)
		{
			i=i-1;
		} 
	}

	
	fr=fopen("input.dat","wb");
	fwrite(data,sizeof(int),20000,fr);
	free(data);
	fclose(fr);
	
	return 0;
} 

 

 

2.对文件进行读取、处理,写入

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
#define N 20000
int result[N];
void maopao(int* a,int b)
{
	int temp;
	for(int i=0;i<b-1;i++)
		for(int j=0;j<b-1-i;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
}
int is_prime(int n)
{
	int i ;
	if(n < 2)
	{
		return 0;
	}
	for(i = 2; i * i <= n; i++)
	{
		if(n % i == 0)
		{
			return 0;		}
	}
	return 1;
}
int gcd(int a,int b)
{
	if(a%b==0)
		return b;
	else
		return gcd(b,a%b);
}
int  shaixuan(int* data,int n,int* result)
{
	int result_count=0;
	for(int i=0;i<n;i++)
	{
		if(data[i]<2)
		{
			continue;
		}
		if(is_prime(data[i])==1)//是素数 
		{
			int j;
			for(j=0;j<result_count;j++)
			{
				if(data[i]==result[j])
					break;
			}
			if(j==result_count)
			{
				result[j]=data[i];
				result_count++;
			}
		}
		else
		{
			int t;
			for(t=0;t<result_count;t++)
			{
				if(gcd(data[i],result[t])!=1)//公约数不是1 
					break;
			}
			if(t==result_count)
			{
				result[t]=data[i];
				result_count++;
			}
		}
			
	}
	return result_count;
}
int main()
{
	FILE* fr;
	int *data;
	int result_count;
	fr=fopen("input.dat","rb");
	if(!fr)
	{
		printf("fail to openn");
		exit(-1);
	}
	data=(int*)malloc(sizeof(int)*N);
	rewind(fr);
	fread(data,sizeof(int),N,fr);
	maopao(data,N);
	result_count=shaixuan(data,N,result);
	printf("total number is %dn",result_count);
	for(int i=0;i<result_count;i++)
	{
		printf("%d ",result[i]);
	}
	printf("n");
	fclose(fr);
	FILE* fw;
	fw=fopen("2018output.txt","w");
	for(int i=0;i<result_count;i++)
	{
		fprintf(fw,"%d ",result[i]);
	}
	fprintf(fw,"n");
	free(data);
	fclose(fw);
	return 0;
} 

主要写了几个函数:筛选数字,判断最小公倍数,判断素数以及冒泡

3.以下是结果

 

 

txt文件中

最后

以上就是结实吐司为你收集整理的2018年苏州大学计算机研究生复试机试编程题c语言的全部内容,希望文章能够帮你解决2018年苏州大学计算机研究生复试机试编程题c语言所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部