实验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 char score_to_grade(int score) {
17     char ans;
18 
19     switch(score/10) {
20     case 10:
21     case 9:   ans = 'A'; break;
22     case 8:   ans = 'B'; break;
23     case 7:   ans = 'C'; break;
24     case 6:   ans = 'D'; break;
25     default:  ans = 'E';
26     }
27 
28     return ans;
29 }
111
 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 char score_to_grade(int score) {
17     char ans;
18 
19     switch(score/10) {
20     case 10:
21     case 9:   ans = "A";
22     case 8:   ans = "B";
23     case 7:   ans = "C";
24     case 6:   ans = "D";
25     default:  ans = "E";
26     }
27 
28     return ans;
29 }
112

运行结果

 11

 

问题1

功能为将输入成绩转化为对应等级,自定义函数以简化代码

形参类型为数值类型,返回值类型为字符串类型

问题2

1.case后面没有break,将一直进行下去,ans的值一直被覆盖

2.A以及其他的等级均为字符常量而非字符串常量,应该用单引号而非双引号

 

实验2

 源代码

 1 #include <stdio.h>
 2 
 3 int sum_digits(int n); 
 4 
 5 int main() 
 6 {
 7     int n;
 8     int ans;
 9 
10     while (printf("Enter n: "), scanf("%d", &n) != EOF)
11     {
12         ans = sum_digits(n);   
13         printf("n = %d, ans = %d\n\n", n, ans);
14     }
15 
16     return 0;
17 }
18 
19 int sum_digits(int n) 
20 {
21     int ans = 0;
22 
23     while (n != 0) 
24     {
25         ans += n % 10;
26         n /= 10;
27     }
28 
29     return ans;
30 }
222

运行结果

22

问题1

函数功能为把输入数字各位上的数字加起来得到一个新的数

问题2

能,第一种是迭代思维,通过循环来进行;第二种是递归思维,通过将大问题简化为小问题来实现

实验任务3

源代码

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

运行结果

 33

 问题1

功能为求x的n次方

问题2

是递归函数,递归模式数学公式模型为:

n=0时,t=1

n%2!=0时,t=x*x*x*'''(n个x)

n%2=0时,将运算分为两半再相乘

 实验任务4

源代码

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

运行结果

sds

实验任务5

源代码

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 
 4 int main()
 5 {
 6     int n, m;
 7     int ans;
 8 
 9     while (scanf("%d%d", &n, &m) != EOF)
10     {
11         ans = func(n, m);
12         printf("n=%d,m=%d,ans=%d\n\n", n, m, ans);
13     }
14     return 0;
15 }
16 
17 func(int n,int m)
18 {
19     if (m > n)
20     {
21         return 0;
22     }
23 
24     if (m == 0 || n == 0)
25     {
26         return 1;
27     }
28 
29     long long up=1, down=1;
30     int i = 1;
31     for (i; i <= m; i++)
32     {
33         up *= (n - m + i);
34         down *= i;
35     }
36     return up / down;
37 }
迭代
 1 #include <stdio.h>
 2 int func(int n, int m);
 3 
 4 int main()
 5 {
 6     int n, m;
 7     int ans;
 8 
 9     while (scanf("%d%d", &n, &m) != EOF)
10     {
11         ans = func(n, m);
12         printf("n=%d,m=%d,ans=%d\n\n", n, m, ans);
13     }
14     return 0;
15 }
16 
17 func(int n,int m)
18 {
19     if (m > n)
20     {
21         return 0;
22     }
23 
24     if (m == 0 || n == 0)
25     {
26         return 1;
27     }
28 
29     return func(n - 1, m) + func(n - 1, m - 1);
30 }
递归

运行结果

asdedfwefwqe

人员核实任何人收到货人傻虽然

实验任务6

源代码

 1 #include <stdio.h>
 2 
 3 int gcd(int a, int b, int c);
 4 
 5 int main()
 6 {
 7     int a, b, c;
 8     int ans;
 9 
10     while (scanf("%d%d%d", &a, &b, &c) != EOF)
11     {
12         ans = gcd(a, b, c);
13         printf("最大公约数:%d\n\n", ans);
14     }
15     return 0;
16 }
17 
18 int gcd(int a, int b, int c)
19 {
20     int min = a;
21     if (a > b)
22     {
23         min = b;
24             if (b > c)
25             {
26                 min = c;
27             }
28     }
29 
30     if (a % min == 0 && b % min == 0 && c % min == 0)
31     {
32         return min;
33     }
34 
35     for (min; min >= 1; min--)
36     {
37         if (a % min == 0 && b % min == 0 && c % min == 0)
38         {
39             return min;
40         }
41     }
42 
43     return 1;
44 }
View Code

运行结果

发v地方给我二哥色鬼凤娃GV二

实验任务7

源代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void print_charman(int n);
 5 
 6 int main() {
 7     int n;
 8 
 9     printf("Enter n: ");
10     scanf_s("%d", &n);
11     print_charman(n); 
12 
13     return 0;
14 }
15 
16 void print_charman(int n)
17 {
18     int i;
19     int j;
20     int k;
21 
22     for (i = 1; i <= n; i++)
23     {
24         for (j = i - 1; j > 0; j--)
25         {
26             printf("\t");
27         }
28 
29         for (k = 1; k <= 2 * (n - i) + 1; k++) 
30         {
31             printf(" O \t");
32         }
33 
34         printf("\n");
35 
36         for (j = i - 1; j > 0; j--)
37         {
38             printf("\t");
39         }
40 
41         for (k = 1; k <= 2 * (n - i) + 1; k++)
42         {
43             printf("<H>\t");
44         }
45 
46         printf("\n");
47 
48         for (j = i - 1; j > 0; j--)
49         {
50             printf("\t");
51         }
52 
53         for (k = 1; k <= 2 * (n - i) + 1; k++) 
54         {
55             printf("I I\t");
56         }
57 
58         printf("\n");
59     }
60 }
View Code

运行结果

发VS的VS公司

舒服舒服七阿哥特光头强阿汤哥

 

posted @ 2025-10-29 23:17  辣椒酱拌芥末  阅读(10)  评论(1)    收藏  举报