实验三

任务1

task1.c

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

运行截图

问题1:将分数转化为对应等级;形参int型,返回值char型。

问题2:单双引号使用错误,'A'表示单个字符A,“A”表示字符串A,末尾自动会加上一个空字符 '\0';无break语句,执行完符合条件的语句后继续运行,最后ans赋值为E。

 

任务2

task2.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_s("%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:计算各数位之和。

问题2:能实现同等效果;第一种采用迭代,第二种采用递归。

 

任务3

task3.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_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:计算x的n次方。

问题2:是。

 

 

 

 

任务4

task4.c

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

运行截图

 

 

任务5

task5.c

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

运行截图

 

 

任务6

task6.1.c

 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 int func(int n, int m) {
17     int i,j;
18     int s1 = 1, s2 = 1;
19 
20     for (i = n; i >= n-m+1; --i) 
21         s1 *= i;
22 
23     for (j = m; j > 0; --j) 
24         s2 *= j;
25     
26     return s1 / s2;
27 }

task6.2.c

 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 int func(int n, int m) {
17     if (m > n)
18         return 0;
19     if (m == n || m == 0)
20         return 1;
21     else
22         return func(n - 1, m) + func(n - 1, m - 1);
23 }

运行截图

 

任务7

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

运行截图

 

 

posted @ 2025-04-07 19:13  tingying  阅读(26)  评论(0)    收藏  举报