实验报告
实验任务一
功能:实现分数到等级的转换 问题解答:
- 函数
score_to_grade的作用是将输入的分数转换为对应的等级(A/B/C/D/E)。
- 输入参数类型:
int - 返回值类型:
char
- 编译错误:
- 类型不匹配:
ans声明为char类型,但需要修改为const char类型以解决类型冲突。 - 缺少
break语句:导致在score/10为 10 或 9 时,程序会继续执行后续case分支的赋值操作。
实验任务二
功能:计算整数各位数字之和 实现方式:
- 迭代方法:通过循环逐位提取数字并累加。
- 递归方法:通过函数自身调用分解问题,逐步计算各位数字之和。
实验任务三
功能:计算整数的幂次 代码实现:
int power(int x, int n) {
if (n == 0) return 1;
return x * power(x, n - 1);
}
实验任务四
功能:查找100以内的孪生素数 代码实现:
#include <stdio.h>
#include <math.h>
int is_prime(int n) {
if (n <= 1) return 0;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return 0;
}
return 1;
}
int main() {
int count = 0;
printf("100以内的孪生素数:\n");
for (int i = 3; i + 2 <= 100; i++) {
if (is_prime(i) && is_prime(i + 2)) {
printf("%d %d\n", i, i + 2);
count++;
}
}
printf("总数:%d\n", count);
return 0;
}
实验任务五
功能:汉诺塔问题求解 代码实现:
#include <stdio.h>
void move_plate(unsigned int n, char from, char to) {
printf("%u: %c --> %c\n", n, from, to);
}
int hanoi(unsigned int n, char from, char temp, char to) {
int count = 0;
if (n == 1) {
move_plate(n, from, to);
count++;
} else {
count += hanoi(n - 1, from, to, temp);
move_plate(n, from, to);
count++;
count += hanoi(n - 1, temp, from, to);
}
return count;
}
int main() {
unsigned int n;
while (scanf("%u", &n) != EOF) {
int moves = hanoi(n, 'A', 'B', 'C');
printf("移动次数:%d\n", moves);
}
return 0;
}
实验任务六
功能:计算组合数 递归实现:
int func(int n, int m) {
if (m == 0 || m == n) return 1;
return func(n - 1, m) + func(n - 1, m - 1);
}
迭代实现:
int func(int n, int m) {
if (m > n) return 0;
if (m == 0 || m == n) return 1;
int result = 1;
for (int i = 1; i <= m; i++) {
result *= (n - i + 1) / i;
}
return result;
}
实验任务七
功能:计算三个整数的最大公约数 代码实现:
#include <stdio.h>
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int a, b, c, ans;
while (scanf("%d%d%d", &a, &b, &c) != EOF) {
ans = gcd(gcd(a, b), c);
printf("最大公约数:%d\n", ans);
}
return 0;
}