实验3

任务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 char score_to_grade(int score) {
18     char ans;
19 
20     switch(score/10) {
21     case 10:
22     case 9:   ans = 'A'; break;
23     case 8:   ans = 'B'; break;
24     case 7:   ans = 'C'; break;
25     case 6:   ans = 'D'; break;
26     default:  ans = 'E';
27     }
28 
29     return ans;
30 }

image

问题1:功能是将分数转换为相应的等级,形参类型为整形,返回值类型为整形

问题2:每条case语句后面没有相应的break,导致无论输入什么成绩,最后都对应等级E;ans是char类型,应该对应单字符

任务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 int sum_digits(int n) {
17     int ans = 0;
18 
19     while(n != 0) {
20         ans += n % 10;
21         n /= 10;
22     }
23 
24     return ans;
25 }

image

问题1 计算输入整数的每一位数字之和

问题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("%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 int power(int x, int n) {
18     int t;
19 
20     if(n == 0)
21         return 1;
22     else if(n % 2)
23         return x * power(x, n-1);
24     else {
25         t = power(x, n/2);
26         return t*t;
27     }
28 }

image

问题1e2e93f0417b7f7a88cf8a6d557434661

问题2:是递归函数

任务4:

源代码:

 1 #include<stdio.h>
 2 
 3 int classify_triangle(int a,int b,int c)
 4 {
 5 
 6     if(a+b<=c||a+c<=b||b+c<=a)
 7     return 0;
 8     if(a==b&&b==c)
 9     return 2;
10     else if(a==b||b==c||a==c)
11     return 3;
12     else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
13     return 4;
14     else
15     return 1;
16 
17 }
18 int main()
19 {int a,b,c;
20 
21     while(scanf("%d%d%d",&a,&b,&c)==3)
22     {
23 
24     switch(classify_triangle(a,b,c))
25 {
26     case 0:printf("不能构成三角形\n");break;
27     case 1:printf("普通三角形\n");break;
28     case 2:printf("等边三角形\n");break;
29     case 3:printf("等腰三角形\n");break;
30     case 4:printf("直角三角形\n");break;
31     return 0;}}
32 }

image

任务5

递归方法源代码

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 
 4 int main()
 5 {
 6     int n,m;
 7     int ans;
 8     while(scanf("%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  int func(int n,int m){
16      if(m<0||m>n)
17      return 0;
18      if(m==0||m==n)
19      return 1;
20      return func(n-1,m)+func(n-1,m-1);
21  }

image

迭代方法源代码

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 
 4 int main()
 5 {
 6     int n,m;
 7     int ans;
 8     while(scanf("%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  int func(int n,int m){
16      if(m<0||m>n)
17      return 0;
18      if(m==0||m==n)
19      return 1;
20      int z=1;
21      for(int i=0;i<m;i++)
22      z=z*(n-i);
23      int mu=1;
24      for(int i=1;i<=m;i++)
25      mu=mu*i;
26      return z/mu;
27  }

image

任务6

源代码

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

image

任务7

源代码

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

image

 

posted @ 2026-04-21 22:17  帕茹克  阅读(12)  评论(0)    收藏  举报