实验3

task1:

源代码:

 1 #include <stdio.h>
 2 char score_to_grade(int score); // 函数声明
 3 int main() {
 4     int score;
 5     char grade;
 6     while (scanf_S("%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 }

 

测试截图:

 问题一:作为自己创造的函数用来封存方法,进而方便调用,避免重复,形参类型是int 返回值类型为char。

问题二:有问题,没有break,会导致返回值多余

 

task2:

源代码:

 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_s("%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 }

测试截图:

 问题1:将所输入的数的各个单位的数字相加并返回

问题2:可以实现同等效果,第一种是循环的思想,第二种是函数递归的思想

task3:

源代码:

 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_s("%d%d", &x, &n) != EOF) {
 7         ans = power(x, n); // 函数调用
 8         printf("n = %d, ans = %d\n\n", n, ans);
 9     }
10     return 0;
11 }
12 // 函数定义
13 int power(int x, int n) {
14     int t;
15     if (n == 0)
16         return 1;
17     else if (n % 2)
18         return x * power(x, n - 1);
19     else {
20         t = power(x, n / 2);
21         return t * t;
22     }
23 }

 

测试结果:

 问题1:计算整数xn次幂

问题2:是递归函数。当n == 0时,返回 1。当n为奇时,返回x * power(x, n - 1)。当n为偶,先计算t = power(x, n / 2),返回t * t

数学模型:对于power(x,n),当n = 0时,power(x,0)=1。n>0时 ,n是奇数,power(x,n)=x*power(x,n - 1)n是偶数,power(x,n)=power(x,n/2)*power(x,n/2)

task4:

源代码:

 1 #include <stdio.h>
 2 
 3 int is_prime(int n) {
 4     if (n <= 1) return 0;
 5     for (int i = 2; i <= n/2; i++) {
 6         if (n % i == 0) 
 7             return 0;
 8     }
 9     return 1;
10 }
11 
12 int main() {
13     int count = 0;
14     printf("100 以内的孪生素数:\n");
15     for (int n = 1; n < 100; n++) {
16         if (is_prime(n) && is_prime(n + 2)) {
17             printf("%d %d\n", n, n + 2);
18             count++;
19         }
20     }
21     printf("100 以内的孪生素数共有 %d 个\n", count);
22     return 0;
23 }

测试结果:

 

task5:

源代码:

 1 #include<stdio.h>
 2 
 3 void Hanoi(int n, char from, char to, char temp);
 4 
 5 int count;
 6 
 7 int main()
 8 {
 9     int n;
10 
11     scanf_s("%d", &n);
12 
13     Hanoi(n, 'A', 'C', 'B');
14 
15     printf("一共移动了%d次", count);
16     
17     return 0;
18 }
19 
20 void Hanoi(int n, char from, char to, char temp)
21 {
22     if (n == 1)
23     {
24         printf("%d : %c --> %c\n", n, from, to);
25         count++;
26     }
27     else
28     {
29         count++;
30         Hanoi(n - 1, from, temp, to);
31         printf("%d : %c --> %c\n", n, from, to);
32         Hanoi(n - 1, temp, to, from);
33     }
34 }

 

 

测试结果:

 

 

task6:

源代码:

方法一:

 1 #include <stdio.h>
 2 int func(int n, int m) ; // 函数声明
 3 int main() {
 4     int n, m;
 5     int ans;
 6     while (scanf_s("%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 > n || m < 0) return 0;
14     int a = 1;
15     int b= 1;
16     for (int i = n; i > n - m; i--) {
17         a *= i;
18     }
19     for (int i = 1; i <= m; i++) {
20         b *= i;
21     }
22     return a / b;
23 }

方法二:

 1 #include <stdio.h>
 2 int func(int n, int m) ; // 函数声明
 3 int main() {
 4     int n, m;
 5     int ans;
 6     while (scanf_s("%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 || m == n) return 1;
14     if (m > n || m < 0) return 0;
15     return func(n - 1, m) + func(n - 1, m - 1);
16 }

测试结果:

 

task7:

源代码:

 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_s("%d", &n);
 8     print_charman(n); // 函数调用
 9     return 0;
10 }
11 void print_charman(int n)
12 {
13     int i, j;
14     for (i = 0; i < n; i++)
15     {
16         for (j = 0; j < i; j++)
17         {
18             printf("\t");
19         }
20         for (j = 0; j < n - i; j++)
21         {
22             printf(" O \t");
23         }
24         for (j = 0; j < n - i - 1; j++)
25         {
26             printf(" O \t");
27         }
28         printf("\n");
29 
30         for (j = 0; j < i; j++)
31         {
32             printf("\t");
33         }
34         for (j = 0; j < n - i; j++)
35         {
36             printf("<H>\t");
37         }
38         for (j = 0; j < n - i - 1; j++)
39         {
40             printf("<H>\t");
41         }
42         printf("\n");
43 
44         for (j = 0; j < i; j++)
45         {
46             printf("\t");
47         }
48         for (j = 0; j < n - i; j++)
49         {
50             printf("I I\t");
51         }
52         for (j = 0; j < n - i - 1; j++)
53         {
54             printf("I I\t");
55         }
56         printf("\n\n");
57     }
58 
59 }

 


测试结果:

 

 

posted @ 2024-10-24 14:18  唐正瑞  阅读(18)  评论(0编辑  收藏  举报