实验三

实验任务1

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 char score_to_grade(int score);
 4 int main() {
 5     int score;
 6     char grade;
 7 
 8     while(scanf("%d", &score) != EOF) {
 9         grade = score_to_grade(score);
10         printf("分数: %d, 等级: %c\n\n", score, grade);
11     }
12 
13     return 0;
14 }
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 }

问题1

该函数的作用为将不同分数段的分数转化为字母等级,90到100为A,80到90为B,70到80为C,60到70为D,60分以下为E

形参类型为整形,返回类型为字符型

问题2

有问题,第一个问题是A,B,C,D字符应该用单引号,

第二个问题是没有执行打破选择分支的break语句,完成第一次选择后会继续向下执行。

 

实验任务2

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

问题1

功能为求n各位数之和。

问题2

可以实现,第一种实现方法为迭代直接进行每一位的取余求和;第二种,即修改后的函数利用递归,将问题转化为低阶问题,当n<10时直接返回n,并且此时递归有出口。所以可以实现。

 

实验任务3

 1 #include <stdio.h>
 2 int power(int x, int n);
 3 int main() {
 4     int x, n;
 5     int ans;
 6     while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
 7         ans = power(x, n);
 8         printf("n = %d, ans = %d\n\n", n, ans);
 9     }
10     return 0;
11 }
12 int power(int x, int n) {
13     int t;
14     if(n == 0)
15         return 1;
16     else if(n % 2)
17         return x * power(x, n-1);
18     else {
19         t = power(x, n/2);
20         return t*t;
21     }
22 }

问题1

输出x的n次幂

问题2

 

实验任务4

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

 

实验任务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 cnt=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",cnt);
13     cnt=0;
14     }
15     return 0;
16     
17 }
18 
19 void hanoi(unsigned int n,char from,char temp,char to)
20 {
21     if(n==1)
22     moveplate(n,from,to);
23     else
24     {
25     hanoi(n-1,from,to,temp);
26     moveplate(n,from,to);
27     hanoi(n-1,temp,from,to);    
28         
29     }
30     
31 }
32 
33 void moveplate(unsigned int n,char from,char to)
34 {   
35     printf("%u:%c-->%c\n",n,from,to);
36     cnt+=1;
37 }

 实验任务6

 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         
13     return 0;
14 }
15 
16 int func(int n, int m)
17 {
18     int a=1,b=1;
19     int c,d;
20     if(m==0)
21         return 1;
22         else if(n<m)
23         return 0;
24     for(d=1;d<=m;d++)
25     {
26         b=b*d;
27     }
28     for(c=n;c>=n-m+1;c--)
29     {
30         a=a*c;
31     }
32         return a/b;
33     
34 }
 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         
13     return 0;
14 }
15 
16 int func(int n, int m)
17 {
18     if(m==0)
19     return 1;
20     else if(n<m)
21     return 0;
22     else
23     return(func(n-1, m)+func(n-1,m-1));
24     
25 }

实验任务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     return 0;
13 }
14 
15 void print_charman(int n)
16 {   
17     int i,t,cnt=1;
18     for(cnt=n;cnt>=1;cnt--)
19     {
20         for(t=1;t<=(n-cnt);t++)
21         {
22         printf("\t");    
23         }
24         for(i=2*cnt-1;i>=1;i--)
25         {
26             printf(" 0 \t");
27         }
28         for(t=1;t<=(n-cnt);t++)
29         {
30         printf("\t");    
31         }
32         printf("\n");
33         
34         for(t=1;t<=(n-cnt);t++)
35         {
36         printf("\t");    
37         }
38         for(i=2*cnt-1;i>=1;i--)
39         {
40             printf("<H>\t");
41         }
42         for(t=1;t<=(n-cnt);t++)
43         {
44         printf("\t");    
45         }
46         printf("\n");
47         
48       for(t=1;t<=(n-cnt);t++)
49         {
50         printf("\t");    
51         }
52         for(i=2*cnt-1;i>=1;i--)
53         {
54             printf("I I\t");
55         }
56         for(t=1;t<=(n-cnt);t++)
57         {
58         printf("\t");    
59         }
60         printf("\n");
61         
62     }
63 }

 

posted @ 2024-10-25 22:32  王昊祺  阅读(17)  评论(0编辑  收藏  举报