实验三

task1

源代码

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

task1

问题回答

问题1:

  • 函数score_to_garde功能:根据分数整除10后的结果,判断成绩的等第;
  • 形参类型:整型int;
  • 返回值类型:字符型char

问题2:

  • 没有break,情况符合时,执行完程序,并不会跳出switch,而继续执行,导致ans的值一直为“E”
  • “A”等为字符串,而ans为字符型,不能进行赋值

task2

源代码

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

task2

问题回答

问题1:

  • 函数sum_digits功能:计算整数各个位上的数字的和

问题2:

能

  • 方案一:迭代,一次次求出余数,再累加
  • 方案二:递归,函数不断递归调用自己,直到递归出口

task3

源代码

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

task3

问题回答

问题1:

  • 函数power功能:计算整数x的n次方

问题2:

  • 是

task3_1

问题3:

  • ①:正确,因为先算出power(x,n/2),再平方,与直接调用两次power(x,n/2)结果一样
  • ②:从性能角度分析,方案一更好。方案一,子问题只调用一次,power(3,16)调用5次。方案二:子问题重复调用,power(3,16)调用31次

task4

源代码

点击查看代码
#include <stdio.h>
int classify_triangle(int a,int b,int c);
int main(){
	int a,b,c,t;
	while(scanf("%d%d%d",&a,&b,&c)!=EOF){

		t = classify_triangle(a,b,c);
		switch(t){
			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;
}
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||b*b==a*a+c*c||c*c==a*a+b*b){
			return 4;
		}
		else if(a==b&&b==c){
			return 2;
		}
		else if(a==b||b==c||a==c){
			return 3;
		}
		else{
			return 1;
		}
	}
	else{
		return 0;
	}
	
}
###运行截图

task4

task5

task5_1

源代码

点击查看代码
#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 t=1,i,j;
	for(i=1;i<=m;++i){
		t = t*n;
		n -= 1;
	}
	for(i=1;i<=m;++i){
		t = t / i;
	} 
	return t;
}
####运行截图

task5_2

task5_2

源代码

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

task5

task6

源代码

点击查看代码
#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 = a,j;
	if(a>b){
		i = b;
	}
	if(i>c)
		i = c;
	for(j=i;j>=1;--j){
		if(a%j==0&&b%j==0&&c%j==0){
			return j;
		}
	}
}
###运行截图

task6

task7

源代码

点击查看代码
#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,t,j,k;
	for(i=n;i>=1;--i){
		t = 2*i - 1;
		for(k=1;k<=(n-i);++k){
			printf("\t");
		}
		for(j=1;j<=t;++j){
			printf(" o\t");
		}
		printf("\n");
		for(k=1;k<=(n-i);++k){
			printf("\t");
		}
		for(j=1;j<=t;++j){
			printf("<H>\t");
		}
		printf("\n");
		for(k=1;k<=(n-i);++k){
			printf("\t");
		}
		for(j=1;j<=t;++j){
			printf("I I\t");
		}
		printf("\n\n");

		
	}
}
###运行截图

task7_1

task7_2

posted @ 2026-11-13 15:16  潘紫宸  阅读(6)  评论(0)    收藏  举报