实验3

实验任务1

源代码

 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 // 函数定义
18 char score_to_grade(int score) {
19     char ans;
20 
21     switch(score/10) {
22     case 10:
23     case 9:   ans = 'A'; break;
24     case 8:   ans = 'B'; break;
25     case 7:   ans = 'C'; break;
26     case 6:   ans = 'D'; break;
27     default:  ans = 'E';
28     }
29 
30     return ans;
31 }

 

运行截图

 

问题1:把百分制的分数变成等第,形参类型是整形,返回值是字符型

问题2:当结果在78910时输出多个字符使结果不正确

 

实验任务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:计算一个数的多少次幂

问题2:是,x^n=x*x^(n-1)

实验任务4

源代码

#include <stdio.h>

int is_prime(int n);
int main()
 {
    int i, n, x, count;
    printf("100以内的孪生素数:\n");

    for(count=0, i=2, n=100;i+2<n; ++i)
    {
        x=i+2;
        if( is_prime(i)==1 && is_prime(x)==1)
            {
                printf("%d,%d\n", i,x);
                count+=1;
            }
    }
    printf("100以内的孪生素数共有%d个", count);
    return 0;
 }
int is_prime(int n)
{

        int a=2, b=0;
        for(; a<n; ++a)
        {
            b = n%a;
            if(b==0)
                break;

        }
        if(b==0)
            return 0;
        else
            return 1;

}

  

运行截图

 

实验任务5

源代码

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

 

运行截图

 

实验任务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 
15 int func(int n, int m){
16 int i,j,h,x=1,y=1,z=1;
17 for(i=1;i<=n;i++)
18     x*=i;
19 for(j=1;j<=m;j++)
20     y*=j;
21 for(h=1;h<=n-m;h++)
22     z*=h;
23 return x/y/z;
24 }

 

运行截图1

 源代码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 
15 int func(int n, int m){
16 if(n==m)
17     return 1;
18 else if(m>n)
19     return 0;
20 else if(m==0)
21     return 1;
22 else
23     return func(n-1,m)+func(n-1,m-1);
24 }

 

运行截图2

 

实验任务7

源代码

 1 #include <stdio.h>
 2 int gcd(int a,int b,int c);
 3 int main() {
 4     int a, b, c;
 5     int ans;
 6 
 7     while(scanf("%d%d%d", &a, &b, &c) != EOF) {
 8         ans = gcd(a, b, c); 
 9         printf("最大公约数: %d\n\n", ans);
10     }
11 
12     return 0;
13 }
14 
15 int gcd(int a,int b,int c){
16     int r,x,y;
17     x=a;
18     y=b;
19     do{r=x%y;
20     x=y;
21     y=r;
22     }while(r!=0);
23     y=c;
24     do{r=x%y;
25     x=y;
26     y=r;
27     }while(r!=0);
28 return x;
29 }

 

运行截图

 

posted @ 2025-04-06 15:55  孙姚奕  阅读(25)  评论(0)    收藏  举报