实验任务3

任务一

点击查看代码
#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;
}

屏幕截图 2025-10-30 181038

问题1,用于根据分数的大小划分等级,整形,字符型
问题2,缺少break,输出结果后不会立刻结束,而是继续输出后面的结果。
字符常量应该用单引号。
任务二

点击查看代码
#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;
}

屏幕截图 2025-10-30 182340

问题1,用于求一个数各个位上数字的和
问题2,能,第一种是迭代,循环执行,直到n==0,那么此时n<10。
第二种是递归,,使函数自身嵌套函数使用,达到对各个位数字累加的效果。
任务三

点击查看代码
#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-30 182729
问题1, 求x的n次方
问题2,
IMG_20251030_183430
任务4

点击查看代码
#include<stdio.h>
int main()
{
    int sum, L;
    printf("100以内的孪生素数:\n");
    for (sum = 0, L = 2; L < 100; L++)
    {
        if (is_prime(L) == 1 && is_prime(L + 2) == 1)
        {
            printf("%d %d\n", L, L + 2);
            sum++;
        }
    }

    printf("100以内的孪生素数共有%d个",sum);
	return 0;
}
int is_prime(int n)
{
    int i, N;
    for (i = 1, N = 0; i <= n; i++)
    {
       if( n% i == 0)
        N++;          
    }

    if(N==2)
        return 1;
    else
		return 0;
}


屏幕截图 2025-10-30 190510
任务5
迭代法

点击查看代码
#include <stdio.h>

int func(int n, int m);   // 函数声明

int main() {
    int n, m;
    int ans;

    while (scanf_s("%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 q = 1, Q = 1, N = 0;
    if (m != 0&&n>=m)
    {
    do
    {
        q *= n;
        n--;
        N++;
    } while (N != m );
    for (; m >= 1;)
    {
        Q *= m;
        m--;
    }
    return q / Q;
   }
    else if(m>n)
    return 0;
    else
	return 1;
}

递归法

点击查看代码
#include <stdio.h>
int func(int n, int m);   // 函数声明

int main() {
    int n, m;
    int ans;

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

屏幕截图 2025-10-30 204858
任务6

点击查看代码
#include <stdio.h>

// 函数声明
// 待补足....


int main() {
    int a, b, c;
    int ans;

    while (scanf_s("%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, t;
    if (a > b)
    {
        t = b;
        if (t > c)
            min = c;
        else
            min = b;
    }
    else
        t = a;
    {
        if (t > c)
            min = c;
        else
            min = a;
    }
    for (; min >= 1;)
    {
        if (a % min == 0)
        {
            if (b % min == 0)
            {
                if (c % min == 0)
                {
                    printf("最大公约数为%d", min);
					break;
                }
            }
		}
      min--;  
    }
	return min;
}

屏幕截图 2025-10-30 211930
任务7

点击查看代码
#include <stdio.h>
#include <stdlib.h>

// 函数声明
// 待补足
// xxx
void print_charman(int n);
int main() {
    int n;

    printf("Enter n: ");
    scanf_s("%d", &n);
    print_charman(n); // 函数调用

    return 0;
}
void print_charman(int n) {
    int i, m, row, j;
    for (i = 0; i < n; i++) {

        for (row = 0; row < 3; row++) {
            for (m = 0; m < i; m++) {
                printf("    \t");
            }
            for (j = 0; j < 2 * n - 1 - i * 2; j++) {

                switch (row) {
                case 0:printf(" o\t"); continue;
                case 1:printf("<H>\t"); continue;
                case 2:printf("I I\t"); continue;
                }
                printf("\n");
            }
            printf("\n");
        }
    }
}
// 函数print_charman定义
// 待补足
// xxx

屏幕截图 2025-10-30 214046

屏幕截图 2025-10-30 214054

posted @ 2025-10-30 21:41  高一卜  阅读(9)  评论(1)    收藏  举报