C语言函数应用编程

task1

源代码

#include<stdio.h>

char score_to_grade(int score);

int main() {
    int score;
    char grade;

    while (scanf_s("%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:case的结尾没有break,程序在符合判断条件时不会输出A/B/C/D,且程序最后没有return。

task2

源代码

#include<stdio.h>

int sum_digits(int n);

int main() {
    int n;
    int ans;

    while (printf("Enter n:"), scanf_s("%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:不能实现同等效果,修改后的代码只能满足个位数和两位数的计算要求,无法实现三位数及以上输入数据的计算要求。

task3

源代码

#include<stdio.h>

int power(int x, int n);

int main() {
    int x, n;
    int ans;

    while (printf("Enter x and n:"), scanf_s("%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:是递归函数,

task4

源代码

#include<stdio.h>
#include<math.h>

    int is_prime(int n) {
        if (n <= 1) {
            return 0;
        }
        for (int i = 2; i <= sqrt(n); i++) {
            if (n % i == 0) {
                return 0;
            }
        }
        return 1;
    }

    int main() {
        int count = 0;

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

 

程序运行截图

task5

源代码

#include<stdio.h>

int move_count = 0;

void hanoi(int n, char source, char target, char auxiliary) {
    if (n == 1) {
        move_count++;
        printf("%d:%c-->%c\n", n, source, target);
    }
    else {
        hanoi(n - 1, source, auxiliary, target);
        move_count++;
        printf("%d:%c-->%c\n", n, source, target);
        hanoi(n - 1, auxiliary, target, source);
    }
}

int main() {
    int n;

    while (1) {
        if (scanf_s("%d", &n) != 1) {
            break;
    }
        move_count = 0;
        hanoi(n, 'A', 'C', 'B');
        printf("\n一共移动了%d次。\n\n", move_count);
        while (getchar() != '\n');
    }
    return 0;
}

 

程序运行截图

task6

源代码

#include<stdio.h>

int func(int n, int m);
int factorial(int k);

int main() {
    int n, m;
    int ans;

    while (scanf_s("%d %d", &n, &m) != EOF) {
        ans = func(n, m);
        printf("n=%d,m=%d,ans=%d\n\n", n, m, ans);
    }
    return 0;
}

int factorial(int k) {
    int result = 1;
    for (int i = 1; i <= k; i++) {
        result *= i;
    }
    return result;
}

int func(int n, int m) {
    if (m<0 || m>n) {
        return 0;
    }
    if (m == 0 || m == n) {
        return 1;
    }
    return func(n - 1, m) + func(n - 1, m - 1);
}

 

程序运行截图

task7

源代码

#include<stdio.h>

int gcd(int a, int b, int c);

int min_of_three(int a, int b, int c) {
    int min = a;
    if (b < min)min = b;
    if (c < min)min = c;
    return min;
}

int gcd(int a, int b, int c) {
    int min = min_of_three(a,b,c);
    for (int i = min; i >= 1; i--) {
        if (a % i == 0 && b % i == 0 && c % i == 0) {
            return i;
        }
    }
    return 1;
}
int main() {
    int a, b, c;
    int ans;
    while (scanf_s("%d %d %d", &a, &b, &c) !=EOF) {
        ans = gcd(a, b, c);
        printf("最大啊公约数:%d\n\n", ans);
    }
    return 0;
}

 

程序运行截图

 

posted @ 2025-04-03 11:38  姚斯文  阅读(16)  评论(0)    收藏  举报