实验三

试验任务一

源代码

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

结果截屏

image

 问题

1.功能:根据输入的分数,将其转换为对应的等级制字符并返回     形参类型:整型     返回值类型:字符型

2.用双引号会存在类型不匹配,从而使运行出错     缺少break语句,从而导致case穿透

试验任务二

源代码

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

结果截屏

image

 

问题

1.计算并返回一个整数n的各个数字之和

2.能 前者是迭代  后者是递归

试验任务三

源代码

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

 

结果截屏

屏幕截图 2026-04-15 161708

问题

1.递归计算x的n次幂

2.是递归函数

1,                                  n=0      

 x X power(x, n-1),        n=2k-1

 (power(x,n/2))的平方,  n=2k

试验任务四

源代码

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

 

结果截屏

屏幕截图 2026-04-15 163427

 

试验任务五

源代码

1.迭代

 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("%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     if(n < m){
16         return 0;
17     }
18     long long ans = 1;
19     for (int i = n - m + 1; i <= n; i++){
20         ans *= i;
21     }
22     for (int i = 1; i <= m; i++){
23         ans /= i;
24     }
25     return ans;
26 }   

 

2.递归

 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("%d%d", &n, &m) != EOF) {
 8         ans = func(n, m);  
 9         printf("n = %d, m = %d, ans = %d\n", n, m, ans);
10     }
11     system("pause");
12     return 0;
13 }
14 int func(int n, int m) {
15     if (m < 0 || m > n) return 0;
16     if (m == 0 || m == n) return 1;
17     return func(n - 1, m) + func(n - 1, m - 1);
18 }

 

结果截屏

屏幕截图 2026-04-15 165015

 

试验任务六

源代码

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

结果截屏

屏幕截图 2026-04-15 171320

试验任务七

源代码

 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     for (int k = 0; k < n; k++) {
14         for (int i = 0; i < k; i++) {
15             printf("   "); 
16         }
17         for (int i = 0; i < n - k; i++) {
18             printf("O  ");
19         }
20         printf("\n");
21           for (int i = 0; i < k; i++) {
22             printf("   "); 
23         }
24         for (int i = 0; i < n - k; i++) {
25             printf("<> ");
26         }
27         printf("\n");
28         for (int i = 0; i < k; i++) {
29             printf("   ");
30         }
31         for (int i = 0; i < n - k; i++) {
32             printf("I I");
33         }
34         printf("\n");
35     }
36 }

结果截屏

屏幕截图 2026-04-15 171807

 

posted @ 2026-04-15 17:22  kasdda  阅读(11)  评论(0)    收藏  举报