实验3

1、实验任务1

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:score_to_grade的功能是把分数转化成对应的等级形参类型是int,返回值类型是char

问题2:所有双引号应改为单引号;缺少break语句跳出循环

 

 

 

 

2、实验任务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 }

 问题1:sum_digits的功能是计算一个数各位数字之和

问题2:可以

 

 

 

 

3、实验任务3

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

 问题1:power的功能是计算x的n次方的值

问题2:是,公式如下:

power(x, n)={1, n=0          

                     {x*power(x,n-1),n<=2            

                     {power(x,n/2)*power(x,n/2),n>2

 

 

 

 

 

4、实验任务4

task4源代码及运行结果截图:

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

 

 

 

 

 

 

5、实验任务5

task5源代码及运行结果截图:

 1 #include <stdio.h> 
 2 
 3 int move_count = 0;
 4 void hanoi(int n, char from, char to, char aux);
 5 int main() {
 6     int n;
 7     while (scanf_s("%d", &n) != EOF) {
 8         move_count = 0;
 9         printf("\n");
10         hanoi(n, 'A', 'C', 'B');
11         printf("\n一共移动了%d次\n", move_count);
12     }
13     return 0;
14 }
15 void hanoi(int n, char from, char to, char aux) {
16     if (n == 1) {
17         move_count++;
18         printf("%d:%c --> %c\n",n,from,to);
19         return;
20     }
21     hanoi(n - 1, from, aux, to);
22     move_count++;
23     printf("%d:%c --> %c\n", n, from, to);
24     hanoi(n - 1, aux, to, from);
25 }

 

 

 

 

 

6、实验任务6

task6_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_s("%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 
13     return 0;
14 }
15 
16 // 函数定义
17 // 待补足。。。(分别用迭代和递归实现)
18 int func(int n, int m) {
19     if (m < n || m < 0)
20         return 0;
21     if (m == 0 || m == n)
22         return 1;
23     if (m > n - m)
24         m = n - m;
25     long x = 1;
26     for (int i = 1;i <= m;++i) {
27         x = x * (n - m + i) / i;
28     }
29     return (int)x;
30 }

 

 

task6_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_s("%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 
13     return 0;
14 }
15 
16 // 函数定义
17 // 待补足。。。(分别用迭代和递归实现)
18 int func(int n, int m) {
19     if (m > n || m < 0)
20         return 0;
21     if (m == 0 || m == n)
22         return 1;
23     return func(n - 1, m) + func(n - 1, m - 1);
24 }

 

 

 

 

 

 

7、实验任务7

task7源代码及运行结果截图:

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

posted @ 2025-04-06 17:28  DelPaulo  阅读(11)  评论(0)    收藏  举报