实验三

实验任务1: task1.c源代码:
 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     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';break;     
26     }
27     return ans;
28 }

运行结果:

回答问题:

问题1:

score_to_grade函数的功能是运用分支结构判断成绩的等级

问题2:

没有了break语句,case语句就会接着往下执行直到default语句为止,比如,输入85的话,程序会输出BCDE

 

实验任务2:

task2.c源代码:

 1 #include <stdio.h>
 2 
 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 }

运行结果:

回答问题:

问题1:

函数sum_digits(int n)的功能是将整数分解,再输出每个数位上的数字的和

问题2:

能实现同等效果,前者是迭代算法,后者是递归算法

 

实验任务3:

task3.c源代码:

 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:

函数power的功能是实现x的幂运算

问题2:

是递归模式,当n等于0时,输出1;当n大于0时,返回值为x再乘以x(n个)

数学公式:

 

 

实验任务4:

task4.c源代码:

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

运行结果:

 

 实验任务5:

task5.c源代码:

 

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

运行结果:

 

实验任务6:

task6_1.c源代码:

 

 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 int func(int n,int m){
15     int i,a=1,b=1,c=1;
16     for (i=1;i<=n;i++){
17         a*=i;
18     }
19     for (i=1;i<=m;i++){
20         b*=i;
21     }
22     for (i=1;i<=n-m;i++){
23         c*=i;
24     }
25     return a/b/c;
26 }

运行结果:

task6_2.c源代码:

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

运行结果:

 

实验任务7: 

task7.c源代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int print_charman(int n);
 4 int r;
 5 int main(){
 6     int n;
 7     
 8     printf("Enter n:");
 9     scanf("%d",&n);
10     r=n;
11     print_charman(n);
12     
13     return 0;
14 }
15 int print_charman(n){
16 if(n>0){
17     int s,z;
18     for(s=2*n-1;s>0;s--) printf(" o \t");
19     printf("\n");
20     for(z=r-n;z>0;z--) printf("\t");
21     for(s=2*n-1;s>0;s--) printf("<H>\t");
22     printf("\n");
23     for(z=r-n;z>0;z--) printf("\t");
24     for(s=2*n-1;s>0;s--) printf("I I\t");
25     printf("\n\n");
26     for(z=r-n+1;z>0;z--) printf("\t");
27     print_charman(n-1);
28 }
29     
30 }

运行结果:

 

posted @ 2024-10-27 21:03  温姒妤  阅读(3)  评论(0编辑  收藏  举报