实验3 C语言函数应用编程

Posted on 2025-10-30 21:14  星辰2311  阅读(7)  评论(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;
}

结果:

image

 问题一:

函数功能:将分数转换为对应的等级

形参类型:整型

返回类型:字符

 

问题二:

删除break,执行代码时,会执行所匹配的case之后的所有内容,例如输入99,会依次为ans赋值,最后输出E

 

 

任务二:

#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;
}

结果:

image

 问题一:
函数功能:输出一个数所有位的数之和

问题二:

可以,方法一是通过分离数位累加的方式,方法二是通过递归的思想

 

 

任务三:

#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;
    }
}

结果:

image

问题一:

函数功能:判断n的奇偶并用递归的思想进行不同的运算,最后输出结果

问题二:

T(n)=  ⎧​ 1,                     n=0
           ⎨x * T(n1),       n为奇数
           ⎩ T(n/2)*T(n/2), n 为偶数
 
 
任务四:
#include<stdio.h>
int is_prime(int n){
    int i;
    if(n==2){
        return 1;
    }
    else{
        for (i = 2; i * i <= n;i++){
            if(n%i==0){
                return 0;
            }
        }
        if(i*i>n){
            return 1;
        }
}
}

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

结果:

image

 

 

任务五:
方法一:迭代方法
#include <stdio.h>
int func(int n, int m); // 函数声明
int main()
{
    int n, m;
    int ans;
    while (scanf("%d%d", &n, &m) != EOF)
    {
        ans = func(n, m); // 函数调用
        printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
    }
    return 0;
}

int fun(int n){
    if(n==1||n==0){
        return 1;
    }
    return n * fun(n - 1);
}

int func(int n,int m){
    if(n<m){
        return 0;
    }
    return fun(n) / (fun(m)*fun(n-m));
}

结果:

image

 

方法二:递归方法

#include <stdio.h>
int func(int n, int m); // 函数声明
int main()
{
    int n, m;
    int ans;
    while (scanf("%d%d", &n, &m) != EOF)
    {
        ans = func(n, m); // 函数调用
        printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
    }
    return 0;
}

int fun(int n){
    if(n==1||n==0){
        return 1;
    }
    return n * fun(n - 1);
}

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

结果:

image

 

 

任务六:

#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(b<i){
        i = b;
    }
    if(c<i){
        i = c;
    }
    while(i--){
        if(a%i==0&&b%i==0&&c%i==0){
            return i;
        }
    }
}

结果:

image

 

 

任务七:

#include <stdio.h>
#include <stdlib.h>
// 函数声明
// 待补足
int print_charman(int n);
int main()
{
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); // 函数调用
    return 0;
}

int print_charman(int n){
    printf("\n");
    int space_count = 0;
    while(n>0){
        int count =(n-1)*2+1;
        for (int j = 0; j < space_count; j++)
        {
            printf("       ");
        }
        for (int i = 0; i < count;i++){
            printf(" o ");
            printf("    ");
        }
        printf("\n");
        for (int j = 0; j < space_count; j++)
        {
            printf("       ");
        }
        for (int i = 0; i < count;i++){
            printf("<H>");
            printf("    ");
        }
        printf("\n");
        for (int j = 0; j < space_count; j++)
        {
            printf("       ");
        }
        for (int i = 0; i < count;i++){
            printf("I I");
            printf("    ");
        }
        printf("\n");
        n--;
        space_count++;
    }
    return 0;
}

结果:

image

 

image