实验三

Task 1:

 1 #include <stdio.h>
 2 char score_to_grade(int score); // 函数声明
 3 int main() {
 4   int score;
 5   char grade;
 6   while(scanf("%d", &score) != EOF) {
 7   grade = score_to_grade(score); // 函数调用
 8     printf("分数: %d, 等级: %c\n\n", score, grade);
 9  }
10   return 0;
11 }
12 // 函数定义
13 char score_to_grade(int score) {
14   char ans;
15   switch(score/10) {
16   case 10:
17   case 9: ans = 'A'; break;
18   case 8: ans = 'B'; break;
19   case 7: ans = 'C'; break;
20   case 6: ans = 'D'; break;
21   default: ans = 'E';
22  }
23  return ans;
24 }

 

捕获

问题一:score_to_grade的作用是将分数转换成等级;形参类型是整型,返回值类型是字符型

问题二:没有break终止,程序会继续执行后续代码,ans会被后续分支的赋值覆盖,最后输出的全是E

Task 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     return 0;
14 }
15 int sum_digits(int n){
16     int ans = 0;
17     
18     while(n != 0){
19         ans +=n % 10;
20         n /= 10;
21     }
22     
23     return ans;
24 }

 

捕获.PNG2

 

问题一:sum_digits是计算输入的n的所有位数字之和

问题二:能实现同样的输出。原:迭代的思维;现:递归的思维,拆分成计算去掉个位后剩余数字的和,以及个位数字

Task 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     
10     while (printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){
11     ans = power(x,n);
12     printf("n = %d,ans = %d\n\n",n,ans);    
13 }
14 return 0;
15 }
16 
17 int power(int x,int n){
18     int t;
19     
20     if(n == 0)
21     return 1;
22     else if(n%2)
23     return x*power(x,n-1);
24     else{
25     
26     t = power(x,n/2);
27     return t*t;
28 }
29 }

 

image

问题一:power的功能是实现x的n次方

问题二:是。

image

 

 

Task4:

 

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

 

image

Task 5:

 迭代实现:

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

image

 递归实现:

 

 

 

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 int main() 
 4 {
 5     int n, m;
 6     int ans;
 7     while(scanf("%d%d", &n, &m) != EOF) 
 8     {
 9         ans = func(n, m); 
10         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
11     }
12     return 0;
13 }
14 int func(int n, int m) 
15 {
16     if (m > n) return 0;
17     if (m == 0 || m == n) return 1;
18     return func(n - 1, m) + func(n - 1, m - 1);
19 }
image

 Task 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     while(scanf("%d%d%d", &a, &b, &c) != EOF) 
10     {
11         ans = gcd(a, b, c); 
12         printf("最大公约数: %d\n\n", ans);
13     }
14     return 0;
15 }
16 int gcd(int a, int b, int c) 
17 {
18     int min = a;
19     if (b < min) min = b;
20     if (c < min) min = c;
21     int i;
22     for (i = min; i >= 1; i--) 
23     {
24         if (a % i == 0 && b % i == 0 && c % i == 0) 
25         {
26             return i; 
27         }
28     }
29     return 1; 
30 }

image

 

Task 7:

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

 

image

image

 

posted @ 2025-10-27 09:28  超级累的长颈鹿  阅读(8)  评论(1)    收藏  举报