实验三

task 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 // 函数定义
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 }
View Code

屏幕截图 2026-04-19 194030

 

 

问题一:将分数转换为等级,形参类型为整型,返回值类型为字符型

问题二:(1)没有break,导致会输出所有等级 (2)双引号表示字符串,单引号才是字符

task 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 
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 }
View Code

屏幕截图 2026-04-19 194444

 

 

问题一:功能是将各数位的数相加

问题二:可以,原函数使用了循环的思想,而新函数使用的是递归的思想

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 }
View Code

屏幕截图 2026-04-19 194615

 

 

问题一:计算x的n次方

问题二:是,8710A57B191FC8FBC28D80FA1B593DAD

task 4:

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

屏幕截图 2026-04-19 201142

task 5:

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 
 4 int main(){
 5     int n,m;
 6     int ans;
 7     
 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     return 0;
13 }
14 int func(int n,int m){
15     int t=1;
16     for(int i=n;i>n-m;--i)
17         t=t*i;
18     for(int i=1;i<=m;++i)
19         t=t/i;
20     
21     return t;
22 }
View Code

屏幕截图 2026-04-20 193007

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 
 4 int main(){
 5     int n,m;
 6     int ans;
 7     
 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     return 0;
13 }
14 int func(int n,int m){
15     if(m>n)
16      return 0;
17     if(m==0||m==n)
18     return 1;
19     else
20     return func(n-1,m)+func(n-1,m-1);
21 }
View Code

屏幕截图 2026-04-20 194318

task 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     
 7     while(scanf("%d%d%d",&a,&b,&c)!=EOF){
 8         ans=gcd(a,b,c);
 9         printf("最大公约数:%d\n\n",ans);
10         
11     }return 0;
12 }
13 int gcd(int a,int b,int c){
14     int i;
15     i=a;
16     if(b<i) 
17     i=b;
18     if(c<i)
19     i=c;
20     for(;i>0;--i){
21         if(a%i==0&&b%i==0&&c%i==0) 
22         return i;
23     }
24     
25 }
View Code

屏幕截图 2026-04-20 202808

 task 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     
10     return 0;
11 }
12 
13 void print_charman(int n){
14     for(int i=n;i>=1;--i)
15     {       for( int j=0;j<n-i;++j) 
16             printf("\t");         
17             for(int k=1;k<=2*i-1;++k)     
18             printf(" O\t");   
19              printf("\n"); 
20             for( int j=0;j<n-i;++j)
21                   printf("\t");    
22             for(int k=1;k<=2*i-1;++k)     
23              printf("<H>\t");    
24                printf("\n");    
25             for( int j=0;j<n-i;++j)   
26              printf("\t");   
27             for(int k=1;k<=2*i-1;++k)  
28                  printf("I I\t");  
29                  printf("\n");
30             }}
View Code

屏幕截图 2026-04-21 213529

 

posted @ 2026-04-21 21:37  文xuan  阅读(16)  评论(0)    收藏  举报