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

任务一

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

 

 功能是根据满分为100的分数,按60分以下,60分,70分,80分,90分以上分别转为等级制EDCBA

有问题,分支后面没有break会导致switch程序段继续执行后面的分支

任务二

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

 

 计算输入数字的各数位数字之和

可以实现。前面是通过程序循环结构来实现,这里是通过递归的方式实现

实验三

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

 

 功能是根据输入的x,n计算x的n次方

是递归函数

任务四

#include <stdio.h>
int is_prime(int n){
    for(int i=2;i<n/2;i++){
        if(n%i==0) return 0;
    }
    return 1;
}
int main(){
    for(int i=3;i<99;i++){
        if(is_prime(i)&&is_prime(i+2)){
            printf("%d %d\n",i,i+2);
        }
    }
    return 0;
}

 

 任务五

#include <stdio.h>
void hanoi(int n, char source, char target, char auxiliary, int *moveCount) {
    if (n == 1) {
        printf("移动盘子从 %c 到 %c\n", source, target);
        (*moveCount)++;
    } else {
        hanoi(n - 1, source, auxiliary, target, moveCount);
        printf("移动盘子从 %c 到 %c\n", source, target);
        (*moveCount)++;
        hanoi(n - 1, auxiliary, target, source, moveCount);
    }
}
void printHanoiMoves(int n) {
    int moveCount = 0;
    printf("对于 n = %d 的移动方案:\n", n);
    hanoi(n, 'A', 'C', 'B', &moveCount);
    printf("总移动次数: %d\n\n", moveCount);
}

int main() {
    int n;
    while (1) {
        printf("请输入盘子的数量 n(输入 -1 结束):");
        scanf("%d", &n);
        if (n == -1) break;
        if (n < 1) {
            printf("请输入一个正整数。\n\n");
            continue;
        }
        printHanoiMoves(n);
    }
    return 0;
}

 

 

任务六

这里是非递归方式

#include <stdio.h>
int fac(int n){
    if(n==0) return 1;
    else return n*fac(n-1);
}
int func(int n, int m){
    if(n<m) return 0;
    else return fac(n)/fac(m)/fac(n-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;
} 

 

 这里是递归方式

#include <stdio.h>
int func(int n, int m){
    if(n<m) return 0;
    else if(m==0) return 1;
    else return func(n-1,m)+func(n-1,m-1);
}

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

 任务七

 

#include <stdio.h>
#include <stdlib.h>
void print_charman(int n){
    int num=0;
    for(int i=2*n-1;i>0;i-=2){
        printf("%*s",num,"");
        for(int j=0;j<i;j++){
            printf(" o    ");
        }
        printf("\n");
        printf("%*s",num,"");
        for(int j=0;j<i;j++){
            printf("<H>   ");
        }
        printf("\n");
        printf("%*s",num,"");
        for(int j=0;j<i;j++){
            printf("I I   ");
        }
        printf("\n");
        num+=6;
    }
    
}

int main() {
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); // 函数调用 
    return 0;
}

 

 

 

posted @ 2024-10-22 21:51  王响  阅读(36)  评论(0编辑  收藏  举报