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

QQ拼音截图20251024085056

问题1:

函数score_to_grade的功能是根据成绩判断等级,90分及以上是A,80分及以上是B,70分及以上是C,60分及以上是D,60分以下是E;

形参类型是整型,返回值类型是字符型。

问题2:

1)ans赋值类型应该是字符型(单引号),而不是字符串型(双引号);

2)case分支缺少break,会继续执行下一行代码,此时无论输入多大的数字,ans都会赋值为‘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;
    }

QQ拼音截图20251024093758

问题1:

 函数sum_digits的功能是把n中的每一位数加起来;

问题2:
能实现同样的输出,第一种实现方式的算法思维是迭代思维,第二种实现方式的算法思维是递归思维。

 

实验任务3:

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

屏幕截图 2025-10-24 152032

问题1:

函数power的功能是计算 x 的 n 次幂,n = 0时,直接返回 1;当 n 为奇数时,通过递归先计算 x 的n - 1次幂,然后再乘以 x;

当 n 为偶数时,通过递归计算 x 的n/2次幂,然后将结果平方。

问题2:

屏幕截图 2025-10-24 153635

实验任务4:

#include<stdio.h>

int is_prime(int n);

int main() {

    int n,count=0;
    printf("100以内的孪生素数:\n");

    for (n = 2; n <= 98; ++n) {
        if (is_prime(n) && is_prime(n + 2)) {
            printf("%d %d\n", n, n + 2);
            count++;
        }

    }
    printf("100以内的孪生素数共有%d个", count);

    return 0;
}

int is_prime(int n) {

    if (n < 2) 
        return 0;

    for (int i = 2; i< n; i++) {

        if (n % i == 0)
            return 0;
    }
    return 1;

}

屏幕截图 2025-10-24 163510

实验任务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) {

    int i,j;
    int up = 1;
    int down = 1;

    if (n < m)
        return 0;

    for (i = n; i >= n - m + 1; i--) {
        up *= i;
    }

    for (j = m; j >= 1; j--) {
        down *= j;
    }

    return up / down;
}

屏幕截图 2025-10-24 165212

递归

#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 ans;
    if (n < m)
        return 0;
    if (m==0)
        return 1;

    ans = func(n - 1, m) + func(n - 1, m - 1);

    return ans;
    
}

屏幕截图 2025-10-24 170700

实验任务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 i,min = a;

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

屏幕截图 2025-10-24 173427

实验任务7:

#include <stdio.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) {

    int i, j,space;

    for (i = n; i >= 1; i--){

        for (space = 1; space <= n - i; space++)
            printf("\t");
        for (j = 1; j <= 2 * i - 1; j++)
            printf(" O \t");
        printf("\n");
        
        
        for (space = 1; space <= n - i; space++)
            printf("\t");
        for (j = 1; j <= 2 * i - 1; j++)
            printf("<H>\t");
        printf("\n");
        
        
        for (space = 1; space <= n - i; space++)
            printf("\t");
        for (j = 1; j <= 2 * i - 1; j++)
            printf("I I\t");
        printf("\n");
    }

}

屏幕截图 2025-10-24 183205

屏幕截图 2025-10-24 183215

 

posted on 2025-10-24 18:33  夏夏夏x  阅读(5)  评论(0)    收藏  举报