实验3

实验1

代码:

 1 #include<stdio.h>
 2 
 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     return 0;
13 }
14 char score_to_grade(int score){
15     char ans;
16     switch(score/10){
17         case 10:
18         case 9:ans='A';break;
19         case 8:ans='B';break;
20         case 7:ans='C';break;
21         case 6:ans='D';break;
22         default:ans='E';
23     }
24     return ans;
25 }
View Code

运行结果

问题1:函数功能为计算不同成绩的等级;形参类型为字符型,返回值类型为字符。

问题2:函数运行结果将永远为E。

实验2

代码2:

 1 #include<stdio.h>
 2 int sum_digits(int n);
 3 int main(){
 4     int n;
 5     int ans;
 6 
 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 
17     while(n!=0){
18         ans+=n%10;
19         n/=10;
20     }
21     return ans;
22 }
View Code

运行结果

问题1:求n对10取余数的各余数之和。

问题2:能实现;前者是迭代,后者属于递归。

实验3

代码:

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

运行结果:

问题1:计算不同数值n情况下x的次方。

问题2:递归。xn=(xn-1) * x。

实验4

代码:

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

运行结果

实验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 i=0;
 6 int main() 
 7 {
 8     unsigned int n;
 9     while(scanf("%u",&n) != EOF)
10     {
11     i=0;
12     hanoi(n,'A','B','C');
13     printf("移动总次数:%d\n",i); 
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     i++; 
33 }
View Code

运行结果:

实验6

代码:

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

运行结果

代码:

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

运行结果

实验7

代码:

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

运行结果

 

posted @ 2025-04-06 17:29  吉筱嘉  阅读(6)  评论(0)    收藏  举报