实验三

任务一

#include <stdio.h>

 char score_to_grade(int score);

 int main() {
         int score;
         char grade;
    
             while (scanf("%d", &score) != EOF) {
                 grade = score_to_grade(score);
                 printf("分数: %d, 等级: %c\n\n", score, grade);
        
    }
    
             return 0;
    
}

 char score_to_grade(int score) {
        char ans;
    
             switch (score / 10) {
             case 10:
             case 9:   ans = 'A'; break;
             case 8:   ans = 'B'; break;
             case 7:   ans = 'C'; break;
             case 6:   ans = 'D'; break;
             default:  ans = 'E';
                      
    }
    
             return ans;
    
}

屏幕截图 2026-04-19 232723

问题一:功能是将输入的整数形式的百分数转换为ABCDE五个等级字符;形参类型是int;返回值类型是char

问题二:缺少break;语句会使ans=继续执行,最终ans都为E

任务二

#include <stdio.h>

 int sum_digits(int n);

 int main() {
         int n;
         int ans;
    
             while (printf("Enter n: "), scanf("%d", &n) != EOF) {
                 ans = sum_digits(n);
                 printf("n = %d, ans = %d\n\n", n, ans);
        
    }
    
             return 0;
    
}
 int sum_digits(int n) {
        int ans = 0;
    
             while (n != 0) {
                 ans += n % 10;
                n /= 10;
        
    }
    
             return ans;
    
}

屏幕截图 2026-04-19 233156

问题一:功能是计算一个整数所有位数之和

问题二:可以实现(1)迭代法

(2)递归法

任务三

#include <stdio.h>

 int power(int x, int n);

 int main() {
         int x, n;
       int ans;
    
            while (printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
                 ans = power(x, n);
                 printf("n = %d, ans = %d\n\n", n, ans);
        
    }
    
             return 0;
    
}

 int power(int x, int n) {
         int t;
    
             if (n == 0)
                 return 1;
         else if (n % 2)
                 return x * power(x, n - 1);
         else {
                 t = power(x, n / 2);
                 return t * t;
        
    }
    
}

屏幕截图 2026-04-19 233754

问题一:算出x的n次幂

问题二:是:公式

 

任务四

#include<stdio.h>

 int classify_triangle(int a, int b, int c)
 {
    
             if (a + b <= c || a + c <= b || b + c <= a)
             return 0;
         if (a == b && b == c)
             return 2;
         else if (a == b || b == c || a == c)
             return 3;
         else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
             return 4;
         else
             return 1;
    
         }
 int main()
 {int a, b, c;

    while (scanf("%d%d%d", &a, &b, &c) == 3)
     {
    
             switch (classify_triangle(a, b, c))
         {
            case 0:printf("不能构成三角形\n"); break;
             case 1:printf("普通三角形\n"); break;
             case 2:printf("等边三角形\n"); break;
             case 3:printf("等腰三角形\n"); break;
             case 4:printf("直角三角形\n"); break;
                          return 0; }}
 }

屏幕截图 2026-04-19 234247

 

任务五

 递归方法:

#include<stdio.h>
int func(int n, int m);

 int main()
 {
         int n, m;
         int ans;
         while (scanf("%d%d", &n, &m) != EOF) {
                 ans = func(n, m);
                printf("n=%d,m=%d,ans=%d\n\n", n, m, ans);
        
            
    }
         return 0;
      }
  int func(int n, int m) {
         if (m<0 || m>n)
             return 0;
          if (m == 0 || m == n)
              return 1;
          return func(n - 1, m) + func(n - 1, m - 1);
    
}

屏幕截图 2026-04-19 234558

 

迭代方法:    

#include<stdio.h>
 int func(int n, int m);

 int main()
 {
         int n, m;
         int ans;
         while (scanf("%d%d", &n, &m) != EOF) {
                 ans = func(n, m);
                printf("n=%d,m=%d,ans=%d\n\n", n, m, ans);
        
            
    }
         return 0;
      }
  int func(int n, int m) {
          if (m<0 || m>n)
              return 0;
          if (m == 0 || m == n)
              return 1;
          int z = 1;
          for (int i = 0; i < m; i++)
              z = z * (n - i);
          int mu = 1;
          for (int i = 1; i <= m; i++)
              mu = mu * i;
          return z / mu;
    
}

   屏幕截图 2026-04-20 160336

 

任务六

#include<stdio.h>
 int gcd(int a, int b, int c);

 int main()
 {
         int a, b, c;
         int ans;
         while (scanf("%d%d%d", &a, &b, &c) != EOF) {
                 ans = gcd(a, b, c);
                 printf("最大公约数:%d\n\n", ans);
        
            
    }
         return 0;
         }
     int gcd(int a, int b, int c)
     {int i;
         if (a < b && a < c)
             i = a;
         else if (b < a && b < c)
             i = b;
         else
         i = c;
         int max_gcd = 1;
         for (int n = 1; n <= i; n++)
         {
                 if (a % n == 0 && b % n == 0 && c % n == 0)
                     {
                         max_gcd = n;
        
                         }
              }
          return max_gcd;

     }

屏幕截图 2026-04-20 162913

任务七

#include <stdio.h>
 #include <stdlib.h>
 void print_charman(int n);
 int main() {
         int n;
         printf("Enter n: ");
         while (scanf("%d", &n) != EOF) {
                 printf("input n: %d\n", n);
                 print_charman(n);
                 printf("\nEnter n: ");
        
    }
         return 0;
    
}

 void print_charman(int n) {
         for (int i = 1; i <= n; i++) {
                 for (int j = 1; j < i; j++) {
                         printf("\t");
            
        }
                 for (int j = 1; j <= 2 * (n - i) + 1; j++) {
                         printf("  O  \t");
            
        }
                 printf("\n");
        
                     for (int j = 1; j < i; j++) {
                         printf("\t");
            
        }
                 for (int j = 1; j <= 2 * (n - i) + 1; j++) {
                         printf(" <H> \t");
            
        }
                 printf("\n");
        
                     for (int j = 1; j < i; j++) {
                         printf("\t");
            
        }
                 for (int j = 1; j <= 2 * (n - i) + 1; j++) {
                         printf(" I I \t");
            
        }
                 printf("\n");
        
    }
    
}

屏幕截图 2026-04-20 163534

 

posted @ 2026-04-20 17:06  ahuuu  阅读(8)  评论(0)    收藏  举报