实验三

任务一

源代码

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

截图

问题一:score_to_grade的作用是把输入的分数按等级输出;形参类型是int,返回类型是char.

问题二:程序修改后有问题,无论输入什么数值,最后返回值都为'E'。

任务二

源代码

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

截图

问题一:函数sum_digits的功能是计算一个数的所有数位上数字的和

问题二:能实现同等效果。方式一的算法思维是迭代,方式二是递归。

任务三

源代码

 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 }

截图

问题一:函数power的功能是计算一个数的n次方

问题二:

 

 

任务四

源代码

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

截图

 

 

 

 

 

任务五

源代码

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

截图

 

任务六

迭代

源代码

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

截图

递归

源代码

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

截图

 

 

 

 

 

 

任务七

源代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 void print_charman(int n);
 4 int main(){
 5     int n;
 6     printf("Enter n: ");
 7     scanf("%d",&n);
 8     print_charman(n);
 9     return 0;
10 }
11 void print_charman(int n){
12     int i,j,k,flag_n;
13     flag_n=n;
14     for(;flag_n>0;flag_n--){
15         for(i=0;i<n-flag_n;i++)
16              printf("\t");
17         for(i=1;i<=(2*flag_n-1);i++){
18             printf(" O \t");
19         }
20         printf("\n");
21         for(j=0;j<n-flag_n;j++)
22               printf("\t");
23         for(j=1;j<=(2*flag_n-1);j++){
24             printf("<H>\t");
25         } 
26         printf("\n");
27         for(k=0;k<n-flag_n;k++)
28             printf("\t");
29         for(k=1;k<=(2*flag_n-1);k++){
30             printf("I I\t");
31         }
32         printf("\n");
33         
34     }
35         
36         
37         
38         
39         
40         
41     
42 }

截图

 


posted @ 2024-10-25 17:11  秦文惠  阅读(9)  评论(0编辑  收藏  举报