实验3

实验任务1

 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 }
View Code

批注 2025-10-24 083015

问题1:判断分数所对应的等第A-E;形参类型是整形,返回值类型是字符型

问题2:在每种情况后面没有break将函数暂停运行,所以所有输入都会生成E

实验任务2

 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 }
View Code

批注 2025-10-24 083856

问题1:功能是将输入的数据中的每一位的数字相加求和

问题2:能。第一种算法是运用迭代的思维;第二种算法是运用递归的思维

实验任务3

 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 }
View Code

批注 2025-10-24 084350

问题1:求出x的n次方

问题2:是。

5db23adcbd9601fdefe699491bf77a1c

实验任务4

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

屏幕截图 2025-10-24 140634

 实验任务5

 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 int func(int n, int m) 
18 {
19     if (m > n)
20         return 0;
21     if (m == 0 || m == n)
22         return 1;
23     if (m < n)
24     {
25         long long ans=1;
26         int i;
27         for (i = 1; i <= m; i++)
28         {
29             ans = ans * (n - m+i) / i;
30             
31         }
32         return ans;
33     }
34 
35 }
迭代
 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 int func(int n, int m) 
18 {
19     if (m > n)
20         return 0;
21     if (m == 0 || m == n)
22         return 1;
23     if (m < n)
24     {
25         return func(n - 1, m) + func(n - 1, m - 1);
26     }
27 
28 }
递归

屏幕截图 2025-10-26 120422

 实验任务6

 1 #define  _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 
 4 int gcd(int a, int b, int c);
 5 int main() {
 6     int a, b, c;
 7     int ans;
 8 
 9     while (scanf("%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 int gcd(int a, int b, int c) 
17 {
18     int min;
19     if (a > b && a > c)
20         min = a;
21     else if (b > a && b > c)
22         min = b;
23     else
24         min = c;
25     for (int i = min; i >= 1; --i)
26     {
27         if (a % i == 0 && b % i == 0 && c % i == 0)
28             return i;
29     }
30 }
View Code

屏幕截图 2025-10-26 121701

 实验任务7

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void print_charman(int n);
 5 int main() {
 6     int n;
 7 
 8     printf("Enter n: ");
 9     scanf("%d", &n);
10     print_charman(n); // 函数调用
11 
12     return 0;
13 }
14 
15 void print_charman(int n)
16 {
17     int i, j, k;
18     for (i = n; i >= 1; --i) 
19     {
20         for (j = 1; j <= n - i; j++)
21             printf("\t");
22         for (k = 1; k <= 2 * i - 1; ++k)
23             printf(" O \t");
24         printf("\n");
25         for (j = 1; j <= n - i; j++)
26             printf("\t");
27         for (k = 1; k <= 2 * i - 1; ++k)
28             printf("<H>\t");
29         printf("\n");
30         for (j = 1; j <= n - i; j++)
31             printf("\t");
32         for (k = 1; k <= 2 * i - 1; ++k)
33             printf("I I\t");
34         printf("\n");
35     }
36 }
View Code

屏幕截图 2025-10-26 131440

posted @ 2025-10-26 13:20  mjy66  阅读(8)  评论(1)    收藏  举报