实验3

实验三

实验任务1

  • task1.c源代码及运行截图

#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:

①功能是传入参数并输出相对应的等级
②形参类型为整数形,返回值是字符类型

  • 问题2:

①返回值为char,此处双引号是字符串类型,会导致返回类型错误
②每个case没有break,会导致穿透,当满足一个条件后下面的条件也会一直执行到break(实际并没有)结束

实验任务2

  • 回答问题:

  • 问题1:

功能是将输入数字的所有位加起来求和

  • 问题2:

①能实现
②第一种是迭代思想,第二种是递归思想

实验任务3

  • 问题1:

功能是实现一个数的n次方计算

  • 问题2:

①是递归
②

\[power(x, n) = \begin{cases} 1, & n = 0 \quad \\ x \cdot power(x, n - 1), & n \text{ 为奇数} \\ [power(x, n/2)]^2, & n \text{ 为偶数} \end{cases} \]

  • 问题3::

①正确,此处仅把t还原为表达式
②修改后的性能不如修改前,原来的写法是把值赋予到t中再求t的平方,仅计算了一次,修改后的写法要把每个值都重复计算一遍,每一步比之前步数都多
例如:
原写法power(3,16)调用1次→power(3,8)调用一次→power(3,4)调用一次→power(3,2)调用一次→power(3,1)调用一次→power(3,0),一共调用6次
新写法power(3,16)调用1次产生俩个power(3,8),然后每个power(3,8)又产生俩个power(3,4),以此类推最后调用了1+2+4+8+16+16=47次

实验任务4

  • task4.c源代码及运行截图
#include <stdio.h>
int classify_triangle(int a, int b, int c);
int main() {
    int a, b, c;
    while (scanf("%d %d %d", &a, &b, &c) != EOF) {
        int result = classify_triangle(a, b, c);
        switch (result) {
            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;
}

task4

实验任务5

  • task5.c迭代方式源代码及截图

#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(m==0||n==m){
		return 1;
	}
	int i,a=1,b=1,c=1;
	for(i=1;i<=n;i++){
		a=a*i;
	} 
	for(i=1;i<=m;i++){
		b=b*i;
	}
	for(i=1;i<=(n-m);i++){
		c=c*i;
	}
	return a/(b*c);
}

task51

  • task5.c递归方式源代码及截图

#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(m==0||m==n){
		return 1;
	}
	return func(n-1,m)+func(n-1,m-1);
}

task52

实验任务6

  • task6.c源代码及截图

#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 test[] = {a,b,c};
	int min=a,i;
	for(i=0;i<3;i++){
		if(test[i]<min){
			min = test[i];
		}
	}
	for(i=min;i>0;i--){
		if(a%i==0&&b%i==0&&c%i==0){
			return i;
		}
	} 
	return 1;
}

6c

实验任务7

  • task7.c源代码及截图

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

int print_charman(int n);
int none(int n);
int main() {
    int n;

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


int print_charman(int n){
	int i,j,m;
	m=n;
	for(j=1;j<=n;j++){
		none(j);
		for(i=2*m-1;i>0;i--){
			printf(" O\t");
		}
		printf("\n");
		none(j);
		for(i=2*m-1;i>0;i--){
			printf("<H>\t");
		}
		printf("\n");
		none(j);
		for(i=2*m-1;i>0;i--){
			printf("I I\t");
		}
		printf("\n");
		m--;
	}
}
int none(int n){
	int i;
	for(i=0;i<n-1;i++){
		printf("\t");
	}
}

123456

实验总结

通过测试和编写程序,我意识到了函数在程序中的作用,让代码可读性更强,让代码修复起来更加的容易

posted @ 2026-11-13 23:14  GrolonBilox  阅读(4)  评论(0)    收藏  举报