实验3

task1.c

 1 #include<stdio.h>
 2 
 3 char score_to_grade(int score);
 4 
 5 int main()
 6 {
 7     int score;
 8     char grade;
 9 
10         while(scanf("%d", &score) != EOF) {
11         grade = score_to_grade(score); 
12         printf("分数: %d, 等级: %c\n\n", score, grade);
13     }
14 
15     return 0;
16 }
17 
18 char score_to_grade(int score) 
19 {
20     char ans;
21 
22     switch(score/10) 
23     {
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 }

批注 2025-10-24 083658

answer1:将分数转换为对应的等级,int   ,  char

answer2:会报错,ans是char类型的字符型,字母应该用单引号包裹,而双引号表示字符串;

同时后续没有break; 这使得若已经执行该语句,后续语句仍然会执行。

 

task2.c

 1 #include <stdio.h>
 2 
 3 int sum_digits(int n);
 4 
 5 int main()
 6 {
 7     int n;
 8     int ans;
 9 
10     while(printf("Enter n: "), scanf("%d", &n) != EOF)
11     {
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 {
22     int ans = 0;
23 
24     while(n != 0) 
25     {
26         ans += n % 10;
27         n /= 10;
28     }
29 
30     return ans;
31 }

批注 2025-10-24 085121

answer1:计算某个整数的个位数字之和

answer2:可以

原方式为迭代,通过while循环锥刺提取个位数字并累加,

问中为递归,将其分解为数字最后一位与剩余各部分数字之和,进行分解与累加。

 

task3.c

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

批注 2025-10-24 090232

answer1:将x变为x的n次方

answer2:是,通过递归模式将幂运算的规模逐渐缩小。

16AD427F95EB850B7622581C3C388FEC

 

 

task4.c

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

屏幕截图 2025-10-29 234119

 

 

task5.c

diedai:

 1 #include <stdio.h>
 2  int func(int n, int m);
 3  int main()
 4   {
 5      int n, m;
 6      int ans;
 7      while(scanf("%d%d", &n, &m) != EOF) 
 8      {
 9          ans = func(n, m);
10          printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
11      }
12      return 0;
13  }
14 
15  int func(int n, int m)
16   {
17      if (m < 0 || m > n) 
18      {
19          return 0;
20      }
21      if (m == 0 || m == n) 
22      {
23          return 1;
24      }
25      
26      if (m > n - m) 
27      {
28          m = n - m;
29      }
30      int res = 1;
31      for (int i = 1; i <= m; i++) {
32          res = res * (n - m + i) / i;
33      }
34      return res;
35  }

digui:

 1 #include <stdio.h>
 2 
 3  int func(int n, int m);
 4  int main()
 5   {
 6      int n, m;
 7      int ans;
 8      while(scanf("%d%d", &n, &m) != EOF)
 9       {
10          ans = func(n, m);
11          printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12      }
13      return 0;
14  }
15 
16  int func(int n, int m) 
17  {
18      if (m < 0 || m > n)
19       {
20          return 0;
21      }
22      if (m == 0 || m == n)
23       {
24          return 1;
25      }
26 
27      return func(n - 1, m) + func(n - 1, m - 1);
28  }

 

 屏幕截图 2025-10-29 235035

 

 

task6.c

 

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

屏幕截图 2025-10-29 235452

 

 

task7.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void print_charman(int n);
 5 
 6 int main() 
 7 {
 8     int n;
 9 
10     printf("input n: ");
11     scanf("%d", &n);
12     print_charman(n);
13 
14     return 0;
15 }
16 
17 
18 void print_charman(int n)
19  {
20     int i, j, k;
21     
22 
23     for (i = n; i >= 1; i--) 
24     {
25 
26         int charman_count = 2 * i - 1;
27 
28         int tab_count = (n - i);
29         
30         for (k = 0; k < tab_count; k++) 
31         {
32             printf("\t");
33         }
34         for (j = 0; j < charman_count; j++) 
35         {
36             printf(" 0 "); 
37             if (j < charman_count - 1) {
38                 printf("\t");
39             }
40         }
41         printf("\n");
42 
43         for (k = 0; k < tab_count; k++)
44          {
45             printf("\t");
46         }
47         for (j = 0; j < charman_count; j++) 
48         {
49             printf("<H>");
50             if (j < charman_count - 1) 
51             {
52                 printf("\t");
53             }
54         }
55         printf("\n");
56 
57         for (k = 0; k < tab_count; k++) {
58             printf("\t");
59         }
60         for (j = 0; j < charman_count; j++) {
61             printf("I I");
62             if (j < charman_count - 1) {
63                 printf("\t");
64             }
65         }
66         printf("\n");
67         
68         if (i > 1) {
69             printf("\n");
70         }
71     }
72 }

屏幕截图 2025-10-30 004301

(.......)

posted @ 2025-10-30 00:44  叶永祺  阅读(3)  评论(0)    收藏  举报