实验3

任务一

源代码:

 1 #include <stdio.h>
 2 
 3 char score_to_grade(int score);  // 函数声明
 4 
 5 int main() {
 6     int score;
 7     char grade;
 8 
 9     while (scanf("%d", &score) != EOF) {
10         grade = score_to_grade(score);  // 函数调用
11         printf("分数: %d, 等级: %c\n\n", score, grade);
12     }
13 
14     return 0;
15 }
16 
17 // 函数定义
18 char score_to_grade(int score) {
19     char ans;
20 
21     switch (score / 10) {
22     case 10:
23     case 9:   ans = 'A'; break;
24     case 8:   ans = 'B'; break;
25     case 7:   ans = 'C'; break;
26     case 6:   ans = 'D'; break;
27     default:  ans = 'E';
28     }
29 
30     return ans;
31 }
View Code

 

运行结果截图:

a3af008caaecc3d7a3255f2c5af5e00e

 

问题1:该函数的作用是根据变量score(分数)的大小将其转化为对应的grade(等级);形参类型是int,返回值类型是char

问题2:1.没有break语句,若编译成功则会出现等级匹配错误,无论score取何值,都只会输出E

             2.单引号变成了双引号,赋值时变量类型不匹配会导致编译报错

任务二

源代码:

 1 #include <stdio.h>
 2 
 3 int sum_digits(int n);  // 函数声明
 4 
 5 int main() {
 6     int n;
 7     int ans;
 8 
 9     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
10         ans = sum_digits(n);    // 函数调用
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13 
14     return 0;
15 }
16 
17 // 函数定义
18 int sum_digits(int n) {
19     int ans = 0;
20 
21     while(n != 0) {
22         ans += n % 10;
23         n /= 10;
24     }
25 
26     return ans;
27 }
View Code

 

运行结果截图:

a1eca32ba38ef665f517c9e9bff43ab0

 

问题1:该函数功能是计算输入数据的每位上的数字之和

问题2:可以。原本的代码是通过循环使用迭代的算法思维实现的,而修改后的代码是使用的递归调用。迭代的思维更加直观,执行效率更高,而递归的思维虽然执行效率相对较低,但代码简洁

任务三

源代码:

 1 #include <stdio.h>
 2 
 3 int power(int x, int n);    // 函数声明
 4 
 5 int main() {
 6     int x, n;
 7     int ans;
 8 
 9     while (printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
10         ans = power(x, n);  // 函数调用
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13 
14     return 0;
15 }
16 
17 // 函数定义
18 int power(int x, int n) {
19     int t;
20 
21     if (n == 0)
22         return 1;
23     else if (n % 2)
24         return x * power(x, n - 1);
25     else {
26         t = power(x, n / 2);
27         return t * t;
28     }
29 }
View Code

 

运行结果截图:

fef9383eddbf8c1b7c02c3f930853b07

 

问题1:计算变量x的y次方

问题2:是递归函数;递归模式如下图所示:

de9ae41bc5c9ac563c582df543f3829d

 

任务四

源代码:

 1 #include<stdio.h>
 2 int classify_triangle(int a, int b, int c);
 3 int main() {
 4     int style;
 5     int a, b, c;
 6     while (scanf("%d%d%d", &a, &b, &c) != EOF) {
 7         style = classify_triangle(a, b, c);
 8         switch (style) {
 9         case 0:printf("不能构成三角形\n"); break;
10         case 1:printf("普通三角形\n"); break;
11         case 2:printf("等边三角形\n"); break;
12         case 3:printf("等腰三角形\n"); break;
13         case 4:printf("直角三角形\n"); break;
14         }
15     }
16     return 0;
17 }
18 int classify_triangle(int a, int b, int c) {
19     if (a + b > c && a + c > b & b + c > a) {
20         if (a == b && b == c) {
21             return 2;
22         }
23         else if (a == b || b == c || c == a) {
24             return 3;
25         }
26         else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) {
27             return 4;
28         }
29         else {
30             return 1;
31         }
32     }
33     else {
34         return 0;
35     }
36 }
View Code

 

运行结果截图:

1e73378c2de4ac5743f5501623f1c393

 

任务五

源代码1:

 1 #include <stdio.h>
 2 
 3 int func(int n, int m); // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8     while (scanf("%d%d", &n, &m) != EOF) {
 9         ans = func(n, m); // 函数调用
10         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
11     }
12     return 0;
13 }
14 
15 int func(int n, int m) {
16     int com = 1;
17     int i;
18     if (m<0 || m>n)
19         return 0;
20     if (m == 0||m==n)
21         return 1;
22     if (m > n - m) {
23         m = n - m;
24     }
25     for (i = 1; i <= m; i++)
26         com = com * (n - m + i) / i;
27     return com;
28 }
View Code

 

运行结果截图1:

f6ba3a433db1cb3b9fc9ce6fc8eb747e

 

源代码2:

 1 #include <stdio.h>
 2 
 3 int func(int n, int m); // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8     while (scanf("%d%d", &n, &m) != EOF) {
 9         ans = func(n, m); // 函数调用
10         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
11     }
12     return 0;
13 }
14 
15 int func(int n, int m) {
16     int com;
17     if (m<0 || m>n)
18         return 0;
19     if (m == 0||m==n)
20         return 1;
21     com = func(n - 1, m) + func(n - 1, m - 1);
22     return com;
23 }
View Code

 

运行结果截图2:

4bc2d27f50bc9f521b9c8eb8dc3c5305

 

任务六

源代码:

 1 #include <stdio.h>
 2 
 3 int gcd(int a, int b, int c);
 4 
 5 int main() {
 6     int a, b, c;
 7     int ans;
 8     while (scanf("%d%d%d", &a, &b, &c) != EOF) {
 9         ans = gcd(a, b, c);
10         printf("最大公约数:%d\n\n", ans);
11     }
12     return 0;
13 }
14 
15 int gcd(int a, int b, int c) {
16     int i;
17     if (a <= 0 || b <= 0 || c <= 0) {
18         return 1;
19     }
20     int n = a;
21     if (b < n) n = b;
22     if (c < n) n = c;
23     for (i = n; i >= 1; i--) {
24         if (a % i == 0 && b % i == 0 && c % i == 0) {
25             return i;
26         }
27     }
28     return 1;
29 }
View Code

 

运行结果截图:

bd80d18fcd1128015279fa3a151df5df

 

任务七

源代码:

 1 #include <stdio.h>
 2 
 3 void print_charman(int n);
 4 
 5 int main() {
 6     int n;
 7     printf("Enter n: ");
 8     scanf("%d", &n);
 9     print_charman(n);
10     return 0;
11 }
12 
13 void print_charman(int n) {
14     int i, j, k;
15     for (i = 0; i < n; i++) {
16         for (j = 0; j < i; j++) {
17             printf("    ");
18         }
19         for (k = 0; k < 2 * (n - i) - 1; k++) {
20             printf(" 0  ");
21         }
22         printf("\n");
23 
24         for (j = 0; j < i; j++) {
25             printf("    ");
26         }
27         for (k = 0; k < 2 * (n - i) - 1; k++) {
28             printf("<H> ");
29         }
30         printf("\n");
31 
32         for (j = 0; j < i; j++) {
33             printf("    ");
34         }
35         for (k = 0; k < 2 * (n - i) - 1; k++) {
36             printf("I I ");
37         }
38         printf("\n\n");
39     }
40 }
View Code

 

运行结果截图:

9712c31f718e8dd8ffdc976da95f5ba9

 

6fa650ac2719bd94bc3862bf2139499e

 

posted @ 2026-04-21 20:39  月色群青  阅读(11)  评论(0)    收藏  举报