实验3

任务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;
}

运行结果:

屏幕截图 2025-10-24 080304

问题1:功能是把分数转换成等级.形参类型是字符型(char),返回类型是整形(int).
问题2:

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

存在的问题:1.使用双引号表示的是字符串而非字符型变量
2.每条语句后没有加break,会导致程序继续向下执行,继续输出其他结果

任务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;
}

运行结果:

屏幕截图 2025-10-24 081927

问题1:作用是计算一个数的各个数位上的数字之和
问题2:能.原函数基于的思想是递推,修改后的是递推(重复调用自身,直到找到出口)

任务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;
	}
}

运行结果:

屏幕截图 2025-10-24 082757

问题1:功能是计算x的n次方
问题2:是.

IMG_20251024_084529

任务4

#include <stdio.h>
int is_prime(int n) {
	if (n < 2) {
		return 0;
	}
	else {
		for (int i = 2;i < n;i++) {
			if (n % i == 0) {
				return 0;
			}
		}
		return 1;
	}
}
int main() {
	printf("100以内的孪生素数:\n");
	int cnt = 0;
	for (int i = 2;i < 100 ;i++) {
		if (is_prime(i) && is_prime(i + 2)) {
			printf("%d,%d\n", i, i + 2);
			cnt++;
		}
	}
	printf("共有%d对孪生素数\n", cnt);
	return 0;
}

运行结果:
屏幕截图 2025-10-24 090749

任务5

递归实现:

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

}

运行结果:

屏幕截图 2025-10-24 093311

迭代实现:

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

运行结果:

屏幕截图 2025-10-24 225825

任务6

#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 gcd1(int a, int b) {
	while (b != 0) {
		int temp = b;
		b = a % b;
		a = temp;
	}
	return a;
}
int gcd(int a, int b, int c) {
	int d = gcd1(a, b);
	return gcd1(d, c);
}

运行结果:

屏幕截图 2025-10-24 230735

任务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) {
	n++;
	int cnt=0;
	while (n--) {

		for (int i = 0;i < 2 * n - 1;i++) {
			for (int j = 0;j < cnt&&i==0;j++) {
				printf("\t");
			}
			printf(" 0 \t");
		}
		printf("\n");
		for (int i = 0;i < 2 * n - 1;i++) {
			for (int j = 0;j < cnt&&i==0;j++) {
				printf("\t");
			}
			printf("<H>\t");
		}
		printf("\n");
		for (int i = 0;i < 2 * n - 1;i++) {
			for (int j = 0;j < cnt&&i==0;j++) {
				printf("\t");
			}
			printf("I I\t");
		}
		printf("\n\n");
		cnt++;
	}
}

运行结果:

屏幕截图 2025-10-24 235301

屏幕截图 2025-10-24 235321

posted @ 2025-10-24 23:52  glassheart06  阅读(2)  评论(0)    收藏  举报