实验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 }

运行结果截图:

屏幕截图 2025-10-30 150309

问题1:函数功能:将输入的分数转换为对应的等级A、B、C、D、E,通过对分数整除 10 的结果匹配等级。形参类型:int。返回值类型:char。

问题2:字符常量应使用单引号,case10分支缺少break语句,会导致执行完case10后,继续执行后续case9等代码,无法正确匹配等级。

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

运行结果截图:

屏幕截图 2025-10-30 151433

问题1:计算输入整数n的各位数字之和。

问题2:能实现同样的输出。原采用循环方式,通过while循环逐次取n的个位数字累加,再将n整除 10去掉已处理的个位,直到n为 0,最终得到各位数字和。新采用递归方式,通过函数自身调用分解问题。

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

运行结果截图:

屏幕截图 2025-10-30 152001

问题1:计算X的n次幂

问题2:是递归函数。当n=0是,power(x,n)=1;当n>0且n为奇数,power(x,n)=x*power(x,n-1);当n>0且n为偶数,power(x,n)=(power(x,n/2))^2

实验任务4:

 1 #include <stdio.h>
 2 
 3 int power(int x, int n);    // 函数声明
 4 
 5 #include <stdio.h>
 6 #include <stdbool.h>
 7 
 8 // 判断一个数是否为素数
 9 bool is_prime(int num) {
10     if (num < 2) return false;
11     for (int i = 2; i * i <= num; i++) {
12         if (num % i == 0) return false;
13     }
14     return true;
15 }
16 
17 int main() {
18     int count = 0;
19     printf("100以内的孪生素数对:\n");
20     for (int n = 2; n + 2 <= 100; n++) {
21         if (is_prime(n) && is_prime(n + 2)) {
22             printf("%d %d\n", n, n + 2);
23             count++;
24         }
25     }
26     printf("100以内孪生素数共有%d个", count);
27     return 0;
28 }

运行结果截图:

屏幕截图 2025-10-30 153029

实验任务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 // 函数定义
17 int func(int n, int m) {
18     if (m > n || m < 0) return 0;
19     if (m == 0 || m == n) return 1;
20     return func(n - 1, m) + func(n - 1, m - 1);
21 }
 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 // 函数定义
17 int func(int n, int m) {
18     if (m > n || m < 0) return 0;
19     if (m == 0 || m == n) return 1;
20     
21     m = (m < n - m) ? m : (n - m);
22     
23     long long t = 1 ,p=1 ; 
24     for (int i = 1; i <= m; i++) {
25         t = t*i;
26     }
27     for (int i = n; i>=n-m+1;i--){
28         p = p*i;
29     }
30     
31     return p/t;
32 }

运行结果截图:

屏幕截图 2025-10-30 154752

实验任务6:

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

运行结果截图:

屏幕截图 2025-10-30 155242

实验任务7:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 // 函数声明
 5 void print_charman(int n);
 6 
 7 
 8 int main() {
 9     int n;
10 
11     printf("Enter n: ");
12     scanf("%d", &n);
13     print_charman(n); // 函数调用
14        
15     return 0;
16 }
17 
18 // 函数print_charman定义
19 void print_charman(int n) {
20     for (int i = 0; i < n; i++) {
21        
22         for (int t = 0; t < i; t++) { 
23             printf("\t");
24         }
25         int count = 2 * (n - i) - 1; 
26         for (int j = 0; j < count; j++) {
27             printf(" O\t");
28         }
29         printf("\n");
30 
31         for (int t = 0; t < i; t++) {
32             printf("\t");
33         }
34         for (int j = 0; j < count; j++) {
35             printf("<H>\t");
36         }
37         printf("\n");
38         for (int t = 0; t < i; t++) {
39             printf("\t");
40         }
41         for (int j = 0; j < count; j++) {
42             printf("I I\t");
43         }
44         printf("\n\n");
45     }
46 }

运行结果截图:

屏幕截图 2025-10-30 155720

 

屏幕截图 2025-10-30 155730

 

 
 
posted @ 2025-10-30 15:58  杨成宇  阅读(3)  评论(0)    收藏  举报