实验3

任务一

代码

#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 将得分按照不同的标准,转化为不同的等级,形参类型为int,返回值类型为char

问题2 每个case执行后没有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 求正整数n各位数值之和

问题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次幂

任务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

代码

#include <stdio.h>

int hanoi(unsigned int n, char from, char temp, char to);
void moveplate(unsigned int n, char from, char to);

int main()
{
    unsigned int n;
    while(scanf("%u", &n) != EOF)
    {
        int count = hanoi(n, 'A', 'B', 'C');
        printf("一共移动了%d次\n\n", count);
    }
    return 0;
}

int hanoi(unsigned int n, char from, char temp, char to)
{
    int count = 0;

    if(n == 1)
    {
        moveplate(n, from, to);
        count++;
    }
    else
    {
        count += hanoi(n-1, from, to, temp);
        moveplate(n, from, to);
        count++;
        count += hanoi(n-1, temp, from, to);
    }
    return count;
}

void moveplate(unsigned int n, char from, char to)
{
    printf("%u: %c --> %c\n", n, from, to);
}

运行结果

任务7

代码

#include <stdio.h>
int gcd(int a, int b, int c);
int main()
{
    int a, b, c;
    int ans;

    while(scanf("%d%d%d", &a, &b, &c) != EOF) {
        ans = gcd(a, b, c);
        printf("最大公约数: %d\n\n", ans);
    }

    return 0;
}

int gcd(int a, int b, int c)
{
    int i=a;
    if(i>b)
        i=b;
    if(i>c)
        i=c;
    for(;i>1;--i)
    {
        if( a%i==0 && b%i==0 && c%i==0)
            break;
    }
    return i;

}

运行结果

 

posted @ 2025-04-06 22:26  赵可妍  阅读(24)  评论(0)    收藏  举报