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

截图

1

回答

  • 通过不同分数得到对应等级,形参类型整型,返回类型字符型
  • 无break中断switch语句,6,7,8,9,10的输入会穿透,最后得到错误的ans

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

截图

2

回答

  • 算n各位数字和
  • 能,改前是迭代改后是递归

任务3

代码

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

截图

3

回答

  • 计算x^n的值
  • 是

习题

  • 能,改后效率更低,改前约6次,改后约63次调用

任务4

代码

#include <stdio.h>
int classify_triangle(int a, int b, int c) {
    if ((a + b - c > 0) && (a + c - b > 0) && (b + c - a > 0))
	{
		if ((a==b) && (b==c)) return 2;
		else if ((a==b) || (b==c) || (a==c)) return 3;
		else if ((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) return 4;
		else return 1;
	}
	else return 0;
}
int main() {
    int a, b, c;
	while (scanf("%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;
		default:
			
			break;
		}
	}
    return 0;
}

截图

任务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) 
{
	if (m > n) return 0;
	return f(n)/f(n-m)/f(m);
}
int f(int n)
{
	int a = 1;
	while (n > 0) 
	{
		a *= n;
		n--;
	}
	return a;
}
#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) 
{
	if ((m == 0) || (m == n)) return 1;
	if (m > n) return 0;
	return func(n - 1, m) + func(n - 1, m - 1);
}

截图

51

52

任务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 min, i;
	if (a > b) min = b > c ? c : b;
	else min = a > c ? c : a;
	for (i = min;i >= 1;i--)
	{
		if (a % i == 0 && b % i == 0 && c % i == 0) return i;
	}
}

截图

6

任务7

代码

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

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

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

	return 0;
}

// 函数print_charman定义
// 待补足
// xxx
void print_charman(int n)
{
	int t = n * 2 - 1;
	int p = 0;
	while (t > 0)
	{
		int i, j;
		for (j = 0; j < p; j++) printf("\t");
		for (i = 0; i < t; i++) printf(" 0 \t");
		printf("\n");
		for (j = 0; j < p; j++) printf("\t");
		for (i = 0; i < t; i++) printf("<H>\t");
		printf("\n");
		for (j = 0; j < p; j++) printf("\t");
		for (i = 0; i < t; i++) printf("I I\t");
		printf("\n");
		t -= 2;
		p++;
	}
}

截图

屏幕截图 2026-11-13 190648

posted @ 2026-11-13 19:09  worthF  阅读(4)  评论(0)    收藏  举报