实验三

任务一

源代码

 1 #include<stdio.h>
 2 
 3 
 4 char score_to_grade(int score);
 5 
 6 int main(){
 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 
19 char score_to_grade(int score){
20     char ans;
21 
22     switch(score/10){
23     case 10:
24     case 9:  ans='A';break;
25     case 8:  ans='B';break;
26     case 7:  ans='C';break;
27     case 6:  ans='D';break;
28     default: ans='E';
29     }
30 
31     return ans;

 

测试结果截图

屏幕截图 2026-04-20 191708

问题回答

问题一: 1.功能是:依据分数,按一定标准,将分数分为A,B,C,D,E五等.

             2.形参类型:整型;

                返回值类型:字符型.

问题二: 如果没有break,那么,将只会输出E.

             当switch函数中没有break,那么,ans的值将会被一路覆盖,直到执行default,最终被赋值E输出.

任务二

源代码

 

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

 

 

 

测试结果截图

屏幕截图 2026-04-20 193941

 

 

问题回答  

问题一:输出输入数字的每一项的和;

问题二:可以

            原代码的算法思维是迭代,通过一个个加输入数字的每一项的数获得结果;而更改后,是递归,递归出口是n<10,通过一次次调用函数,得到结果.

任务三

源代码

 1 #include<stdio.h>
 2 
 3 
 4 int power(int x,int n);
 5 
 6 int main(){
 7     int x,n;
 8     int ans;
 9 
10     while(printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){
11         ans=power(x,n);
12         printf("n=%d,ans=%d\n\n",n,ans);
13     }
14 
15     return 0;
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 }

 

测试结果截图

屏幕截图 2026-04-20 200518

 

问题回答

问题一:输出x的n次方

问题二:是递归函数;

 IMG_20260420_202114

 

任务四

源代码

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

 

测试结果截图

屏幕截图 2026-04-20 204203

 

任务五

源代码(迭代)

 

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

测试结果截图(迭代)

屏幕截图 2026-04-20 210723

源代码(递归)

 

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

 

 

 

测试结果截图(递归)

屏幕截图 2026-04-20 223752

 

任务六

源代码

 

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

测试结果截图

屏幕截图 2026-04-20 225354

任务七

源代码

 

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

 

测试结果截图

屏幕截图 2026-04-21 164803

屏幕截图 2026-04-21 164830

实验总结

对复杂的代码编写还不熟练,比如实验七,我是参考了其他同学的思维和写法,后面还需要继续的学习。

 

posted @ 2026-04-21 22:55  3469172728  阅读(10)  评论(0)    收藏  举报