从2015年开始,长沙理工大学计算机研究生复试考试科目将566改成现在的F0803,这里列举的是15~19年的编程题题目和答案。

统计了一下有2个C++的题目,其余为C语言题目。

2015年

//1.求出10至1000之内能同时被2、3、7整除的数,并输出。
#include<stdio.h>
int main()
{
   
	int i;
	for (i=10;i<=1000;i++)
	{
   
		if(i%2==0&&i%3==0&&i%7==0)
		{
   
			printf("%-4d",i);
		}
	}
	return 0;
}
/*2.任意输入一个三位正整数,十位上的数字不动,将个位和百位上的数字交换,
	够成一个新的正整数后输出。(例如:484变为684)*/
#include<stdio.h>
int Exchange(int x);
int main()
{
   
	int i,x;
	printf("请输入一个三位正整数:\n");
	scanf("%d",&x);
	i = Exchange(x);
	printf("%d",i);
	return 0;
}
int Exchange(int x)
{
   
	int a,b,c;
	c = x%10;
	b = (x/10)%10;
	a = x/100;
	return c*100+b*10+a;
}
/*3.编写自定义函数prime(int x),判断x是否为素数。利用此函数编写程序找出
100~2000中的所有素数,并输出素数的个数。*/
#include<stdio.h>
#include<math.h>
int prime(int x);
int main()
{
   
	int x,i;
	int j=0,flag=0;
	printf("请输入一个数:\n");
	scanf("%d",&x);
	flag = prime(x);
	if (flag==1)
	{
   
		printf("该数是素数\n");
	}else{
   
		printf("该数不是素数\n");
	}
	printf("100至2000之内的素数为\n");
	for (i=100;i<=2000;i++)
	{
   
		if(prime(i))
		{
   
			printf("%-5d",i);
			j++;
		}
	}
	printf("\n素数的个数为%d个\n",j);
	return 0;
}
int prime(int x)
{
   
	int i;
	for(i=2;i<=sqrt(x);i++)
	{
   
		if (x%i==0)
		{
   
			return 0;
		}
	}
	if (i>sqrt(x))
	{
   
		return 1;
	}
}

2016年

/*1、使用C语言编写程序打印出10000以内的所有“完全数”,每个数之间用英文逗号
隔开。“完全数”是指一个正整数,其所有小于该数的因子之和等于该数本身。
例如:6=1+2+3,又如:28=1+2+4+7+14。*/
#include<stdio.h>
int main()
{
   
	int i,j,sum;
	for (i=1;i<10000;i++)
	{
   
		sum = 0;
		for (j=1;j<i;j++)
		{
   
			if (i%j==0)
			{
   
				sum+=j;
			}
		}
		if (i==sum)
		{
   
			printf("%d,",i);
		}
	}
	return 0;
} 
//2、用C语言编写程序,根据输入的三角形的三条边(a,b,c),判断是否能组成三
角形(如果任意两边之和大于第三边则认为可组成三角形),若可以则输出三角形的
类型(等边三角形、等腰三角形、直角三角形、一般三角形)及
面积(area=sqrt(s*(s-a)*(s-b)*(s-c)); s=(a+b+c)/2); 
否则输出“不能组成三角形”。*/
#include<stdio.h>
#include<math.h>
#define EPS 1e-2
int main()
{
   
	float a,b,c;
	float s,area;
	int flag = 0;
	printf("请输入三角形的三条边:\n");
	scanf("%f%f%f",&a,&b,&c);
	if (a+b>c&&a+c>b&&b+c>a)
	{
   
		if (fabs(a-b)<=EPS||fabs(b-c)<=EPS||fabs(c-a)<=EPS)
		{
   
			printf("等腰");
			flag = 1;
		}
		else if (fabs(a-b)<=EPS&&fabs(b-c)<=EPS&&fabs(c-a)<=EPS)
		{
   
			printf("等边");
			flag = 1;
		}
		if (fabs(a*a+b*b-c*c)<=EPS||fabs(a*a+c*c-b*b)<=EPS||
			fabs(b*b+c*c-a*a)<=EPS)
		{
   
			printf("直角");
			flag = 1;
		}
		if (flag==0)
		{
   
			printf("一般");
		}
		printf("三角形");
	}else{
   
		printf("不能组成三角形");
	}
	printf("\n面积为:");
	s = (a+b+c)/2.0;
	area = sqrt(s*(s-a)*(s-b)*(s-c));
	printf("%f",area);
	return 0;
}
/*3、已知交通工具类定义如下
class vehicle{
   
protected:
int wheels;	//车轮数
float weight;	//重量
public:
void init(int wheels,float weight);
float get_weight();	//返回重量
int get_wheels() ();	//返回车轮数
void print();	//输出车轮数和重量,格式为“车轮数:x,重量:x“其中x为实
际值,不一定相同
};
要求:(1)实现这个类;
(2)定义并实现一个小车类car,是它的公有派生类,小车本身的私有属性有载人
数,小车的函数有init
(设置车轮数,重量和载人数),getpassenger(获取载人数),print(打印车
轮数,重量和载人数,格式为”
车轮数:x,重量:x载人数:x“x为实际值,不一定相同)。*/
#include<iostream>
using namespace std;
class Vehicle
{
   
	protected:
		int wheels;		//车轮数 
		float weight;	//重量 
	public:
		void init(int a,float b)
		{
   
			wheels=a;
			weight=b;
		}
		float get_weight()
		{
   
			return weight;
		}
		int get_wheels()
		{
   
			return wheels;
		}
		void print()
		{
   
			cout<<"车轮数:"<<get_wheels()<<endl;
			cout<<"重量:"<<get_weight()<<endl; 
		}
};
class Car:public Vehicle
{
   
	private:
		int people;//载人数
	public:
		int init(int a,int b,int c)
		{
   
			people=a;
			wheels=b;
			weight=c;
		}
		int getpassenger()
		{
   
			return people;
		}
		void print()
		{
   
			cout<<"车轮数:"<<get_wheels()<<endl;
			cout<<"重量:"<<get_weight()<<endl; 
			cout<<"载人数:"<<getpassenger()<<endl;
		}
};

int main()
{
   
	Vehicle v;
	Car car;
	v.init(2,12.2);
	v.get_weight();
	v.get_wheels();
	v.print();
	car.init(4,4,4);
	car.getpassenger();
	car.get_weight();
	car.get_wheels();
	car.print();
}

2017年

//1、请用C语言编写程序,求和:S=1-(1/2)+(1/3)-(1/4)+……+(1/n),其中n=10
#include<stdio.h>
int main()
{
   
	int i;
	double sum=0;
	int flag;
	for (i=1;i<=10;i++)
	{
   
		flag = 1;
		if(i%2==0)
		{
   
			flag=-1;
		}
		sum+=(1.0/i)*flag;
	}
	printf("%lf",sum);
	return 0;
}
/*2、请用C语言编写一个函数fun(char *s),则调用该函数之后,串中的内容为
“gfedcba”。*/
#include<stdio.h>
#include<string.h>
#define N 20
void fun(char *s);
int main()
{
   
	char s[N];
	fun(s);
	puts(s);
}
void fun(char *s)
{
   
	char a[]="gfedcba";
	strcpy(s,a);
}
/*3、设基类定义如下:
class Basic//基类
{
   protected:
	double r;
public:
	Basic(){
   r=0;}
	Basic(double a):r(a){
   }
};
编写程序从基类派生圆柱,设计成员函数输出它们的面积和体积。*/
#include<iostream>
#define PI 3.14 
using namespace std;
class Basic{
   
	protected:
		double r;
	public:
		Basic(){
   
			r=0;
		}
		Basic(double a):r(a){
   
		}
};
class Cylinder : public Basic{
   	//从基类派生圆柱类 
	private:
		double h;	//圆柱高
	public:
		Cylinder(double a,double b){
   
			h=a;
			r=b;
		}
		double getArea(){
   	//返回圆柱面积 
			return r*r*PI*2+2*r*PI;
		}
		double getBulk(){
   	//返回圆柱体积 
			return r*r*PI*h;
		}
};
int main()
{
   
	Cylinder cylinder(2.0,2.0);
	cout<<"圆柱的面积:"<<cylinder.getArea()<<endl;
	cout<<"圆柱的体积:"<<cylinder.getBulk()<<endl; 
}

2018年

//1、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,
请问该数是多少?(数字小于100000)*/
#include<stdio.h>
#include<math.h>
int main()
{
   
	int i,j;
	int flag;
	for(i=1;i<100000;i++)
	{
   
		flag = 0;
		for(j=1;j<=i;j++)
		{
   
			if (i+100==j*j)
			{
   
				flag = 1;
			}
			if (flag==1)
			{
   
				if (i+168==j*j)
				{
   
					printf("%d",i);
				}
			}
		}
	}
	return 0;
} 
//2、用递归法将一个整数转换成字符串形式输出。
#include <stdio.h>
char r[20];
int i=0;
void f(int n){
   
    if (n!=0){
   
      	r[i++]=n%10+'0';
     	n/=10;
     	f(n);
    }
    return;
}
int main(void) {
    
    int x,y;
    printf("please input a integer:\n");
    scanf("%d",&x);
    f(x);
    for (y=i-1;y>=0;y--){
   
        putchar(r[y]);
    }
    return 0;
}
//3、计算n!是一个非常难的任务,事实上n=20时,计算机的长整型就
//存放不了这么大的数了,但是,我们可以编写程序来算出n!的最后一位非0的数。
//20  ,19  ,2432902008176640000
#include<stdio.h>
int main()
{
   
	int i;
	int n;
	int sum=1;
	printf("please input a number:\n");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
   
		sum *= i;
		while(sum%10==0)
		{
   
			sum /= 10;
		}
		if(sum>=100)	//这里若设置太小,当阶乘很大时,会出现错误 
		{
   
			sum %= 100;
		}
//		printf("%d:%d\n",i,sum);
	}
	printf("%d",sum%10);
	return 0;
}

2019年

//1、编写程序实现 s=1+2+3+......+n,n<10000; n 由用户输入;输出 s ;要
求运行结果正确,运行时间尽可能短。
#include<stdio.h>
int main()
{
   
	int i,n,s=0;
	printf("请输入一个小于10000的正整数:\n");
	scanf("%d",&n);
	for(i=1;i<n;i++)
	{
   
		s += i;
	}
	printf("s=%d",s);
	return 0;
}

/*2、假设黑白图像由2维矩阵表示,行数为 M<5,列数为N<5,值分别用0或1表示。
输入两幅相同大小的黑白图像表示,求它们的相似度。
说明:若两幅图像再相同位置上的像素点颜色相同,则称它们在该位置具有
相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。*/
#include<stdio.h>
#define M 3 //先默认行和列都为3 
#define N 3 
void input(int x[M][N]);
int main()
{
   
	int i,j;
	int count=0,sum;
	sum = M*N;
	int a[M][N],b[M][N];
	printf("请输入黑白图像的像素点0或1:\n");
	input(a);
	input(b);
	for (i=0;i<M;i++)
	{
   
		for (j=0;j<N;j++)
		{
   
			if (a[i][j]==b[i][j])
			{
   
				count++;
			}
		}
	}
	printf("相似度为:%0.2f%/%%",(float)count/sum*100);
	return 0;
}
//输入图像的像素点 
void input(int x[M][N])
{
   
	int i,j;
	for (i=0;i<M;i++)
	{
   
		for (j=0;j<N;j++)
		{
   
			scanf("%d",&x[i][j]);
		}
	}
} 
/*3、Pell 数列a1,a2,a3 的定义是这样的。
a1=1; a2=2;......; a(n)=2×a(n-1)+a(n-2)	n>2
给出一个正整数k(k<=50,保证a(k)在整型表示范围内),要求Pell数列的第k项
模上32767是多少。*/
#include<stdio.h>
int Rec(int x);
int main()
{
   
	int k;
	int sum=0;
	printf("请输入一个正小于等于50的正整数k:\n");
	scanf("%d",&k);
	sum = Rec(k);
	printf("Pell数列的第k项模上32767为:%d",sum%32767);
	return 0;
} 
int Rec(int x)
{
   
	if (x==1){
   
		return 1;
	}else if (x==2){
   
		return 2;
	}else {
   
		return 2*Rec(x-1)%32767+Rec(x-2)%32767;//每次取膜,防止越界 
	}
}
/*4、有函数:
f(x)=x^5-15×x^4+85×x^3-225×x^2+274×x-121
已知f(1.5)>0,f(2.4)<0 且方程f(x)=0 在区间 [ 1.5, 2.4] 有且只有一
个根,请用二分法求出该根。*/
#include<stdio.h>
#include<math.h> 
#define E 1e-6
double Func(double x)
{
   
	return pow(x,5)-15*pow(x,4)+85*pow(x,3)-225*pow(x,2)+274*x-121;
}
int main()
{
   
	double left=1.5,right=2.4,mid; 
	do{
   
		mid = (left+right)/2;
		if (Func(mid)<0){
   
			right = mid;
		}else{
   
			left = mid;
		}
	}while ((right-left)>E);
	printf("该方程根为:%f",mid);
	return 0;
} 
/*5、Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符,
将它用它字母表中后n(n>0) 位对应的字符来代替,这样就得到了密文。
比如字符A用F来代替。如下是n=5 时密文和明文中字符的对应关系。
密文
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
明文
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
输入n(0<n<26)及一段密文(长度<200),输出解密得到明文。需要注意的是,
密文中出现的字母都是大写字母。密文中也包括非字母的字符和空格,对这些字符
不用进行解码。*/
#include<stdio.h>
#include<string.h>
#define N 200
int main()
{
   
	int i,n,len;
	char str[N];
	printf("请输入一段密文:\n");
	gets(str);
	len = strlen(str);
	printf("请输入n:\n");
	scanf("%d",&n);
	for (i=0;i<len;i++)
	{
   
		if (str[i]>='A'&&str[i]<='Z')
		{
   
			str[i] += n;
		}
	}
	printf("解密后明文为:"); 
	puts(str);
	return 0;
} 

如有更好见解,或不足之处,欢迎指正,有不懂之处,欢迎私聊