实验3

实验任务1

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

捕获

问题1:该函数可以将输入的整数转换为相应的字母等级。形参类型为int,整数类型。返回值类型为char,字符类型。

问题2: switch语句中,当case后没有break时会发生穿透,该函数中,ans值被赋值后不会跳出switch,而是继续按顺序往下依次赋值,导致无法得到正确的等级。

实验任务2

 

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

 

捕获2

 问题1:可以将输入的整数的各位的数进行相加,然后返回相加后得到的整数。

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

 

捕获3

 问题1:函数power用于计算底数为x,指数为n的冥次方

问题2:是,

Screenshot_20251030_130410

 

 

实验任务4

 

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

 

实验3-4

实验任务5

 迭代

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 
 4    // 函数声明
 5 
 6 int main() {
 7     int n, m;
 8     int ans;
 9 
10     while(scanf("%d%d", &n, &m) != EOF) {
11         ans = func(n, m);   // 函数调用
12         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
13     }
14         
15     return 0;
16 }
17 
18 int func(int n, int m)
19 {
20     if(n<m)
21     return 0;
22     if(m==0||m==n)
23     return 1;
24     int a,b,c;
25     a=1;
26     b=1;
27     c=1;
28     int i,t,q;
29     for(i=1;i<=n;++i)
30     {
31         a*=i;
32     }
33     for(t=1;t<=m;++t)
34     {
35         b*=t;        
36     }
37     for(q=1;q<=n-m;++q)
38     {
39         c*=q;
40     }
41     return (a/(b*c));
42 }

 

3-5

 递归

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 
 4    // 函数声明
 5 
 6 int main() {
 7     int n, m;
 8     int ans;
 9 
10     while(scanf("%d%d", &n, &m) != EOF) {
11         ans = func(n, m);   // 函数调用
12         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
13     }
14         
15     return 0;
16 }
17 
18 int func(int n, int m)
19 {
20     if(n==m||m==0)
21     return 1;
22     if(n<m)
23     return 0;
24     return func(n-1,m)+func(n-1,m-1);
25 }

3-5-2

实验任务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 
18 int gcd(int a,int b,int c)
19 {
20     int i,t;
21     if(a<=b)
22     {
23         i=a;
24         if(i>=c)
25         i=c;
26     }
27     else
28     {
29         i=b;
30         if(b>=c)
31         i=c;
32     }
33     for(t=i;t>=1;--t)
34     {
35     
36         if(a%t==0&&b%t==0&&c%t==0)
37         return t;
38     }
39     
40 }

 

3-6

实验任务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("Enter n: ");
10     scanf("%d", &n);
11     print_charman(n); // 函数调用
12        
13     return 0;
14 }
15 
16 void print_charman(int n)
17 {
18     int z,q,i,t;
19     i=2*n-1;
20     z=0;
21     for(q=i;q>=1;q-=2)
22     {
23         ++z;
24         int m;
25         for(m=1;m<z;++m)
26         {
27             printf("\t");
28             
29         }    
30         for(t=1;t<=q;++t)
31         {
32             printf(" 0\t");
33         }
34         printf("\n");
35         for(m=1;m<z;++m)
36         {
37             printf("\t");
38             
39         }
40         for(t=1;t<=q;++t)
41         {
42             printf("<H>\t");
43         }
44         printf("\n");
45         for(m=1;m<z;++m)
46         {
47             printf("\t");
48             
49         }
50         for(t=1;t<=q;++t)
51         {
52             printf("I I\t");
53         }
54         printf("\n");
55 
56     }
57 }

 

3-7-1

 

3-7-2

 

posted @ 2025-10-30 13:09  craty  阅读(12)  评论(1)    收藏  举报