实验三

实验三

task1

源代码

 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 }

运行结果截图

1

问题讨论

Q1:分数评级,形参为整形,返回值为字符型。
Q2:1.A、B、C、D后无break,导致评级带有后几项的值,如输入100,输出ABCDE
    2.字符形应用单引号' '

task2

源代码

 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 }

运行结果截图

2

问题讨论

Q1:各位上的数之和
Q2:可以,运用了递归的思维。

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 }

运行结果截图

3

问题讨论

Q1:求x的n次方
Q2:是递归,递归公式如下:公式

task4

源代码

 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         switch (classify_triangle(a, b, c)) {
 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");
12         }
13     }
14     return 0;
15 }
16 int classify_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 && b != c) || (a == c && c != b) || (b == c && b != a))
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     else
26         return 1;
27 }

运行结果截图

4

task5

源代码

(迭代法)

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

(递归法)

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

运行结果截图

迭代法

5.1

递归法

5.2

task6

源代码

 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 i;    
14     for (i = a; i >= 1; i--) {
15         if (a % i == 0 && b % i == 0 && c % i == 0)
16             return i;
17     }
18 }

运行结果截图

6

task7

源代码

 1 #include<stdio.h>
 2 void printf_charman(int n);
 3 int main() {
 4     int n;
 5     printf("Enter n: ");
 6     scanf("%d", &n);
 7     printf_charman(n);
 8     return 0;
 9 }
10 void printf_charman(int n) {
11     int i,j,t;
12     t = 0;
13     for(i=1;i<=3*n;i++){
14         for (j = 1.0; j <=2 * n - 1; j++) {
15             if (j > (t/3) && j < 2 * n - (t/3)) {
16                 switch (i % 3) {
17                 case 1:printf(" O \t"); break;
18                 case 2:printf("<H>\t"); break;
19                 case 0:printf("I I\t");
20                 }
21             }
22             else
23                 printf("   \t");
24         }
25         t += 1;
26         printf("\n");
27     }
28 }

运行结果截图

屏幕截图 2026-04-16 182243

屏幕截图 2026-04-16 182252

 

posted @ 2026-04-16 18:26  B1uerose  阅读(33)  评论(0)    收藏  举报