实验三

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

问题1:接收得分并返还等级

问题2:无break结束判断,输出恒为E;双引号导致数据类型不匹配

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

问题1:接收整数n并返还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_s("%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 195850

问题1:计算x的n次方

问题2:是;

image

 实  验  4

 1 #include <stdio.h>
 2 
 3 int is_prime(int n);
 4 
 5 int main()
 6 {
 7     int all = 0;
 8     printf("100以内的孪生素数:\n");
 9     for (int n = 1; n < 98; n++)
10     {
11         if (is_prime(n) && is_prime(n + 2))
12         {
13             printf("%d %d\n", n, n + 2);
14             all++;
15         }
16     }
17     printf("100以内的孪生素数共有%d个", all);
18     return 0;
19 }
20 
21 
22 int is_prime(int n)
23 {
24     for (int i = 2; i < n; i++)
25     {
26         if (n % i == 0)
27         {
28             return 0;
29         }
30     }
31     if (n == 1)
32     {
33         return 0;
34     }
35     return 1;
36 }

image

实  验  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_s("%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 {
19     int ans;
20     int a = 1;
21     int b = 1;
22     int c = 1;
23     for (int i = 1; i <= n; i++)
24     {
25         a *= i;
26     }
27     for (int i = 1; i <= m; i++)
28     {
29         b *= i;
30     }
31     for (int i = 1; i <= n - m; i++)
32     {
33         c *= i;
34     }
35     ans = a / (b * c);
36     return ans;
37 }

image

递归:

 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_s("%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 {
19     int ans = 0;
20     if (m > n)
21     {
22         return 0;
23     }
24     else if (m == n || m == 0)
25     {
26         return 1;
27     }
28     else if (m == 1)
29     {
30         ans = n;
31     }
32     else
33     {
34         ans = func(n - 1, m) + func(n - 1, m - 1);
35     }
36     return ans;
37 }

image

 实  验  6

 

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

image

 实  验  7

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

image

image

 

 

 

 

 

 

posted @ 2025-10-31 00:41  Groundc  阅读(3)  评论(0)    收藏  举报