From ec3c54f7d37e4aea36711d4fe31a5c0317d23466 Mon Sep 17 00:00:00 2001 From: Baoshuo Date: Fri, 22 Nov 2024 16:22:46 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=AE=9E=E8=B7=B5=E8=AF=BE=E5=86=85?= =?UTF-8?q?=E3=80=9111.=E5=87=BD=E6=95=B02?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../6-1 使用函数输出指定范围内的完数.c | 44 +++++++++++++++ .../6-1 使用函数输出指定范围内的完数.md | 56 +++++++++++++++++++ 【实践课内】11.函数2/6-2 递归实现指数函数.c | 4 ++ 【实践课内】11.函数2/6-2 递归实现指数函数.md | 39 +++++++++++++ 【实践课内】11.函数2/6-3 十进制转换二进制.c | 8 +++ 【实践课内】11.函数2/6-3 十进制转换二进制.md | 38 +++++++++++++ 【实践课内】11.函数2/6-4 空心的数字金字塔.c | 33 +++++++++++ 【实践课内】11.函数2/6-4 空心的数字金字塔.md | 43 ++++++++++++++ 8 files changed, 265 insertions(+) create mode 100644 【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.c create mode 100644 【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.md create mode 100644 【实践课内】11.函数2/6-2 递归实现指数函数.c create mode 100644 【实践课内】11.函数2/6-2 递归实现指数函数.md create mode 100644 【实践课内】11.函数2/6-3 十进制转换二进制.c create mode 100644 【实践课内】11.函数2/6-3 十进制转换二进制.md create mode 100644 【实践课内】11.函数2/6-4 空心的数字金字塔.c create mode 100644 【实践课内】11.函数2/6-4 空心的数字金字塔.md diff --git a/【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.c b/【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.c new file mode 100644 index 0000000..f9fe4fe --- /dev/null +++ b/【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.c @@ -0,0 +1,44 @@ +int factorsum(int number) { + int sum = 0; + + for (int i = 1; i < number; i++) { + if (number % i == 0) { + sum += i; + } + } + + return sum; +} + +void print(int x) { + int cnt = 0; + + printf("%d = ", x); + + for (int i = 1; i < x; i++) { + if (x % i == 0) { + if (cnt++ != 0) { + printf(" + "); + } + + printf("%d", i); + } + } + + printf("\n"); +} + +void PrintPN(int m, int n) { + int cnt = 0; + + for (int i = m; i <= n; i++) { + if (factorsum(i) == i) { + print(i); + cnt++; + } + } + + if (cnt == 0) { + printf("No perfect number\n"); + } +} diff --git a/【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.md b/【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.md new file mode 100644 index 0000000..3cb085e --- /dev/null +++ b/【实践课内】11.函数2/6-1 使用函数输出指定范围内的完数.md @@ -0,0 +1,56 @@ +# 6-1 使用函数输出指定范围内的完数 + +本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数$$m$$和$$n$$($$0 + +int factorsum( int number ); +void PrintPN( int m, int n ); + +int main() +{ + int m, n; + + scanf("%d %d", &m, &n); + if ( factorsum(m) == m ) printf("%d is a perfect number\n", m); + if ( factorsum(n) == n ) printf("%d is a perfect number\n", n); + PrintPN(m, n); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例1: +```in +6 30 +``` + +### 输出样例1: +```out +6 is a perfect number +6 = 1 + 2 + 3 +28 = 1 + 2 + 4 + 7 + 14 +``` + +### 输入样例2: +```in +7 25 +``` + +### 输出样例2: +```out +No perfect number +``` + +**鸣谢杭州电子科技大学网络空间安全学院李丰同学修正数据!** diff --git a/【实践课内】11.函数2/6-2 递归实现指数函数.c b/【实践课内】11.函数2/6-2 递归实现指数函数.c new file mode 100644 index 0000000..cb8dabc --- /dev/null +++ b/【实践课内】11.函数2/6-2 递归实现指数函数.c @@ -0,0 +1,4 @@ +double calc_pow(double x, int n) { + if (n == 0) return 1; + return x * calc_pow(x, n - 1); +} diff --git a/【实践课内】11.函数2/6-2 递归实现指数函数.md b/【实践课内】11.函数2/6-2 递归实现指数函数.md new file mode 100644 index 0000000..1a67c9b --- /dev/null +++ b/【实践课内】11.函数2/6-2 递归实现指数函数.md @@ -0,0 +1,39 @@ +# 6-2 递归实现指数函数 + +本题要求实现一个计算$$x^n$$($$n\ge 1$$)的函数。 + +### 函数接口定义: +```c++ +double calc_pow( double x, int n ); +``` +函数`calc_pow`应返回`x`的`n`次幂的值。建议用递归实现。题目保证结果在双精度范围内。 + +### 裁判测试程序样例: +```c++ +#include + +double calc_pow( double x, int n ); + +int main() +{ + double x; + int n; + + scanf("%lf %d", &x, &n); + printf("%.0f\n", calc_pow(x, n)); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +2 3 +``` + +### 输出样例: +```out +8 +``` diff --git a/【实践课内】11.函数2/6-3 十进制转换二进制.c b/【实践课内】11.函数2/6-3 十进制转换二进制.c new file mode 100644 index 0000000..e7f3481 --- /dev/null +++ b/【实践课内】11.函数2/6-3 十进制转换二进制.c @@ -0,0 +1,8 @@ +int _dectobin_call_count = 0; + +void dectobin(int n) { + if (n == 0 && _dectobin_call_count != 0) return; + _dectobin_call_count++; + dectobin(n >> 1); + printf("%d", n & 1); +} diff --git a/【实践课内】11.函数2/6-3 十进制转换二进制.md b/【实践课内】11.函数2/6-3 十进制转换二进制.md new file mode 100644 index 0000000..d3ed0d1 --- /dev/null +++ b/【实践课内】11.函数2/6-3 十进制转换二进制.md @@ -0,0 +1,38 @@ +# 6-3 十进制转换二进制 + +本题要求实现一个函数,将非负整数n转换为二进制后输出。 + +### 函数接口定义: +```c++ +void dectobin( int n ); +``` +函数`dectobin`应在一行中打印出二进制的`n`。建议用递归实现。 + +### 裁判测试程序样例: +```c++ +#include + +void dectobin( int n ); + +int main() +{ + int n; + + scanf("%d", &n); + dectobin(n); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +10 +``` + +### 输出样例: +```out +1010 +``` diff --git a/【实践课内】11.函数2/6-4 空心的数字金字塔.c b/【实践课内】11.函数2/6-4 空心的数字金字塔.c new file mode 100644 index 0000000..4323702 --- /dev/null +++ b/【实践课内】11.函数2/6-4 空心的数字金字塔.c @@ -0,0 +1,33 @@ +void hollowPyramid(int n) { + if (n == 1) { + printf("1\n"); + + return; + } + + for (int i = 1; i < n; i++) { + printf(" "); + } + + printf("%d\n", 1); + + for (int i = 2; i < n; i++) { + for (int j = 1; j <= n - i; j++) { + printf(" "); + } + + printf("%d", i); + + for (int j = 1; j <= (i - 1) * 2 - 1; j++) { + printf(" "); + } + + printf("%d\n", i); + } + + for (int i = 1; i < n * 2; i++) { + printf("%d", n); + } + + printf("\n"); +} diff --git a/【实践课内】11.函数2/6-4 空心的数字金字塔.md b/【实践课内】11.函数2/6-4 空心的数字金字塔.md new file mode 100644 index 0000000..a99085f --- /dev/null +++ b/【实践课内】11.函数2/6-4 空心的数字金字塔.md @@ -0,0 +1,43 @@ +# 6-4 空心的数字金字塔 + +本题要求实现一个函数,输出n行空心的数字金字塔。 + +### 函数接口定义: +```c++ +void hollowPyramid( int n ); +``` + +其中`n`是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出`n`行空心的数字金字塔,请注意,最后一行的第一个数字前没有空格。 + +### 裁判测试程序样例: +```c++ +#include + +void hollowPyramid ( int n ); + +int main() +{ + int n; + + scanf("%d", &n); + hollowPyramid ( n ); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +5 +``` +### 输出样例: +```out + 1 + 2 2 + 3 3 + 4 4 +555555555 +``` +