实验3
实验1
源代码
task.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'; break;
}
return ans;
}
实验结果截图

回答问题
问题1:score_to_grade 将传入的整数分数按十分位分档,返回对应的成绩等级字符
问题2:(1)缺少 break;每个 case 都顺序向下执行,所有分支都会一路落到 default,导致 ans 最终被覆盖为 'E'。
(2)ans是char类型,却给它赋值给像"A"一样的字符串 字符串无法直接赋值给char变量 最后default分支把'E'赋值给ans时又变回了char类型 类型混乱
实验2
源代码
task.2
#include <stdio.h>
int sum_digits(int n);
int main() {
int n, 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;
}
实验结果截图

回答问题
问题1:函数sum_digits的功能是计算一个整数的各位数字之和
问题2:对非负整数两种实现输出相同 对负数则不相同这个递归版中 if(n<10) return n; 会直接返回负数
迭代版:用循环逐位剥离0n % 10 取当前最低位,n /= 10 去掉最低位),累加 迭代更新的思路
递归版:把最低位和剩下数字的位和相加 sum(n) = sum(n/10) + n%10,并以 n < 10 为基例结束 是函数自身调用循环
实验3
源代码
task.3
#include <stdio.h>
int power(int x, int n);
int main() {
int x, n, ans;
while (printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
ans = power(x, n);
printf("x = %d, n = %d, ans = %d\n\n", x, 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;
}
}
实验结果截图

回答问题
问题1:power(int x, int n) 计算整数 x 的 n 次幂
问题2:是

实验4
源代码
task.4
#include <stdio.h>
int is_prime(int n);
int main() {
int count = 0;
printf("100以内的孪生素数:\n");
for (int n = 2; n <= 98; n++) {
if (is_prime(n) && is_prime(n + 2)) {
printf("%d %d\n", n, n + 2);
count++;
}
}
printf("100以内的孪生素数共有%d个.\n", count);
return 0;
}
int is_prime(int n) {
if (n <= 1) return 0;
if (n == 2) return 1;
if (n % 2 == 0) return 0;
for (int i = 3; i * i <= n; i += 2)
if (n % i == 0) return 0;
return 1;
}
实验结果截图

实验5
源代码
task.5_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) {
if (m < 0 || m > n)
return 0;
if (m == 0 || m == n)
return 1;
if (m > n - m) m = n - m;
long long res = 1;
for (int i = 1; i <= m; i++) {
res = res * (n - i + 1) / i;
}
return (int)res;
}
task.5_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 < 0 || m > n) return 0;
if (m == 0 || m == n) return 1;
return func(n - 1, m) + func(n - 1, m - 1);
}
实验结果截图

实验6
源代码
task.6
#include <stdio.h>
int gcd_three(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_three(a, b, c);
printf("最大公约数: %d\n\n", ans);
}
return 0;
}
int gcd_three(int a, int b, int c) {
if (a <= 0 || b <= 0 || c <= 0) {
a = a > 0 ? a : -a;
b = b > 0 ? b : -b;
c = c > 0 ? c : -c;
}
int m = a;
if (b < m) m = b;
if (c < m) m = c;
for (int i = m; i >= 1; i--) {
if (a % i == 0 && b % i == 0 && c % i == 0)
return i;
}
return 1;
}
实验结果截图

实验7
源代码
task.7
#include <stdio.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) {
if (n <= 0) return;
for (int row = 1; row <= n; row++) {
int count = 2 * (n - row + 1) - 1;
int indent = row - 1;
for (int t = 0; t < indent; t++) printf("\t");
for (int j = 0; j < count; j++) {
printf(" O ");
if (j != count - 1) printf("\t");
}
printf("\n");
for (int t = 0; t < indent; t++) printf("\t");
for (int j = 0; j < count; j++) {
printf("<H>");
if (j != count - 1) printf("\t");
}
printf("\n");
for (int t = 0; t < indent; t++) printf("\t");
for (int j = 0; j < count; j++) {
printf("I I");
if (j != count - 1) printf("\t");
}
printf("\n\n");
}
}
实验结果截图


浙公网安备 33010602011771号