diff --git a/Experiment.md b/Experiment.md index 3267771..017f51c 100644 --- a/Experiment.md +++ b/Experiment.md @@ -120,13 +120,11 @@ ## (二)、 -1. 解题分析: - +1. 第一题(2)、(4)解题分析: + 此题较为简单,调用 `math.h` 库即可 - + ```c - // 第二题和第四题 - #include #include @@ -146,9 +144,9 @@ printf("%lf\n", T3(x, y)); } ``` - + 测试: - + ``` 输入: 1 @@ -157,14 +155,12 @@ 1.290994 20.453416 ``` - -2. 解题分析: + +2. 第二题解题分析: 此题较为简单,考虑读取的是字符,将字符逆向输出即可 ```c - // 第二题 - #include int main() { @@ -185,13 +181,11 @@ 4, 3, 2, 1 ``` -3. 解题分析: +3. 第三题解题分析: 此题较为简单,调用 `math.h` 库即可 ```c - // 第三题 - #include #include @@ -220,13 +214,11 @@ -4. 解题分析: +4. 第五题(1)、(3)解题分析: 此题较为简单,可以使用 `for` 循环,这里使用递归进行求解 ```c - // 第五题中的第一题和第二题 - int T1(int i) { return i == 1 ? i : i + T1(i - 1); } @@ -252,15 +244,165 @@ 程序如期运行,结果正确 +5. 第六题解题分析: + + 比较简单的一道题 + + ```c + #include + + #define MAGIC_NUMBER 21 + + void print_left(int i) { + for (int j = 1; j <= i; j += 2) + printf(" %d ", j); + } + + void print_right(int i) { + for (int j = i - 2; j >= 1; j -= 2) + printf(" %d ", j); + } + + void print_space(int i) { + for (int j = 1; j <= MAGIC_NUMBER - i - 1; j += 2) { + printf(" "); + } + } + + int main() { + for (int i = 1; i <= MAGIC_NUMBER; i += 2) { + print_space(i); + print_left(i); + print_right(i); + printf("\n"); + } + } + ``` + + 测试 + + ``` + 1 + 1 3 1 + 1 3 5 3 1 + 1 3 5 7 5 3 1 + 1 3 5 7 9 7 5 3 1 + 1 3 5 7 9 11 9 7 5 3 1 + 1 3 5 7 9 11 13 11 9 7 5 3 1 + 1 3 5 7 9 11 13 15 13 11 9 7 5 3 1 + 1 3 5 7 9 11 13 15 17 15 13 11 9 7 5 3 1 + 1 3 5 7 9 11 13 15 17 19 17 15 13 11 9 7 5 3 1 + 1 3 5 7 9 11 13 15 17 19 21 19 17 15 13 11 9 7 5 3 1 + ``` + +6. 第七题题目解析: + + 遍历即可 + + ```c + #include + + int main() { + for (int i = 1; i <= 10; ++i) + for (int j = 1; j < i; ++j) + printf("<%d, %d>\n", i, j); + } + ``` + + 测试 + + ``` + <2, 1> + <3, 1> + <3, 2> + ... + <10, 7> + <10, 8> + <10, 9> + ``` + +7. 第八题题目解析: + + 暴力输出即可 + + ```c + #include + + int main() { + for (int i = 2; i < 10; ++i) + for (int j = 1; j < i; ++j) + printf("%d\n", j * 10 + i); + for (int i = 3; i < 10; ++i) + for (int j = 2; j < i; ++j) + for (int k = 1; k < j; ++k) + printf("%d\n", k * 100 + j * 10 + i); + for (int i = 4; i < 10; ++i) + for (int j = 3; j < i; ++j) + for (int k = 2; k < j; ++k) + for (int l = 1; l < k; ++l) + printf("%04d\n", l * 1000 + k * 100 + j * 10 + i); + } + ``` + + 测试: + + ``` + 12 + 13 + 23 + ... + 4789 + 5789 + 6789 + ``` + +8. 第九题题目解析: + + 使用递归进行求解较为简单 + + ```c + #include + + void find_fact(int n) { + int is_fact = 1; + for (int i = 2; i < n; ++i) { + if (n % i == 0) { + printf("%d*", i); + find_fact(n / i); + is_fact = 0; + break; + } + } + if (is_fact) { + printf("%d", n); + } + } + + int main() { + int n; + scanf("%d", &n); + find_fact(n); + } + ``` + + 测试: + + ``` + 输入:16 + 输出:2*2*2*2 + 输入:15 + 输出:3*5 + 输入:200 + 输出:2*2*2*5*5 + ``` + ## (三)、 -1. 解题分析: +1. 第二题解题分析: 只需反复求出后三位乘以 `12` 的结果即可 ```c - // 第二题 - #include int main() { @@ -271,6 +413,12 @@ } ``` + 测试: + + ``` + 512 + ``` + # 实验总结 在完成 `T10` 时,本地编译出现了错误;经排错发现为报告代码出现问题。将代码中 `int fun(int) `的声明修改为 `void fun(int)` 后编译通过。通过此测试了解到了 `C++` 语言中声明应与实现一致。