实验3

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

运行结果屏幕截图 2026-04-19 135012

问题1

功能:根据分数给出对应的等级字符

形参类型:int  返回值类型:char

问题2

没有break,程序一直进行,返回值只会是E

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

运行结果屏幕截图 2026-04-19 174836

问题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;
    }
}

运行结果屏幕截图 2026-04-19 180540

问题1

计算并返回x的n次方

问题2

是,qq_pic_merged_1776593908754

任务4

源代码

#include<stdio.h>
int classify_triangle(int a,int b,int c);
int main(){
    int a,b,c;
    printf("请输入三角形三边(整数),输入Ctrl+D或-1-1-1结束:\n");
    while(scanf("%d%d%d",&a,&b,&c)==3){
        if(a==-1&&b==-1&&c==-1)break;
        int result=classify_triangle(a,b,c);
        switch(result){
             case 0: printf("不能构成三角形\n"); break;
            case 1: printf("普通三角形\n"); break;
            case 2: printf("等边三角形\n"); break;
            case 3: printf("等腰三角形\n"); break;
            case 4: printf("直角三角形\n"); break;
            default: printf("未知类型\n");
        }
        
    }
    return 0;}
    int classify_triangle(int a, int b, int c) {
    if (a + b <= c || a + c <= b || b + c <= a) {
        return 0;
    }

    if (a == b && b == c) {
        return 2;
    }
    if (a == b || b == c || a == c) {
        return 3;
    }
    if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) {
        return 4;
    }
    return 1;
}

运行结果屏幕截图 2026-04-19 184642

任务5

源代码

#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 func(int n,int m){
        if(m>n)
        return 0;
        if(m==0||m==n)
        return 1;
        int t=m<(n-m)?m:(n/m);
        int result=1;
        for(int i=1;i<=t;i++){
            result=result*(n-t+i)/i;
        }
        return result;
    }

运行结果屏幕截图 2026-04-21 200816

源代码

#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 func(int n,int m){
        if(m==0||m==n)
        return 1;
        if (m>n)
        return 0;
        else
        return func(n-1,m)+func(n-1,m-1);
        }

运行结果屏幕截图 2026-04-21 201550

任务6

源代码

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

运行结果屏幕截图 2026-04-21 202824

任务7

源代码

#include<stdio.h>
#include<stdlib.h>
void print_charman(int n);
int main(){
    int n;
    printf("Enter n:");
    scanf("%d",&n);
    print_charman(n);
    return 0;
}
void print_charman(int n){
    for(int i=0;i<n;i++){
        int blocks=2*(n-i)-1;
        for(int j=0;j<blocks;j++){
            if(j==i-1)
            printf(" O");
            else
            printf(" O ");
        }
        printf("\n");
        for(int j=0;j<blocks;j++){
            if(j==i-1)
            printf("<H>");
            else
            printf("<H> ");
        }
        printf("\n");
        for(int j=0;j<blocks;j++){
            if(j==i-1)
            printf("I I");
            else
            printf("I I ");
    }
    printf("\n");
    if(i<n-1)
    printf("\n");
        
    }
}

 

posted @ 2026-04-21 21:02  FineLe  阅读(8)  评论(0)    收藏  举报