实验3

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 }

 功能:将成绩进行分级

形参类型:整型

返回值类型:字符型

问题2:有问题,会一直向下输出导致输出值都是E。

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

 

 作用:将函数各位数字相加求和

问题二:能够实现,初始代码是用循环的方法,改进的代码是用递归的思维

 

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

 问题一:求x的n次幂

问题二:是递归

 Task4

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

 Task5.c

 

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

 Task6.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("%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 //迭代
19 int func(int n,int m)
20 {
21     int down=1,up=1,k,i;
22     for(i=1;i<=m;i++)
23     {
24         down=down*i;
25     }
26      for(k=n;k>n-m;k--)
27     {
28         up=up*k;
29     }
30     return up/down;
31 }
32 //递归
33 int func(int n,int m)
34 {
35     if(m==n||m==0)
36     return 1;
37     else if (m>n)
38     return 0;
39     else
40     return (func(n-1,m-1)+func(n-1,m));
41 }

 Task7.c

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 // 函数声明
 5 void print_charman(int n, int j);
 6 
 7 int main() {
 8     int n;
 9 
10     printf("Enter n: ");
11     scanf("%d", &n);
12     print_charman(n, 0); 
13 
14     return 0;
15 }
16 
17 void print_charman(int n, int j)
18 {
19     if (n <= 0) {
20         return;
21     }
22     int i;
23      for (i = 0; i < j; i++) {
24         printf(" ");
25     }
26     for (i = 0; i < 2 * n - 1; i++) {
27         printf(" o     ");
28     }
29     printf("\n");
30      for (i = 0; i < j; i++) {
31         printf(" ");
32     }
33     for (i = 0; i < 2 * n - 1; i++) {
34         printf("<H>    ");
35     }
36     printf("\n");
37      for (i = 0; i < j; i++) {
38         printf(" ");
39     }
40     for (i = 0; i < 2 * n - 1; i++) {
41         printf("I I    ");
42     }
43     printf("\n");
44     print_charman(n - 1, j + 7);
45 }

 

posted @ 2024-10-24 15:02  JackSusan'  阅读(17)  评论(0编辑  收藏  举报