实验三

 任务一

 1 #include <stdio.h>
 2 char score_to_grade(int score);  // 函数声明
 3 int main() {
 4     int score;
 5     char grade;
 6     while(scanf("%d", &score) != EOF) {
 7         grade = score_to_grade(score);  // 函数调用
 8         printf("分数: %d, 等级: %c\n\n", score, grade);
 9     }
10     return 0;
11 }
12 // 函数定义
13 char score_to_grade(int score) {
14     char ans;
15     switch(score/10) {
16     case 10:
17     case 9:   ans = 'A'; break;
18     case 8:   ans = 'B'; break;
19     case 7:   ans = 'C'; break;
20     case 6:   ans = 'D'; break;
21     default:  ans = 'E';
22     }
23     return ans;
24 }
1

1

问题一:将正数转化为等级;int; char

问题二:缺少break,结果都相同,为E

任务二

 1 #include <stdio.h>
 2 int sum_digits(int n);  // 函数声明
 3 int main() {
 4     int n;
 5     int ans;
 6     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
 7         ans = sum_digits(n);    // 函数调用
 8     printf("n = %d, ans = %d\n\n", n, ans);
 9     }
10     return 0;
11 }
12 // 函数定义
13 int sum_digits(int n) {
14     int ans = 0;
15     while(n != 0) {
16         ans += n % 10;
17         n /= 10;
18     }
19     return ans;
20 }
2

2t

问题一:计算输入整数的各位数之和

问题二:可以;前面是循环迭代,后面是用递归调用求和

 

任务三

 1 #include <stdio.h>
 2 int power(int x, int n);    // 函数声明
 3 int main() {
 4     int x, n;
 5     int ans;
 6     while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
 7         ans = power(x, n);  // 函数调用
 8         printf("n = %d, ans = %d\n\n", n, ans);
 9     }
10     
11     return 0;
12 }
13 // 函数定义
14 int power(int x, int n) {
15     int t;
16     if(n == 0)
17         return 1;
18     else if(n % 2)
19         return x * power(x, n-1);
20     else {
21         t = power(x, n/2);
22         return t*t;
23     }
24 }
3

3

问题一:计算x的n次方

问题二:power(x,n)=   1  , n=0

                                      x*power(x,n-1)   ,n为奇

                                       power(x,n/2)^2   ,n为偶

任务四:

源代码:

task4

捕获

任务五

5.1迭代

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 
 4 int func(int n, int m); 
 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     if (m < 0 || m > n) return 0;
17     if (m == 0 || m == n) return 1;  
18     if (m > n - m) m = n - m;
19     int g= 1;
20     int i;
21     for (i = 1; i <= m; i++) {
22         g = g * (n - m + i) / i;   
23     }
24     return g;
25 }
5.1

5.2递归

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

5

 

任务六

 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

6

任务七

 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,k;
12     k = 0;
13     for(i=1;i<=3*n;i++){
14         for (j = 1.0; j <=2 * n - 1; j++) {
15             if (j > (k/3) && j < 2 * n - (k/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         k += 1;
26         printf("\n");
27     }
28 }
7

7.1

 

7.2

 

posted @ 2026-04-22 01:49  asteria11  阅读(6)  评论(0)    收藏  举报