实验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 }

 

问题1:函数score_to_grade的功能是判断输入成绩的等级,形参类型为整型,返回值类型为字符型。

问题2:有问题。(1)在ans = “”的后面缺少break,返回值会是当前分数及以下对应的所有等级。(2)返回的"A""B""C""D"不是字符型。。

 

 

任务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 }

 

问题1:函数sum_digits的功能是求输入数字所有位上的数字之和

问题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 }

问题1:函数power的功能是根据输入的x和n求出x的n次方。

问题2:是递归函数

 

 

任务4

源代码

 

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

 

任务5

源代码

 

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

 

任务6

源代码

 迭代

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int func(int n, int m);   // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8 
 9     while(scanf("%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 int func(int n, int m){
18     int i, p = 1, x = 1;
19     
20     if(n < m){
21         return 0;
22     }
23     
24     if(m == 0){
25         return 1;
26     }
27     
28     if(m == n){
29         return 1;
30     }
31     
32     for(i = 0; i < m; i++){
33         x *= n;
34         n -= 1;
35     }
36     
37     for(; m > 0;m--){
38         p *= m;
39     }
40     
41     return x/p;
42 }

 

递归

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int func(int n, int m);   // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8 
 9     while(scanf("%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 int func(int n, int m){
18     if(n < m){
19         return 0;
20     }
21     
22     if(m == 0){
23         return 1;
24     }
25     
26     if(m == n){
27         return 1;
28     }
29     return func(n - 1, m) + func(n - 1, m - 1);
30     
31 }

 

任务7

源代码

 

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

 

posted @ 2024-10-26 23:59  苏刘梁  阅读(9)  评论(0编辑  收藏  举报