实验任务1:
- 源代码
1 #include <stdio.h>
2 char score_to_grade(int score);
3 int main() {
4 int score;
5 char grade;
6 while (scanf_s("%d", &score) != EOF) {
7 grade = score_to_grade(score);
8 printf("分数: %d, 等级: %c\n\n", score, grade);
9 }
10 return 0;
11 }
12 char score_to_grade(int score) {
13 char ans;
14 switch (score / 10) {
15 case 10:
16 case 9: ans = 'A'; break;
17 case 8: ans = 'B'; break;
18 case 7: ans = 'C'; break;
19 case 6: ans = 'D'; break;
20 default:ans = 'E';
21 }
22 return ans;
23 }
- 运行结果截图:
3.问题回答:
ans1:函数score_to_grade的功能是将分数转化成对应的等级 形参类型是int 返回值类型是char
ans2:(1)由于返回值类型为char,故应该使用' '而不是" " (2)缺少break,case会一直向下,最终输出结果均为E
实验任务2:
1.源代码:
1 #include <stdio.h>
2 int sum_digits(int n);
3 int main() {
4 int n;
5 int ans;
6 while (printf("Enter n: "), scanf_s("%d", &n) != EOF) {
7 ans = sum_digits(n);
8 printf("n = %d, ans = %d\n\n", n, ans);
9 }
10 return 0;
11 }
12 int sum_digits(int n) {
13 int ans = 0;
14 while (n != 0) {
15 ans += n % 10;
16 n /= 10;
17 }
18 return ans;
19 }
2.运行结果截图:
3.问题回答:
ans1:函数sum_digits的功能是计算n各个数位上数字的和
ans2:能实现,原代码是运用循环算法,修改代码是运用递归算法
实验任务3:
1.源代码:
1 #include <stdio.h>
2 int power(int x, int n);
3 int main() {
4 int x, n;
5 int ans;
6 while (printf("Enter x and n: "), scanf_s("%d%d", &x, &n) != EOF) {
7 ans = power(x, n);
8 printf("n = %d, ans = %d\n\n", n, ans);
9 }
10
11 return 0;
12 }
13 int power(int x, int n) {
14 int t;
15 if (n == 0)
16 return 1;
17 else if (n % 2)
18 return x * power(x, n - 1);
19 else {
20 t = power(x, n / 2);
21 return t * t;
22 }
23 }
2.运行结果截图:
3.问题回答:
ans1:函数power的功能是计算x的n次幂
ans2:是递归函数,在n为奇数和偶数时存在递归,数学公式为:
实验任务4:
1.源代码:
1 #include <stdio.h>
2
3 int main()
4 {
5 int a, b, c;
6 int classify_triangle(int a, int b, int c);
7 while (scanf_s("%d%d%d", &a, &b, &c) != EOF) {
8 switch (classify_triangle(a, b, c)) {
9 case 0:
10 printf("不能构成三角形\n");
11 break;
12 case 1:
13 printf("普通三角形\n");
14 break;
15 case 2:
16 printf("等边三角形\n");
17 break;
18 case 3:
19 printf("等腰三角形\n");
20 break;
21 case 4:
22 printf("直角三角形\n");
23 break;
24 }
25 }
26
27 return 0;
28
29 }
30
31 int classify_triangle(int a, int b, int c) {
32
33 if (a + b <= c || a + c <= b || b + c <= a)
34 return 0;
35 else if (a == b && b == c)
36 return 2;
37 else if (a == b || c == b || a == c)
38 return 3;
39 else if (a * a + b * b == c * c || a * a + c * c == b * b || c * c + b * b == a * a)
40 return 4;
41 else
42 return 1;
43
44 }
2.运行结果截图:
实验任务5:
1.源代码
迭代:
1 #include <stdio.h>
2 int func(int n, int m);
3 int main()
4 {
5 int n, m;
6 int ans;
7 while (scanf_s("%d%d", &n, &m) != EOF)
8 {
9 ans = func(n, m);
10 printf("n = %d,m = %d,ans = %d\n\n", n, m, ans);
11 }
12 return 0;
13 }
14 int func(int n, int m)
15 {
16 int i;
17 int a1 = 1, a2 = 1, a3 = 1;
18 int a;
19 for (i = 1; i <= n; i++)
20 {
21 a1 *= i;
22 }
23 for (i = 1; i <= m; i++)
24 {
25 a2 *= i;
26 }
27 for (i = 1; i <= (n - m); i++)
28 {
29
30 a3 *= i;
31 }
32 a = a1 / a2 / a3;
33 return a;
34 }
递归:
1 #include <stdio.h>
2 int func(int n, int m);
3 int main()
4 {
5 int n, m;
6 int ans;
7 while (scanf_s("%d%d", &n, &m) != EOF)
8 {
9 ans = func(n, m);
10 printf("n = %d,m = %d,ans = %d\n\n", n, m, ans);
11 }
12 return 0;
13 }
14 int func(int n, int m)
15 {
16 if (m == 0||m == n)
17 return 1;
18 else if (m > n)
19 return 0;
20 else
21 return func(n - 1, m) + func(n - 1, m - 1);
22 }
2.运行结果截图:
实验任务6:
1.源代码:
1 #include <stdio.h>
2 int gcd(int a, int b, int c);
3 int main() {
4 int a, b, c;
5 int ans;
6 while (scanf_s("%d%d%d", &a, &b, &c) != EOF) {
7 ans = gcd(a, b, c);
8 printf("最大公约数: %d\n\n", ans);
9 }
10 return 0;
11 }
12 int gcd(int a, int b, int c)
13 {
14 int min = a;
15 if (b < min) min = b;
16 if (c < min) min = c;
17 for (int i = min; i >= 1; i--) {
18 if (a % i == 0 && b % i == 0 && c % i == 0) {
19 return i;
20 }
21 }
22 return 1;
23 }
2.运行结果截图:
实验任务7:
1.源代码:
1 #include <stdio.h>
2 #include <stdlib.h>
3 void print_charman(int n);
4 int main() {
5 int n;
6 printf("Enter n:");
7 scanf_s("%d", &n);
8 print_charman(n);
9 return 0;
10 }
11 void print_charman(int n)
12 {
13 int i, j, k;
14 for (i = n - 1; i >= 0; i--) {
15 for (k = n; k > i; k--)
16 {
17 printf("\t");
18 }
19 for (j = 0; j < 2 * i + 1; j++)
20 {
21 printf(" O\t");
22 }
23 printf("\n");
24 for (k = n; k > i; k--)
25 {
26 printf("\t");
27 }
28 for (j = 0; j < 2 * i + 1; j++)
29 {
30 printf("<H>\t");
31 }
32 printf("\n");
33 for (k = n; k > i; k--)
34 {
35 printf("\t");
36 }
37 for (j = 0; j < 2 * i + 1; j++)
38 {
39 printf("I I\t");
40 }
41 printf("\n");
42 }
43 }
2.运行结果截图: