• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
0128-gong
博客园    首页    新随笔    联系   管理    订阅  订阅
实验三
task1
 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 }

a1:功能是>=90为A,>=80为B,>=70为C,>=60为D,<60为E。形参类型为int,返回值和类型为char

a2:case后面没有break,ans用' '接收

 task2

 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 }

a1:求各数之和

a2:可以实现

 task3

 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 }

a1:计算X的n次幂

a2:是,当n为奇数,x^n=x*x^n-1。当n为偶数时,x^n=x^n/2*x^n/2。n=0,x^0=1

 task4

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

 task5

 1 #include <stdio.h>
 2 
 3 int hanoi(unsigned int n, char from, char temp, char to);
 4 void moveplate(unsigned int n, char from, char to);
 5 
 6 int main()
 7 {
 8     unsigned int n;
 9     while(scanf("%u", &n) != EOF)
10     {
11         int count = hanoi(n, 'A', 'B', 'C');
12         printf("一共移动了%d次\n", count);
13     }
14     return 0;
15 }
16 
17 int hanoi(unsigned int n, char from, char temp, char to)
18 {
19     int count = 0;
20 
21     if(n == 1)
22     {
23         moveplate(n, from, to);
24         count++;
25     }
26     else
27     {
28         count += hanoi(n-1, from, to, temp);
29         moveplate(n, from, to);
30         count++;
31         count += hanoi(n-1, temp, from, to);
32     }
33     return count;
34 }
35 
36 void moveplate(unsigned int n, char from, char to)
37 {
38     printf("%u: %c --> %c\n", n, from, to);
39 }

 task6

迭代

 1 #include <stdio.h>
 2 
 3 
 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, m, ans);
13     }
14 
15     return 0;
16 }
17 
18 
19 int func(int n, int m) {
20     if (m > n) return 0; 
21     if (m == 0 || m == n) return 1; 
22 
23     int result = 1;
24     for (int i = 1; i <= m; i++) {
25         result *= (n - i + 1) / i; 
26     }
27 
28     return result;
29 }

递归

 1 #include <stdio.h>
 2 
 3 
 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, m, ans);
13     }
14 
15     return 0;
16 }
17 
18 
19 int func(int n, int m) {
20    
21     if (m == 0 || m == n) {
22         return 1;
23     }
24    
25     return func(n - 1, m) + func(n - 1, m - 1);
26 }

 task7

 1 #include <stdio.h>
 2 
 3 
 4 int gcd(int a, int b);
 5 
 6 int main() {
 7     int a, b, c;
 8     int ans;
 9 
10     while (scanf("%d%d%d", &a, &b, &c) != EOF) {
11         ans = gcd(gcd(a, b), c); // 先计算 a 和 b 的最大公约数,再计算结果与 c 的最大公约数
12         printf("最大公约数:%d\n", ans);
13     }
14 
15     return 0;
16 }
17 
18 // 计算两个数的最大公约数
19 int gcd(int x, int y) {
20     while (y != 0) {
21         int temp = y;
22         y = x % y;
23         x = temp;
24     }
25     return x;
26 }

 

posted on 2025-04-06 19:25  Tovo  阅读(19)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3