实验三

实验任务1

task.1.c 源代码

 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 }

 

运行截图

task.1.c

 

问题1:将输入的百分制转化为对应等级。形参类型:int    返回值类型:char类型

问题2:每个case分支后缺少break,从而导致会继续执行下去;单个字符要用'  '表示

 

实验任务2

task.2.c源代码

 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 }

 

运行截图

task.2.c

问题1:计算一个整数的个位数字之和

问题2:可以,进行递归调用

 

实验任务3

task.3.c源代码

 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 }

运行截图

task.3.c

 

问题1:计算整数x的n次方

问题2:是递归函数 

 n为奇数时power(x,n)=x*power(x,n-1)

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

n为0时power(x,n)=1

 

实验任务4

task4.c源代码

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

运行截图

task4.c

 

实验任务5

task5.c源代码

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

运行截图

task5.c

 

实验任务6

task6.c

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

运行截图

task6.c

 

实验任务7

task7.c源代码

 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     }
13          return 0;
14     
15 }
16 
17  void print_charman(int n) {
18          for (int i = 1; i <= n; i++) {
19                  for (int j = 1; j < i; j++) {
20                          printf("\t");
21             
22         }
23                  for (int j = 1; j <= 2 * (n - i) + 1; j++) {
24                          printf("  O  \t");
25             
26         }
27                  printf("\n");
28         
29                      for (int j = 1; j < i; j++) {
30                          printf("\t");
31             
32         }
33                  for (int j = 1; j <= 2 * (n - i) + 1; j++) {
34                          printf(" <H> \t");
35             
36         }
37                  printf("\n");
38         
39                      for (int j = 1; j < i; j++) {
40                          printf("\t");
41             
42         }
43                  for (int j = 1; j <= 2 * (n - i) + 1; j++) {
44                          printf(" I I \t");
45             
46         }
47                  printf("\n");
48         
49     }
50     
51 }

运行截图

task7.c

 

posted @ 2026-04-20 20:34  朱梦想  阅读(5)  评论(0)    收藏  举报