实验3

任务一

  • 源代码
#include <stdio.h>

char score_to_grade(int score);

int main() {
    int score;
    char grade;

    while (scanf_s("%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;
}

  • 结果截图
    image

问题1
将分数转换为对应的等级
问题2
使用了双引号,ans是char类型变量,无法接收,应改为单引号;casw分支缺少“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;
}
  • 结果截图
    image

问题1
计算n的各位数字之和
问题2
输入非负数时可以实现相同输出
方法1用到了迭代,方法2用到了递归

任务三

  • 源代码
#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;
    }
}
  • 结果截图
    image

问题1
计算x的n次方
问题2
6745c09ccd6577144b4f1a93ed2112ac

任务四

  • 源代码
#include<stdio.h>

int classify_triangle(int a, int b, int c);

int main()
{
	int a, b, c;
	while (scanf_s("%d%d%d", &a, &b, &c) != EOF)
	switch (classify_triangle(a, b, c)) {
	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;
	}
	
	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 || a == c || b == 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;
}
  • 结果截图
    image

任务五

  • 源代码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)
{
	int N = n, M = m, a = 1, b = 1, c = 1, d = n - m;

	for (int i = 0;i < n;i++)
	{
		a = a * N;
		N--;
	}
	for (int i = 0;i < m;i++)
	{
		b = b * M;
		M--;
	}
	for (int i = 0;i < n-m;i++)
	{
		c = c * d;
		d--;
	}
	return a / (b * c);
}
  • 结果截图
    image

  • 源代码2

#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 N = n, M = m;
	if (n == M || m == 0)
		return 1;
	else
	return func(n - 1, m) + func(n - 1, m - 1);
}
  • 结果截图
    image

任务六

  • 源代码
#include<stdio.h>
int gcd(int a, int b, int c);

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", ans);
	}
	return 0;

}

int gcd(int a, int b, int c)
{
	int min;
	if (a < b)
		min = a;
	else
		min = b;
	if (min > c)
		min = c;
	for (int i = min+1;i > 0;i --)
	{
		if (a % i == 0 && b % i == 0 && c % i == 0)
			return i;
	}


}
  • 结果截图
    image

任务七

  • 源代码
#include<stdio.h>
#include<stdlib.h>
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 count = 0;

	for (n;n > 0;n--)
	{
		for (int i = count;i > 0;i--)
		{
			printf("       ");
		}
		printf(" 0 ");
		for (int i = 0;i < 2 * (n - 1);i++)
		{
			printf("     0 ");
		}

		printf("\n");

		for (int i = count;i > 0;i--)
		{
			printf("       ");
		}
		printf("<H>");
		for (int i = 0;i < 2 * (n - 1);i++)
		{
			printf("    <H>");
		}

		printf("\n");

		for (int i = count;i > 0;i--)
		{
			printf("       ");
		}
		printf("I I");
		for (int i = 0;i < 2 * (n - 1);i++)
		{
			printf("    I I");
		}
		printf("\n\n");

		count++;
	}

}
  • 结果截图
    image
posted @ 2026-04-17 17:26  草莓铣礼  阅读(9)  评论(0)    收藏  举报