实验3

实验任务1

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

运行截图

联想截图_20251024085222

问题1:score_to_grade的作用是将分数转化为等级,形参类型为int,返回值类型为char

问题2:缺少终止指令break,导致从匹配的case开始执行直到default结束。case10,case9,case8,case7,case6中ans被赋值为字符串与char类型不一致

实验任务2

 task2.c源代码

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

运行截图

联想截图_20251024091208

问题1:sum_digits的功能是计算数字n各个位上数字的和。

问题2:能输出,原代码为迭代思维,第二种代码为递归思维

实验任务3

task3.c源代码

 

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

运行截图

联想截图_20251024093721

问题1:计算x的n次幂

问题2:函数 power 是递归函数。

IMG_20251025_195117

 实验任务4

task4.c源代码

#include<stdio.h>
int is_prime(int n){
    int i;
    if(n < 2){
        return 0;
    }
    for (i = 2;i * i <= n;i++){
        if(n % i == 0){
            return 0;
        }
    }
    return 1;
}
int main(){
    int cnt = 0;
    int n;
    printf("100以内的孪生素数:\n");
    for( n = 2;n <= 100;n++){
        if(is_prime(n)&&is_prime(n+2)){
        printf("%d %d\n",n,n+2);
        cnt++;}
    } 
    printf("100以内的孪生素数共有%d个",cnt);
    return 0; 
}

运行截图

联想截图_20251025202254

实验任务5

task5.c源代码(迭代)

#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){
    int num = 1,den = 1;
    int i,j;
    int ans;
    if(m == 0 || m == n)
    ans = 1;
    else{
    
        for(j = 0;j < m;j++){
            num *= n;
            n--;
        }
        for(i = 0;i < m;i++){
             den *= m;
            m--;
        }
    ans = num / den;
}    
    return ans;
    
}

运行截图

联想截图_20251026111704

task5.c源代码(递归)

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

运行截图

联想截图_20251026135546

实验任务6

task6.c源代码

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

运行截图

联想截图_20251026142648

实验任务7

task7.c源代码

 

#include <stdio.h>
#include <stdlib.h>

void print_charman(int);

int main() {
    int n;

    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); 

    return 0;
}

void print_charman(int n){
    int i,j,k;
    for(j = n;j > 0;j--)
    {
        for(k = 0;k < n - j;k++)
        printf("\t");
        for(i = 0;i < j * 2 - 1;i++)
        printf(" O \t");
        printf("\n");
        
        for(k = 0;k < n - j;k++)
        printf("\t");
        for(i = 0;i < j * 2 - 1;i++)
        printf("<H>\t");
        printf("\n");
        
        for(k = 0;k < n - j;k++)
        printf("\t");
        for(i = 0;i < j * 2 - 1;i++)
        printf("I I\t");
        printf("\n");
    }
}

运行截图

联想截图_20251026160057

 

posted @ 2025-10-26 16:03  lidayu12  阅读(7)  评论(1)    收藏  举报