实验3

任务1:

源代码:

 1 #include<stdio.h>
 2 char score_to_grade(int score);
 3 int main(){
 4     int score;
 5     char grade;
 6     
 7     while(scanf("%d",&score)!=EOF){
 8         grade=score_to_grade(score);
 9         printf("分数:%d,等级:%c\n\n",score,grade);
10     }
11     return 0;
12 }
13 char score_to_grade(int score){
14     char ans;
15     switch(score/10){
16     case 10:
17     case 9:ans='A';break;
18     case 8:ans='B';break;
19     case 7:ans='C';break;
20     case 6:ans='D';break;
21     default: ans='E';
22     }
23     return ans;
24 }

问题1:将分数以等第的形式输出;形参类型:整型;返回值类型:字符型

问题2:有1.字符用的是双引号,没有用单引号,不符合格式要求 2.case6-9后没有加上break;不,能及时终止

 

任务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:将输入的数的各位上的数相加并输出

问题2:能,第一种运用了迭代的算法思维,第二种运用了递归的算法思维

 

任务3:

源代码:

#include<stdio.h>
int power(int x,int n);
int main(){
    int x,n;
    int ans;
    while(printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){
        ans=power(x,n);
        printf("n = %d,ans = %d\n\n",n,ans);
    }
    return 0;
}
int power(int x,int n){
    int t;
    if(n==0)
        return 1;
    else if(n%2)
        return x*power(x,n-1);
    else{
            t=power(x,n/2);
            return t*t;
    }
}

 

 问题1:计算x的n次幂

问题2:是

 

任务4:

源代码:

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

 

任务5:

源代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 unsigned int count=0;
 4 void hanoi(unsigned int n,char from,char temp,char to);
 5 void moveplate(unsigned int n,char from,char to);
 6 int main(){
 7     unsigned int n;
 8     while((scanf("%u",&n))!=EOF)
 9     {
10     hanoi(n,'A','B','C');
11     printf("\n一共移动了%d次.\n\n",count);
12     count=0;
13     }
14     system("pause");
15     return 0;
16 }
17 void hanoi(unsigned int n,char from,char temp,char to)
18 {
19     count++;
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 }

 

任务6:

源代码1(迭代):

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 int main(){
 4     int n, m;
 5     int ans;
 6 
 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         
12     return 0;
13 }
14 int func(int n,int m){
15     int i,j;
16     int up=1;
17     int down=1;
18     for(i=n;i>=(n-m+1);i--){
19         up*=i;
20     }
21     for(j=1;j<=m;j++){
22         down*=j;
23     }
24     return up/down;
25 }

源代码2(递归):

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 int main(){
 4     int n, m;
 5     int ans;
 6 
 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         
12     return 0;
13 }
14 int func(int n,int m){
15     if(m==0||m==n){
16         return 1;
17     }
18     if(m>n){
19         return 0;
20     }
21     return func(n-1,m-1)+func(n-1,m);
22 }

 

任务7:

源代码:

 

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

 

posted @ 2024-10-28 22:48  xipar  阅读(3)  评论(0编辑  收藏  举报