吉林大学超星MOOC学习通高级语言程序设计 C++ 实验03 模块化程序设计(2021级)

2021/11/30 20:40:33

本文主要是介绍吉林大学超星MOOC学习通高级语言程序设计 C++ 实验03 模块化程序设计(2021级),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一. 单选题(共1题,16.6分) 

1. (单选题)

有函数定义:int f(int x,int y);则下列函数调用正确的为(    )

  • A.int n; n=f();
  • B. int n,a=0,b=1;n=int f(x,y);
  • C. int n,a=0,b=1;n=f(a,b);
  • D.int n,a=0,b=1; n=f(int a,int b);

我的答案: C

 二. 程序题(共5题,83.4分)

2. 自守数

题目编号:Exp03-Extend01,GJBook3-12-04

题目名称:自守数

题目描述:若一个正整数a满足条件 a^2 的尾数等于a,则称a为自守数,例如:

25^2=625 、76^2=5776 、9376^2=87909376 都是自守数。

编写程序,求小于等于n的所有自守数。

输入:从键盘随机输入一个正整数n(<10000000)。

输出:输出小于n的所有自守数,每个数之间以一个西文空格间隔。
 

样例1:

输入:10
输出:1 5 6

样例2:

输入:100
输出:1 5 6 25 76

#include <iostream>

using namespace std;

int main()
{
	int n = 0;
	cin >> n;
	long long x = 0;
	cout << "1 ";
	for (int i = 2;i < n;i++)
	{		
		int j = 10000000;
		x = i * i;
		while (j / i >= 10)
		{
			j /= 10;
		}
		x %= j;
		if (x == i)
			cout << i << " ";
	}
	return 0;
}

谈一谈对这个题的想法:x=a*a

1.首先,厘清题目对 “自首数”的定义

2.其次,题目的关键在于如何寻找x的尾数

下面重点来讲第二点:仔细思考后会发现,对 x 取逆序用处不大,用数组也不是很方便;

所以我们可以将其转化为求a的位数再加1,最后 取模即可。

那么问题又来了,如何求a的位数呢?

就把这个任务交给while循环吧,

int j = 10000000;
while (j / i >= 10)
{
	j /= 10;
}

最后得出的j值恰好为a的位数再加1,

x%j恰好为x的尾数 ,再与a比较即可

 3. 组合问题

题目编号:Exp03-Basic01,GJBook3-05-02

题目名称:组合问题

题目描述:编写程序,输入m,n的值,计算并输出函数f的值。

GJBook3-05-02.jpg

输入:一个整数m和一个整数n(m,n≤20)。

输出:函数f的值。
 

样例1:

输入:-1  2
输出:-1

样例2:

输入:2  2
输出:1

如果对阶乘还不熟悉的同学建议看吉林大学超星MOOC学习通高级语言程序设计 C++ 实验02 分支与循环程序设计(2021级)(1)_S_CuRrY666的博客-CSDN博客 还是闲话少叙,直接上代码

#include <iostream>

using namespace std;

long long jiec(int n)
{
	long long sum = 1;
	for (int i = 1;i <= n;i++)
	{
		sum *= i;
	}
	return sum;
}
int main()
{
	int m, n;
	cin >> m >> n;
	if ((m < n) && (m > 0) && (n > 0))
		cout << "0" << endl;
	else if ((m == n) && (m > 0) && (n > 0))
		cout << "1" << endl;
	else if ((m > n) && (m > 0) && (n > 0))
	{
		long long sum;
		sum = jiec(m) / jiec(m - n) / jiec(n);
		cout << sum << endl;
	}
	else cout << "-1" << endl;
	return 0;
}

这道题写了一个jiec的函数,旨在求阶乘,因为涉及到的阶乘有三个,所以把阶乘放在主函数里会十分不方便 

4. 逆序数

题目编号:Exp03-Basic02,GJBook3-05-06

题目名称:逆序数

题目描述:编写函数,求任意位自然数的逆序数,例如5432就是2345的逆序数。

输入:任意一个整数(<10^18) 。

输出:如果输入的不是自然数,则输出NULL;否则输出对应的逆序数。


样例1:

输入:120
输出:21

样例2:

输入:999999999999999999
输出:999999999999999999

样例3:

输入:-1357
输出:NULL

#include <iostream>

using namespace std;

int main()
{
	long long m;
	int n = 0;
	cin >> m;
	if (m <= 0)
		cout << "NULL" << endl;
	else if (m > 0)
	{		
		while (m > 0) 
		{			
			n++;
			int a = 0;
			a = m % 10;
		    if (a != 0 || n != 1)
				printf("%d", a);
			m /= 10;
		}
	}
	return 0;
}

这个程序最重要的一点就是中间的while循环 ,观察输出样例,若输入的数尾数为0,则将其略去,所以对最后一个数要判断一下,先定义n=0,进入while循环后n=1,若a=0,不输出,随后直接逆序输出即可。

5. 多边形周长

题目编号 :Exp03-Basic03

题目名称:多边形周长

题目描述:编写程序,求由键盘按顺时针方向输入n(0<n<=10)个顶点坐标的多边形周长(测试数据已保证当n>2时,各点按输入方向依次连接可构成封闭的n边形)。

输入:第一行输入一个整数,作为n值;以后每行两个浮点数(double),为多边形各顶点的坐标。

输出:多边形的周长,精确到小数点后2位。
 

样例1:

输入:
4
0  0
0  1
1  1
1  0
输出:4.00

样例2:

输入:
1
2 3
输出:
0.00

样例3:

输入:
2
2 3
2 4
输出:
1.00

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

double dist(double x1, double y1, double x2, double y2) {

	double d = 0;

	d = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));

	return d;

}
int main()
{
	int n = 0;
	cin >> n;
	double sum = 0, arr[10][2];
	for (int i = 0;i < n;i++)
	{
		for (int j = 0;j < 2;j++)
		{
			cin>>arr[i][j];
		}
	}
	if (n == 1)cout << "0.00" << endl;
	if (n == 2)
	{
		sum = dist(arr[0][0], arr[0][1], arr[1][0], arr[1][1]);
		//printf("%.2lf", sum);
		cout << fixed << setprecision(2) << sum << endl;
	}
	if (n > 2)
	{
		for (int i = 0;i < n - 1;i++)
		{
			for (int j = 0;j < 1;j++)
			{
				sum += dist(arr[i][j], arr[i][j + 1], arr[i + 1][j], arr[i + 1][j + 1]);
			}
		}
		sum += dist(arr[0][0], arr[0][1], arr[n - 1][0], arr[n - 1][1]);
		//printf("%.2lf", sum);
		cout << fixed << setprecision(2) << sum << endl;
	}
	return 0;
}

将n分三种情况讨论比较好,别忘了当n>2时,图形是首尾闭合的。 

6.素数判断

【计2014级期中试题】素数判断。

问题描述:一个大于1的自然数,只能被1和它本身整除,不能被其它除0以外的自然数整除,则该数称之为素数。编写函数,判断一个整数是否为素数

注:判断素数部分必须编写成一个独立于main()函数的其它函数

输入:一个大于1的自然数

输出:根据是否是素数输出Y/N

样例1:

输入:3

输出:Y

样例2:

输入:51

输出:N

#include <iostream>

using namespace std;

char su(int x)
{
	char ch = 'Y';
	for (int i = 2;i < x;i++)
	{
		if (x % i == 0)
		{
			ch = 'N';
			break;
		}
		else continue;
	}
	return ch;
}
int main()
{
	int m;
	cin >> m;
	cout << su(m) << endl;
	return 0;
}

判断素数的时候,for循环中的i一定要从2开始,因为任何数模1都为0,不能达到我们判断素数的要求



这篇关于吉林大学超星MOOC学习通高级语言程序设计 C++ 实验03 模块化程序设计(2021级)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程