实验3

实验任务111111111
 1 #include <stdio.h>
 2 
 3 char score_to_grade(int score);
 4 int main() {
 5     int score;
 6     char grade;
 7 
 8     while(scanf_s("%d", &score) != EOF) {
 9         grade = score_to_grade(score);  
10         printf("分数: %d, 等级: %c\n\n", score, grade);
11     }
12 
13     return 0;
14 }
15 char score_to_grade(int score) {
16     char ans;
17 
18     switch(score/10) {
19     case 10:
20     case 9:   ans = 'A'; break;
21     case 8:   ans = 'B'; break;
22     case 7:   ans = 'C'; break;
23     case 6:   ans = 'D'; break;
24     default:  ans = 'E';
25     }
26 
27     return ans;
28 }
View Code

 

image

问题:函数 score_to_grade 的功能是输入成绩,判断成绩的等级并返回。

形参类型是int 整形,返回的是字符型。

 

试验任务222222222

 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 int sum_digits(int n) {
18     int ans = 0;
19 
20     while (n != 0) {
21         ans += n % 10;
22         n /= 10;
23     }
24 
25     return ans;
26 }
View Code

 

image

问题1,用于求一个数各个位上数字的和
问题2,能,第一种是迭代,循环执行,直到n==0,那么此时n<10。
第二种是递归,,使函数自身嵌套函数使用,达到对各个位数字累加的效果。

 

实验任务3333333

 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 int power(int x, int n) {
17     int t;
18 
19     if(n == 0)
20         return 1;
21     else if(n % 2)
22         return x * power(x, n-1);
23     else {
24         t = power(x, n/2);
25         return t*t;
26     }
27 }
View Code

image

 

问题 1:

power函数用来计算x的男n次幂。

问题2;

power函数是递归函数.

 

实验任务444444444

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

image

 

实验任务5555555

 1 #include <stdio.h>
 2 
 3 int func(int n, int m);   // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8 
 9     while (scanf_s("%d%d", &n, &m) != EOF) {
10         ans = func(n, m);   // 函数调用
11         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12     }
13 
14     return 0;
15 }
16 
17 // 函数定义
18 // 待补足。。。(分别用迭代和递归实现)
19 int func(int n, int m)
20 {
21     int q = 1, Q = 1, N = 0;
22     if (m != 0 && n >= m)
23     {
24         do
25         {
26             q *= n;
27             n--;
28             N++;
29         } while (N != m);
30         for (; m >= 1;)
31         {
32             Q *= m;
33             m--;
34         }
35         return q / Q;
36     }
37     else if (m > n)
38         return 0;
39     else
40         return 1;
41 }
View Code

image

 

实验任务66666666

 1 #include <stdio.h>
 2 
 3 // 函数声明
 4 // 待补足....
 5 
 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 {
24     int min, t;
25     if (a > b)
26     {
27         t = b;
28         if (t > c)
29             min = c;
30         else
31             min = b;
32     }
33     else
34         t = a;
35     {
36         if (t > c)
37             min = c;
38         else
39             min = a;
40     }
41     for (; min >= 1;)
42     {
43         if (a % min == 0)
44         {
45             if (b % min == 0)
46             {
47                 if (c % min == 0)
48                 {
49                     printf("最大公约数为%d", min);
50                     break;
51                 }
52             }
53         }
54       min--;  
55     }
56     return min;
57 }
View Code

image

 

 实验任务77777777

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 // 函数声明
 5 // 待补足
 6 // xxx
 7 void print_charman(int n);
 8 int main() {
 9     int n;
10 
11     printf("Enter n: ");
12     scanf_s("%d", &n);
13     print_charman(n); // 函数调用
14 
15     return 0;
16 }
17 void print_charman(int n) {
18     int i, m, row, j;
19     for (i = 0; i < n; i++) {
20 
21         for (row = 0; row < 3; row++) {
22             for (m = 0; m < i; m++) {
23                 printf("    \t");
24             }
25             for (j = 0; j < 2 * n - 1 - i * 2; j++) {
26 
27                 switch (row) {
28                 case 0:printf(" o\t"); continue;
29                 case 1:printf("<H>\t"); continue;
30                 case 2:printf("I I\t"); continue;
31                 }
32                 printf("\n");
33             }
34             printf("\n");
35         }
36     }
37 }
38 // 函数print_charman定义
39 // 待补足
40 // xxx
View Code

image

 

posted @ 2025-10-30 22:41  顾添乐  阅读(3)  评论(1)    收藏  举报