1
0
mirror of https://github.com/renbaoshuo/202401-programming-assignments.git synced 2024-11-23 09:38:42 +00:00

【实践课内】11.函数2

This commit is contained in:
Baoshuo Ren 2024-11-22 16:22:46 +08:00
parent 299de7a54b
commit ec3c54f7d3
Failed to extract signature
8 changed files with 265 additions and 0 deletions

View File

@ -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");
}
}

View File

@ -0,0 +1,56 @@
# 6-1 使用函数输出指定范围内的完数
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数$$m$$和$$n$$$$0<m\le n\le 10000$$之间的所有完数所谓完数就是该数恰好等于除自身外的因子之和例如6=1+2+3其中1、2、3为6的因子。
### 函数接口定义:
```c++
int factorsum( int number );
void PrintPN( int m, int n );
```
其中函数`factorsum`须返回`int number`的因子和;函数`PrintPN`要逐行输出给定范围[`m`, `n`]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”其中完数和因子均按递增顺序给出。如果给定区间内没有完数则输出一行“No perfect number”。
### 裁判测试程序样例:
```c++
#include <stdio.h>
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
```
**鸣谢杭州电子科技大学网络空间安全学院李丰同学修正数据!**

View File

@ -0,0 +1,4 @@
double calc_pow(double x, int n) {
if (n == 0) return 1;
return x * calc_pow(x, n - 1);
}

View File

@ -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 <stdio.h>
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
```

View File

@ -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);
}

View File

@ -0,0 +1,38 @@
# 6-3 十进制转换二进制
本题要求实现一个函数将非负整数n转换为二进制后输出。
### 函数接口定义:
```c++
void dectobin( int n );
```
函数`dectobin`应在一行中打印出二进制的`n`。建议用递归实现。
### 裁判测试程序样例:
```c++
#include <stdio.h>
void dectobin( int n );
int main()
{
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
/* 你的代码将被嵌在这里 */
```
### 输入样例:
```in
10
```
### 输出样例:
```out
1010
```

View File

@ -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");
}

View File

@ -0,0 +1,43 @@
# 6-4 空心的数字金字塔
本题要求实现一个函数输出n行空心的数字金字塔。
### 函数接口定义:
```c++
void hollowPyramid( int n );
```
其中`n`是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出`n`行空心的数字金字塔,请注意,最后一行的第一个数字前没有空格。
### 裁判测试程序样例:
```c++
#include <stdio.h>
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
```