实验三

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

运行结果:

task1

回答:

1.函数score_to_grade的功能是将分数转换为等级;

   形参即形式参数,是函数定义时写在函数参数列表中的变量,用于接收调用函数时传入的值,所以此代码中形参即为score_to_grade(int score)中的score,它的类型是int;

   返回值是ans,类型为char。

2.①A.B.C.D均为双引号,双引号里的是字符串,与ans的类型不匹配,应将字符赋值给ans;

   ②case后没有break,回使代码从匹配的case一直运行到default结束,即导致所有的等级判断都是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     
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 }

运行结果:

task2

回答:

1.函数sum_digits的功能是计算输入的整数的各位之和;

2.能实现同样的输出

(原来)这种算法运用的是迭代思想,运用循环,先取n的个位加到ans中,再去掉n的个位,

不断循环直到n = 0时停止;

(修改后)这种算法运用的是递归思想,将复杂问题不断拆解为具有同样解决思路的子问题,直道遇到最简单可以求解的情况即终止条件,再逐层返回,得到最原始问题的答案。

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     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 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         t = power(x, n/2);
26         return t*t;
27     }
28 }

运行结果:

task 3

回答:

1.函数power的功能时计算x的n次幂;

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

 IMG_0337(20251028-143059)

task 4

源代码:

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

运行结果:

屏幕截图 2025-10-27 230755

task 5

源代码:(迭代)

 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     return 0;
13 }
14 
15 int func(int n,int m){
16     int up=1, down_1 = 1,down_2 = 1;
17     int ans = 1;
18     int i, j, p; 
19     for(i=1;i <= n;i++)
20         up *= i;
21     for(j=1;j <= m;j++)
22         down_1 *= j;
23     for(p=1;p <= (n-m);p++)
24         down_2 *= p;
25     
26     ans = up/(down_1*down_2);
27     return ans;
28      
29 } 

(递归)

 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     return 0;
13 }
14 
15 int func(int n,int m){
16     if(m>n)
17         return 0;
18     else if(m == n||m == 0)
19         return 1;
20     else
21     return func(n-1,m)+func(n-1,m-1); 
22 } 

运行结果:

task5

task 6

源代码:

 1 #include<stdio.h>
 2 
 3 int gcd(int a,int b,int c);
 4 
 5 int main(){
 6     int a, b, c;
 7     int ans;
 8     
 9     while(scanf("%d%d%d",&a ,&b, &c)!= EOF){
10         ans = gcd(a, b, c);
11         printf("最大公约数:%d\n\n",ans);
12     } 
13     
14     return 0;
15 }
16 
17 int gcd(int a,int b,int c){
18     int min = a;
19     if(b < min)
20         min = b;
21     if(c < min)
22         min = c;
23     int i;    
24     for(i = min;i >= i;i--){
25         if(a % i == 0 && b % i == 0 && c % i == 0)
26         return i;
27     } 
28 }

运行结果:

屏幕截图 2025-10-28 100822

task 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("input n:");
10     scanf("%d",&n);
11     print_charman(n);
12     
13     return 0;
14 }
15 
16 void print_charman(int n){
17     int i,j,k;
18     for(i=1;i<=n;i++){
19         int total=2*(n-i+1)-1;
20         for(k=1;k<i;k++){
21             printf("\t");
22         }
23         for(j=1;j<=total;j++){
24             printf(" O\t");
25         }
26         printf("\n");
27         for(k=1;k<i;k++){
28             printf("\t");
29         }
30         for(j=1;j<=total;j++){
31             printf("<H>\t");
32         }
33         printf("\n");
34         for(k=1;k<i;k++){
35             printf("\t");
36         }
37         for(j=1;j<=total;j++){
38             printf("I I\t");
39         }
40         printf("\n\n");
41     }
42 }

运行结果:

3

4

6

 

posted @ 2025-10-28 15:07  追随天光  阅读(6)  评论(0)    收藏  举报