实验三蕉 C语言函数应用编程蕉

实验三蕉 C语言函数应用编程蕉

可恶,是原始博士!什么时候!?😖😫

额啊,我,我是,呃,香蕉?🤔

对,我是香蕉🍌😃

香🐵香🐵香🐵香🐵香🐵香🐵

🍌蕉🍌蕉🍌蕉🍌蕉🍌蕉🍌蕉

香🐵香🐵香🐵香🐵香🐵香🐵

🍌蕉🍌蕉🍌蕉🍌蕉🍌蕉🍌蕉

🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵

🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵

🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌

🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌

🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌

🍌🍌🐒🐒🐒🐒🐒🐒🐒🐒🐒🍌🍌

🍌🐒🐒🐒🐒🐒🐒🐒🐒🐒🐒🐒🍌

🐒🐒🐒🐒🐒🐒🐒🐒🐒🐒🐒🐒🐒

🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌

🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌🍌

🍌🍌🍌🍌摆满香蕉的小岛🍌🍌🍌🍌

🍌🍌🍌🍌睡蕉小猴的爱巢🍌🍌🍌🍌

🍌🍌🍌🍌吃完香蕉就睡觉🍌🍌🍌🍌

🍌🍌🍌🍌快快乐乐没烦恼🍌🍌🍌🍌

🍌🍌🍌🍌睡蕉小猴真是好🍌🍌🍌🍌

🍌🍌🍌🍌幸福美满没烦恼🍌🍌🍌🍌

🍌摆🍌满🍌香🍌蕉🍌的🍌小🍌岛🍌

🙈睡🙉蕉🐵小🙊猴🙉的🐒爱🐵巢🙊

🍌吃🍌完🍌香🍌蕉🍌就🍌睡🍌觉🍌

🐒快🙉快🐵乐🐵乐🐵没🙉烦🙊恼🐒

🍌睡🍌蕉🍌小🍌猴🍌真🍌是🍌好🍌

🙊幸🐒福🐵美🐵满🐵没🙉烦🐵恼🐒

monkey monkey

monkey monkey

monkey monkey

实验任务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-1


问题1 函数 score_to_grade 的功能是什么?形参类型、返回值类型是什么?

根据分数划定等级。90~100分A级,80~90分B级,70~80分C级,60~70分D级,60分以下E级。
形式参数score类型为int
返回值类型为char

问题2 如果line21-28以下形式,有问题吗?如果有,指出有哪些问题?

switch(score/10) {
case 10:
case 9: ans = "A";
case 8: ans = "B";
case 7: ans = "C";
case 6: ans = "D";
default: ans = 'E';
}

没有加入break语句,执行case语句后会继续往下执行。

实验任务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-1


问题1 函数 sum_digits 的功能是什么?

计算各位数字的和。

问题2 如果保持 main 代码和函数 sum_digits 声明不变,把函数 sum_digits 定义成如下实现方式,能实现同等的效果吗?如果不能实现同等效果,分析原因。如果能实现同等效果,说明两种实现方式背后的算法思维区别。

int sum_digits(int n) {
if(n < 10)
    return n;
return sum_digits(n/10) + n%10;
}

能实现。原方法为迭代,一直循环直到n0。每次取出n的最后一位加到ans中。
替换方法为递归。若n为个位数,则直接返回n,若n不为个位数,则将n去除最后一位再次调用sum_digits,并加上个位数。

实验任务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-1


问题1 函数 power 的功能是什么?

xn次方。

问题2 函数 power 是递归函数吗?如果是,找出递归模式。写出这个递归模式对应的数学公式模型。

是。
n0时,返回1
n为奇数时,调用power(x,n-1)并乘上x
n为偶数时,调用power(x,n/2)并乘方。
$power(x,n)=\begin{cases} x·power(x,n-1), & n \in {2k + 1 \mid k \in \mathbb{Z}} \power(x,n/2)^2, & n \in {2k \mid k \in \mathbb{Z}} \1, & n=0 \end{cases}$

实验任务4——打印100以内的孪生素数

#include <stdio.h>
#include <math.h>

int is_prime(int n) {
    if (n == 1) {
        return 0;
    }
    if (n == 2 || n == 3) {
        return 1;
    }
    if (n % 2 == 0 || n % 3 == 0) {
        return 0;
    }
    for (int i = 5; i <= sqrt(n); i += 6) {
        if (n % i == 0 || (n % (i + 2) == 0)) {
            return 0;
        }
    }
    return 1;
}

int main() {

    int sum=0;
    for (int i = 1; i <= 98; i++) {
        if (is_prime(i) && is_prime(i + 2)) {
            printf("%d %d\n", i, i + 2);
            sum ++;
        }
    }
    printf("100以内的孪生素数有%d个", sum);
}
4-1


实验任务5——汉诺塔

#include <stdio.h>

t = 1;

void hanoi(int n, char a, char b, char c) {
	if (n == 1) {
		printf("%d:将第%d个盘子从%c移动到%c\n", t, n, a, c);
		t++;
		return;
	}
	else if (n > 1) {
		hanoi(n - 1, a, c, b);
		printf("%d:将第%d个盘子从%c移动到%c\n", t, n, a, c);
		t++;
		hanoi(n - 1, b, a, c);
	}
}



int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		hanoi(n, 'A', 'B', 'C');
		printf("\n一共移动了%d次\n\n", t - 1);
		t = 1;
	}
}
5-1


实验任务6——计算组合数

#include <stdio.h>
int func(int n, int m); // 函数声明
int func2(int n, int m);

int main() {
	int n, m;
	int ans;
	while (scanf("%d%d", &n, &m) != EOF) {
		ans = func2(n, m); // 函数调用
		printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
	}
	return 0;
}
// 函数定义
// 待补足。。。(分别用迭代和递归实现)

int func(int n, int m) {
	int ans = 1;
	for (int i = n; i >= (n - m + 1); i--) {
		ans *= i;
	}
	for (int i = m; i >= 1; i--) {
		ans /= i;
	}
	return ans;
}

int func2(int n, int m) {
	if (n == 0 && m != 0) {
		return 0;
	}
	if (m == 0) {
		return 1;
	}
	else {
		return func2(n - 1, m) + func2(n - 1, m - 1);
	}

}
6-1 6-2


实验任务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) {
	for (int i = 1; i <= n; i++) {
		for (int i2 = 1; i2 <= i - 1; i2++) {
			printf("\t");
		}
		for (int i2 = 1; i2 <= ((2 * n - 1) - 2 * (i - 1)); i2++) {
			printf(" O \t");
		}
		for (int i2 = 1; i2 <= i - 1; i2++) {
			printf("\t");
		}
		printf("\n");

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

		for (int i2 = 1; i2 <= i - 1; i2++) {
			printf("\t");
		}
		for (int i2 = 1; i2 <= ((2 * n - 1) - 2 * (i - 1)); i2++) {
			printf("I I\t");
		}
		for (int i2 = 1; i2 <= i - 1; i2++) {
			printf("\t");
		}
		printf("\n");
	}
}
7-1 7-2


1 2
posted @ 2024-10-23 23:24  氧化铜の人  阅读(97)  评论(3编辑  收藏  举报