实验3

任务1

代码

#include<stdio.h>
char score_to_grade(int score);
int main()
{
    int score;
    char grade;
    while (scanf("%d",&score)!=EOF){
        grade=score_to_grade(score);
        printf("分数:%d,等级:%c\n\n",score,grade);
    }
    return 0;
}
char score_to_grade(int score){
    char ans;
    switch(score/10){
        case 10:
        case 9:ans='A';break;
        case 8:ans='B';break;
        case 7:ans='C';break;
        case 6:ans='D';break;
        default:ans='E';
    }
    return ans;
}

截图

1:功能为将对应分数转化为等级,形式参数类型为整型,返回值类型为字符型。

2:有问题,当输入一个数时,会一次打印ABCDE四个等级。

 

 

 

 

任务2:

代码

#include<stdio.h>
int sum_digits(int n);
int main()
{
    int n;
    int ans;
    while (printf("Enter n:"),scanf("%d",&n)!=EOF){
        ans=sum_digits(n);
        printf("n=%d,ans=%d\n\n",n,ans);
    }
    return 0;
}
int sum_digits(int n){
    int ans=0;
    while(n!=0){
        ans+=n%10;
        n/=10;
    }
    return ans;
}

 

截图

1:功能为计算n每一位数的和

2:不行,新算法只能计算个位数和十位数字之和,对于三位及三位以上的数字无法计算。

 

 

 

任务3:

代码

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

 

截图

1:计算x的n次方

2:是递归函数

数学模型如下图

 

 

 

 

 

 

 

任务4:

代码

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

 

 截图

 

 

 

任务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 
 6     int sum=0;
 7 int main(){
 8     unsigned int n;
 9     
10     while(scanf("%u",&n)!=EOF)
11 {    sum=0;
12     hanoi(n,'A','B','C');
13     printf("一共移动了%d次\n",sum);
14 }
15     
16     system("pause");
17     return 0;
18 } 
19 
20 void hanoi(unsigned int n,char from,char temp,char to)
21 {
22     if(n==1)
23     {
24         moveplate(n,from,to);
25         sum++;
26     }
27     else
28         {
29             hanoi(n-1,from,to,temp);
30             moveplate(n,from,to);
31             sum++;
32             hanoi(n-1,temp,from,to);
33         
34         }
35 }
36 
37 void  moveplate(unsigned int n,char from,char to)
38 {
39     printf("%u:%c-->%c\n",n,from,to);
40 }

截图

 

 

 

 

任务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 {    if (m == 0 || n == m) 
18     
19         return 1;
20      
21     else if (n < m) 
22     
23         return 0;
24     
25     else 
26     
27         return func(n-1,m)+func(n-1,m-1);
28  } 

迭代

 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 i,j,up=1,down=1,ans;
19     for(i=n;i>=(m-1);i--)
20     {
21         up=up*i;
22     }
23     
24     for(j=m;j>=1;j--)
25     {
26         down=down*j;
27     }
28     ans=up/down;
29     return ans;
30  } 

截图(两次结果相同)

 

 

 

任务7(注:函数非原创,实在想不到)

代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void print_charman(int n);
 5 int main() {
 6     int n;
 7 
 8     printf("Enter n: ");
 9     scanf("%d", &n);
10     print_charman(n); // 函数调用
11        
12     return 0;
13 }
14 
15 // 函数print_charman定义
16 // 待补足
17 // xxx
18 void print_charman(int n)
19 {
20     int i,j,k;
21     for(i=n;i>=1;i--){
22             for(k=i;k<n;k++)
23                 {
24                     printf("\t");
25                 }
26             for(j=1;j<=2*i-1;j++)
27                 {
28                     printf(" o\t");
29                 }
30                 printf("\n");
31             
32                 
33             for(k=i;k<n;k++)
34                 {
35                     printf("\t");
36                 }
37             for(j=1;j<=2*i-1;j++)
38                 {
39                     printf("<H>\t");
40                 }
41             printf("\n");
42          
43             
44             
45             for(k=i;k<n;k++)
46                 {
47                     printf("\t");
48                 }
49             for(j=1;j<=2*i-1;j++)
50                 {
51                     printf("I I\t");
52                 }
53             printf("\n");
54         
55     }
56 }

 

截图

 

 

posted @ 2024-10-25 21:37  计类12yyq  阅读(12)  评论(0编辑  收藏  举报