实验3

实验1:

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

1

 问题1:将主函数的score传递给函数中的score,用函数将score转化为等级;形参是int类型,返回值是char类型。

问题2:除10以外的case后无break,会导致case穿透输出多个字符;同时单个字符应该用‘’而不是“”。

 

实验2:

 1 #include <stdio.h>
 2 int sum_digits(int n);  
 3 int main() {
 4     int n;
 5     int ans;
 6     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
 7         ans = sum_digits(n); 
 8          printf("n = %d, ans = %d\n\n", n, ans);
 9     }
10     return 0;
11 }
12 int sum_digits(int n) {
13     int ans = 0;
14     while(n != 0) {
15         ans += n % 10;
16         n /= 10;
17     return ans;
18 }

2

问题1:sum_digits实现将输入的n值的每一位的数字相加

问题2:能够实现,修改后,先判断n是否小于10 若小于10直接返回n,若大于10将n%10,得到最后一位,再把剩余的数字即n/10返回函数递归,实现末尾数字的累加。

 

实验3:

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

3

问题1:函数power实现了x的n次方;同时通过奇偶的判断减少递归次数。

问题2:是递归函数;

4

实验4:

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

44

 实验5:

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

5555

实验6:

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

5

 实验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   scanf("%d", &n);
 8   print_charman(n); 
 9   return 0;
10 }
11 void print_charman(int n){
12     int i,j;
13     for(i=n;i>=1;i--){
14                 
15         for(int kong=0;kong<(n-i);kong++)
16         printf("\t");
17         for(j=2*i-1;j>=1;j--)
18         printf(" O\t");
19         printf("\n");
20                 
21        for(int kong=0;kong<(n-i);kong++)
22         printf("\t");    
23         for(j=2*i-1;j>=1;j--)
24         printf("<H>\t");
25         printf("\n");
26         
27         for(int kong=0;kong<(n-i);kong++)
28         printf("\t");
29         for(j=2*i-1;j>=1;j--)
30         printf("I I\t");
31         printf("\n");        
32     }
33 }

8

9

 

posted @ 2026-04-16 22:32  yfk123  阅读(18)  评论(0)    收藏  举报