实验3

task1

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

屏幕截图 2025-10-25 170000

问题1
功能:把数值分数映射为等级字母(A/B/C/D/E)。

形参类型:int score。

返回值类型:char(返回单个字符,例如 'A')。

问题2

1. 类型错误:ans 是 char,但使用了字符串字面量 "A"/"B",不能赋给 char。应使用字符字面量 'A'。
2. 缺少 break:会发生 case 穿透,导致多个分支继续执行并最终覆盖 ans,逻辑错误。
3. 一致性问题:default 用的是单引号 'E',而其他分支用了双引号,类型不一致。

task2

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

屏幕截图 2025-10-25 171059

问题1

功能:计算整数各位数字之和。

问题2
能实现相同输出。改后为递归实现,原来为迭代实现。

task3

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

屏幕截图 2025-10-25 172252

问题1
功能:函数 power(int x, int n) 计算整数 x 的 n 次幂。
问题2
是递归函数。对应的递归模式(数学形式)为:
若 n = 0,power(x,n) = 1。
若 n 为奇数,power(x,n) = x * power(x, n-1)。
若 n 为偶数,power(x,n) = (power(x, n/2))^2。

task4

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 
 5 int is_prime(int n) {
 6     if (n <= 1) return 0;
 7     if (n == 2) return 1;
 8     if (n % 2 == 0) return 0;
 9     for (int i = 3; i * i <= n; i += 2) {
10         if (n % i == 0) return 0;
11     }
12     return 1;
13 }
14 
15 int main() {
16     printf("100以内的孪生素数:\n");
17     int count = 0;
18     for (int i = 2; i <= 98; i++) {
19         if (is_prime(i) && is_prime(i + 2)) {
20             printf("%d %d\n", i, i + 2);
21             count++;
22         }
23     }
24     printf("100以内的孪生素数共有%d个\n", count);
25     return 0;
26 }
View Code

屏幕截图 2025-10-24 125100

task5

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

屏幕截图 2025-10-25 174036

task6

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 
 5 int gcd(int a, int b,int c);
 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 int gcd(int a, int b,int c) {
20 
21     int min1= a < b? a : b ;
22     int i= min1 < c ? min1 : c;
23     for (int j = i; i >=1; j--) {
24         if (a % j == 0 && b % j == 0 && c % j == 0)
25             return j;
26 
27     }
28 }
View Code

屏幕截图 2025-10-25 181210

task7

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 
 5 void print_charman(int n);
 6 void ans1(int m, int indent);
 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 void print_charman(int n) {
19    
20     for (int i = 0; i < n; i++) {
21         int m = 2 * (n - i) - 1;  
22         int indent = i;    
23         ans1(m, indent);
24         printf("\n"); 
25     }
26 }
27 
28 void ans1(int m, int indent) {
29     int i, k;
30     for (k = 0; k < indent; k++) printf("\t");
31     for (i = 0; i < m; i++) {
32         printf(" O \t");
33         
34     }
35     printf("\n");
36   
37     for (k = 0; k < indent; k++) printf("\t");
38     for (i = 0; i < m; i++) {
39         printf("<H>\t");
40 
41     }
42     printf("\n");
43 
44     for (k = 0; k < indent; k++) printf("\t");
45     for (i = 0; i < m; i++) {
46         printf("I I\t");
47 
48     }
49     printf("\n");
50 }
View Code

屏幕截图 2025-10-25 184937

屏幕截图 2025-10-25 184917

 

posted @ 2025-10-25 18:51  张天宁  阅读(16)  评论(1)    收藏  举报