吉林大学超星慕课平台——高级语言程序设计 实验03 模块化程序设计(2022级)

实验03 模块化程序设计(2022级)

一. 单选题(共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-Basic01,GJBook3-05-02

题目名称:组合问题

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

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

输出:函数f的值。
 

样例1:

输入:-1  2
输出:-1

样例2:

输入:2  2
输出:1
#include<stdio.h>

long long f(int m, int n);

long long pro(int s);

int main() {

	int m, n;

	scanf(" %d %d", &m, &n);

	printf("%d", f(m, n));

}

long long f(int m, int n) {

	long long ret;

	if (m < n && m>0 && n > 0) { return 0; }

	else if (m == n && m > 0 && n > 0) { return 1; }

	else if (m > n && m > 0 && n > 0) {

		ret = pro(m) / (pro(m - n) * pro(n));

		return ret;

	}

	else { return -1; }


}

long long pro(int s) {

	long long sum = 1;

	for (int i = s; i > 0; i--) {

		sum *= i;

	}

	return sum;

}

 

3. (程序题)

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

题目名称:逆序数

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

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

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


样例1:

输入:120
输出:21

样例2:

输入:999999999999999999
输出:999999999999999999

样例3:

输入:-1357
输出:NULL
#include <stdio.h>

#include<math.h>

long long po(int b, int c) {

	long long pro = 1;

	for (int u = 1; u <= c; u++) {

		pro *= b;

	}

	return pro;



}

int nb(long long s) {

	int count = 0;

	while (1) {

		s /= 10;

		count++;

		if (s == 0) { break; }



	}

	return count;

}

int main() {

	int z[18];

	long long h, sum = 0;

	scanf("%lld", &h);

	if (h < 0)printf("NULL");

	else {

		int uu = nb(h);

		for (int m = 0; m <= uu - 1; m++) {

			z[m] = h % 10;

			h /= 10;

		}

		for (int i = 0; i <= uu - 1; i++) {

			sum += z[i] * po(10, uu - i - 1);

		}

		printf("%lld", sum);



	}

}

4. (程序题)

题目编号 :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<stdio.h>

#include<math.h>

double dis(double a, double b) {

	double distance = sqrt(a * a + b * b);

	return distance;

}

int main() {

	int n;

	double x1, x2, y1, y2, x3, y3, sum = 0;

	scanf("%d", &n);

	if (n == 1)printf("0.00");

	else if (n == 2) {

		scanf("%lf %lf\n", &x1, &y1);

		scanf("%lf %lf", &x2, &y2);

		sum = dis(x1 - x2, y1 - y2);

		printf("%.2lf", sum);

	}

	else {

		scanf("%lf %lf", &x1, &y1);

		x3 = x1; y3 = y1;

		for (int s = 1; s <= n - 1; s++) {

			scanf("%lf %lf", &x2, &y2);

			sum += dis(x1 - x2, y1 - y2);

			x1 = x2;

			y1 = y2;

		}

		sum += dis(x2 - x3, y2 - y3);

		printf("%.2lf", sum);

	}

}

5. (程序题)

题目编号: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<stdio.h>

#include<math.h>

long long int muu(long long int n);

int main() {

	long long a, pro;

	scanf("%lld", &a);

	for (long long i = 1; i <= a; i++) {

		pro = i * i;

		if (pro % muu(i) == i)printf("%lld ", i);

	}

}

long long int muu(long long int n) {

	long long ret = 1;

	int count = 0;

	while (1) {

		n = n / 10;

		count++;

		if (n == 0)break;

	}

	for (int m = 1; m <= count; m++)

	{

		ret *= 10;

	}

	return ret;



}

6. (程序题)

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

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

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

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

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

样例1:

输入:3

输出:Y

样例2:

输入:51

输出:N

#include <stdio.h>

int judge(long long s);

int main() {

	long long n;

	scanf("%lld", &n);

	if (judge(n))printf("Y");

	else { printf("N"); }



}

int judge(long long s) {

	if (s == 2)return 1;

	for (long long i = 2; i < s; i++) {

		if (s % i == 0)return 0;



	}

	return 1;



}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值