实验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 char score_to_grade(int score){
18     char ans;
19 
20     switch(score/10){
21     case 10:
22     case 9: ans = 'A'; break;
23     case 8: ans = 'B'; break;
24     case 7: ans = 'C'; break;
25     case 6: ans = 'D'; break;
26     default: ans = 'E';
27     }
28 
29     return ans;
30 }

 

运行截图

屏幕截图 2026-04-15 221121

问题1:函数的功能是判断输入分数所在等级;形参类型是整形,返回值是单个字符

问题2:会导致执行正确的case语句后继续向下执行后面所有的case语句

 

实验任务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 int sum_digits(int n){
18     int ans = 0;
19 
20     while(n != 0){
21         ans += n % 10;
22         n /= 10;
23     }
24 
25     return ans;
26 }

 

运行截图

屏幕截图 2026-04-15 223241

问题1:计算输入数值各个位数上的数字之和

问题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 int power(int x, int n){
18     int t;
19 
20     if(n == 0)
21         return 1;
22     else if(n % 2)
23         return x * power(x, n-1);
24     else{
25         t = power(x, n/2);
26         return t*t;
27     }
28 }

 

运行截图

屏幕截图 2026-04-18 161944

问题1:计算x的n次方

问题2:是递归函数

586D70BD9CFFB5190793384D3458E82E

 

实验任务4

源代码

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

 

运行截图

屏幕截图 2026-04-18 211240

 

实验任务5

源代码(迭代方式)

 1 #include<stdio.h>
 2 int func(int n, int m);
 3 
 4 int main(){
 5     int n, m;
 6     int ans;
 7     
 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     
13     return 0;
14 }
15 
16 int func(int n, int m){
17     long long a = 1;
18     int i;
19     
20     if(m > n)
21         return 0;
22         
23     if(m == n || m == 0)
24         return 1;
25         
26     if(m > n - m)
27         m = n - m;
28         
29     if(m < n){
30         for(i = 1; i <= m; i++){
31             a = a*(n - m + i)/i;
32         }
33     }
34     
35     return a;
36 }

 

运行截图(迭代方式)

屏幕截图 2026-04-19 222057

源代码(递归方式)

 1 #include<stdio.h>
 2 int func(int n, int m);
 3 
 4 int main(){
 5     int n, m;
 6     int ans;
 7     
 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     
13     return 0;
14 }
15 
16 int func(int n, int m){
17     int x;
18     if(m > n)
19         return 0;
20     if(m == n || m == 0)
21         return 1;
22     if(m > n - m) 
23         m = n - m;
24     if(m < n){
25         return func((n - 1), m) + func((n - 1), (m - 1));
26     }
27 }

 

运行截图(递归方式)

屏幕截图 2026-04-19 224217

 

实验任务6

源代码

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

 

运行截图

屏幕截图 2026-04-20 162654

 

实验任务7

运行代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 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     
11     return 0;
12 }
13 
14 void print_charman(int n){
15     int count, i = 0, k, x;
16 
17     for(i; i <= n; i++){
18         count = 2*(n - i) - 1;
19         
20     for(x = 0; x < i; ++x){
21         printf("\t");
22     }
23     for(k = 0; k < count; k++ ){
24         printf(" O\t");
25     }
26     printf("\n");
27     
28     for(x = 0; x < i; ++x){
29         printf("\t");
30     }
31     for(k = 0; k < count; k++ ){
32         printf("<H>\t");
33     }
34     printf("\n");
35     
36     for(x = 0; x < i; ++x){
37         printf("\t");
38     }
39     for(k = 0; k < count; k++ ){
40         printf("I I\t");
41     }
42     printf("\n");
43     }
44 }

 

运行截图

屏幕截图 2026-04-20 190746

屏幕截图 2026-04-20 190727

 

posted @ 2026-04-20 19:15  Lei_YY  阅读(10)  评论(0)    收藏  举报