实验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;
}
运行截图

屏幕截图 2026-11-13 140855


回答问题
1.功能:接收一个整数分数,把分数转换成对应的等级字符(A/B/C/D/E
  形参类型:int(int score)
  返回值类型:char
2.引号错误,类型不匹配;缺少 break 语句,case 穿透

任务二

运行代码
#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;
}
运行截图

屏幕截图 2026-11-13 142023

回答问题
1.函数 sum_digits 的功能:计算一个整数 n 的各位数字之和
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;
    }
}
运行截图

屏幕截图 2026-11-13 142827

回答问题
1.power 函数功能:用快速幂递归算法,计算整数 x 的 n 次幂(n≥0)
2.是递归函数
3.① 逻辑正确,因为数学等价,最终结果一致
  ② 性能变差。原代码只计算一次 power(x,n/2),复用结果,无重复子问题;修改后左右两边都单独调用,同一个子问题重复计算

微信图片_20261113144227_8_2

任务四

运行代码
#include <stdio.h>
int classify_triangle(int a, int b, int c){
	if(a + b > c && a + c > b && b + c > a){
		if(a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
			return 4;
		else if(a == b && b == c)
			return 3;
		else if(a == b || b == c || a == c)
			return 2;
		else
			return 1;
	}
	else
		return 0;
}
int main()
{
	int a, b, c;
	for(; scanf("%d%d%d", &a, &b, &c) != EOF;){
		
		int n = classify_triangle(a, b, c);
		switch(n){
			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: return 0;
		}
		
	}
	
	return 0;
}
运行截图

屏幕截图 2026-11-13 205451

任务五

迭代运行代码
#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 0;
	if(m == 0 || m == n)
		return 1;
	if(m > n - m)
		m = n - m;
	int res = 1;
	int i;
	for( i = 1; i <= m; i++)
	{
		res = res * (n - m + i) / i;
	}
	return res;
}
迭代运行截图

屏幕截图 2026-11-13 194320

递归运行代码
#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 0;
	if(m == 0 || m == n)
		return 1;
	return func(n - 1, m) + func(n - 1, m - 1);
}
递归运行截图

屏幕截图 2026-11-13 195041

任务六

运行代码
#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;
	int min;
	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;
	}
	return 1;
}
运行截图

屏幕截图 2026-11-13 203144

任务七

运行代码
#include <stdio.h>
#include <stdlib.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, k;
    for(i = 0; i < n; i++)
    {
        int cnt = 2*(n - i) - 1;
       
        for(k = 0; k < i; k++)
            printf("\t");
        for(j = 0; j < cnt; j++)
            printf(" 0\t");
        printf("\n");

        
        for(k = 0; k < i; k++)
            printf("\t");
        for(j = 0; j < cnt; j++)
            printf("<H>\t");
        printf("\n");

       
        for(k = 0; k < i; k++)
            printf("\t");
        for(j = 0; j < cnt; j++)
            printf("I I\t");
        printf("\n");
    }
}
运行截图

屏幕截图 2026-11-13 220536

屏幕截图 2026-11-13 220548

posted @ 2026-11-13 22:09  郝昱哲  阅读(5)  评论(0)    收藏  举报