实验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 // 函数定义
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 }

运行结果截图

屏幕截图 2026-04-18 092019

问题回答

函数score_to_grade的功能:将分数转化为对应的等级

形参类型:int     返回值类型:char

代码存在的问题:没有break,程序会一直向下进行 ; 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 
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 }

运行结果截图

屏幕截图 2026-04-18 173304

 问题回答

函数sum_digits的功能:计算一个数各个位上之和

可以,一个从个位开始加,一个相反

任务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 // 函数定义
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-19 141055

问题回答

函数power的功能:求x的n次幂

是递归函数。 n为奇数时power(x,n)=x*power(x,n-1)

n为偶数时power(x,n)=power(x,n/2)*power(x,n/2)

任务4

源代码

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

运行结果截图

屏幕截图 2026-04-19 154331

任务5

5.1

源代码

 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 
15 //迭代
16 int func(int n, int m) {
17     if(m < 0 || m > n)
18         return 0;
19     if(m == 0 || m == n)
20         return 1;
21     if(m > n - m)
22         m = n - m;
23     long long result = 1;
24     for(int i = 1; i <= m; i++) {
25         result = result * (n - m + i) / i;
26     }
27     return(int)result;
28 }


运行结果截图

屏幕截图 2026-04-19 155700

5.2

源代码

 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 
15 //递归
16 int func(int n, int m) {
17     if(m < 0 || m > n)
18         return 0;
19     if(m == 0 || m == n)
20         return 1;
21     if(m > n - m)
22         m = n - m;
23     
24     return func(n - 1, m) + func(n - 1, m - 1);
25 }

运行结果截图

屏幕截图 2026-04-19 160146

任务6

源代码

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

实验结果截图

屏幕截图 2026-04-19 224909

任务7

源代码

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

测试结果截图

屏幕截图 2026-04-20 164957

 

posted @ 2026-04-20 16:52  oππ  阅读(6)  评论(0)    收藏  举报