实验3

实验任务1

程序源代码:

 1 #include <stdio.h>
 2 #include<stdlib.h>
 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     system("pause");
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:根据输入的成绩返回对应的等级。形参类型:int。返回值类型:char。

问题2:""代表字符串类型,字符类型用''。case后未加break,会继续执行后续代码。

 

 

实验任务2

程序源代码:

 1 #include <stdio.h>
 2 #include<stdlib.h>
 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     system("pause");
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:功能是返回输入数字的各位数字之和

问题2:能实现同样效果。改之前用的迭代思想,改后用的递归思想

 

 

实验任务3

程序源代码:

 1 #include <stdio.h>
 2 #include<stdlib.h>
 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     system("pause");
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 }

运行结果截图:

问题1:功能是计算x的n次方

问题2:是递归

递归模式:

 

 

 

 

实验任务4

程序源代码:

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

运行结果截图:

 

 

实验任务5

程序源代码:

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

 

 运行结果截图:

 

 

实验任务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         system("pause");
14     return 0;
15 }
16 
17 int func(int n,int m)
18 {
19     int a=1;
20     int b=1;
21     if(n<m)
22     {return 0;
23     }
24     else if(m==0)
25     {
26     return 1;
27     }
28     else 
29     {
30         for(int i=n;i>=n-m+1;i--)
31         {
32         a*=i;
33         }
34         for(int s=m;s>=1;s--)
35         {
36             b*=s;
37         }
38     int c=a/b;
39         return c;
40     }
41 
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         system("pause");
14     return 0;
15 }
16 
17 int func(int n,int m)
18 {
19     if(m>n)
20         return 0;
21     int c;
22     if(n==0 || m==0)
23         c= 1;
24     else 
25     c=func(n-1,m)+func(n-1,m-1);
26     return c;
27 }

运行结果截图

 

实验任务7

程序源代码:

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

运行结果截图:

 

posted @ 2025-04-07 20:36  起司配咖啡  阅读(23)  评论(0)    收藏  举报