实验3

任务1

源代码

 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 }

运行结果截图

31

问题1:函数score_to_grade()的作用是将输入的考试分数转换为A~E五个等级;函数的形参类型为整型;返回值类型为字符型。

问题2:1.缺少break,程序会继续执行其他分支

       2."A""B""C"是字符串常量,要改为''

任务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 }

运行结果截图

32

问题1:函数sum_digits的是计算整数n的各位数字之和

问题2:能实现同样的输出。原代码运用了迭代的算法,修改后的代码用了递归的思想。

任务3

源代码

 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 }

运行结果截图

33

问题1:函数power的gongneng是计算x的n次幂

问题2:是。

123

任务4

源代码

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

运行结果截图

34

任务5

迭代源代码

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

运行结果截图

351

递归源代码

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 int func2(int n, int m);
 4 int main() {
 5     int n, m;
 6     int ans;
 7     while (scanf("%d%d", &n, &m) != EOF) {
 8         ans = func2(n, m);
 9         printf("n=%d, m=%d, ans=%d\n\n", n, m, ans);
10     }
11     system("pause");
12     return 0;
13 }
14 
15 int func2(int n, int m) {
16     if (m == 0 || n == m) {
17         return 1;
18     }
19     if (m > n) {
20         return 0;
21     }
22     return func2(n - 1, m) + func2(n - 1, m - 1);
23 }

运行结果截图

35

任务6

源代码

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

运行结果截图

36

任务7

源代码

 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("%d",&n);
 8     print_charman(n);
 9     system("pause");
10     return 0;
11 }
12 void print_charman(int n) {
13     int i=1;
14     for (int i = 1; i <= n; i++) {
15         int k=2*(n-i)+1;
16         int j=1;
17         for (int j = 1; j < i; j++) {
18             printf("\t");
19         }
20         for (int j = 1; j <= k; j++) {
21             printf(" O \t");
22         }
23         printf("\n");
24         for (int j = 1; j < i; j++) {
25             printf("\t");
26         }
27         for (int j = 1; j <=k; j++) {
28             printf("<H>\t");
29         }
30         printf("\n");
31         for (int j = 1; j < i; j++) {
32             printf("\t");
33         }
34         for (int j = 1; j <= k; j++) {
35             printf("I I\t");
36         }
37         printf("\n");
38     }
39 }

运行结果截图

输入3时

371

输入4时

372

 

posted @ 2026-04-21 22:35  极法魔君  阅读(6)  评论(0)    收藏  举报