实验3
task1
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 char score_to_grade(int score); // 函数声明 6 7 int main() { 8 int score; 9 char grade; 10 11 while (scanf("%d", &score) != EOF) { 12 grade = score_to_grade(score); // 函数调用 13 printf("分数: %d, 等级: %c\n\n", score, grade); 14 } 15 16 return 0; 17 } 18 19 // 函数定义 20 char score_to_grade(int score) { 21 char ans; 22 23 switch (score / 10) { 24 case 10: 25 case 9: ans = 'A'; break; 26 case 8: ans = 'B'; break; 27 case 7: ans = 'C'; break; 28 case 6: ans = 'D'; break; 29 default: ans = 'E'; 30 } 31 32 return ans; 33 }

问题1
功能:把数值分数映射为等级字母(A/B/C/D/E)。
形参类型:int score。
返回值类型:char(返回单个字符,例如 'A')。
问题2
1. 类型错误:ans 是 char,但使用了字符串字面量 "A"/"B",不能赋给 char。应使用字符字面量 'A'。
2. 缺少 break:会发生 case 穿透,导致多个分支继续执行并最终覆盖 ans,逻辑错误。
3. 一致性问题:default 用的是单引号 'E',而其他分支用了双引号,类型不一致。
task2
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int sum_digits(int n); // 函数声明 6 7 int main() { 8 int n; 9 int ans; 10 11 while (printf("Enter n: "), scanf("%d", &n) != EOF) { 12 ans = sum_digits(n); // 函数调用 13 printf("n = %d, ans = %d\n\n", n, ans); 14 } 15 16 return 0; 17 } 18 19 // 函数定义 20 int sum_digits(int n) { 21 int ans = 0; 22 23 while (n != 0) { 24 ans += n % 10; 25 n /= 10; 26 } 27 28 return ans; 29 }

问题1
功能:计算整数各位数字之和。
问题2
能实现相同输出。改后为递归实现,原来为迭代实现。
task3
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int sum_digits(int n); // 函数声明 6 7 int power(int x, int n); // 函数声明 8 9 int main() { 10 int x, n; 11 int ans; 12 13 while (printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 14 ans = power(x, n); // 函数调用 15 printf("n = %d, ans = %d\n\n", n, ans); 16 } 17 18 return 0; 19 } 20 21 // 函数定义 22 int power(int x, int n) { 23 int t; 24 25 if (n == 0) 26 return 1; 27 else if (n % 2) 28 return x * power(x, n - 1); 29 else { 30 t = power(x, n / 2); 31 return t * t; 32 } 33 }

问题1
功能:函数 power(int x, int n) 计算整数 x 的 n 次幂。
问题2
是递归函数。对应的递归模式(数学形式)为:
若 n = 0,power(x,n) = 1。
若 n 为奇数,power(x,n) = x * power(x, n-1)。
若 n 为偶数,power(x,n) = (power(x, n/2))^2。
task4
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int is_prime(int n) { 6 if (n <= 1) return 0; 7 if (n == 2) return 1; 8 if (n % 2 == 0) return 0; 9 for (int i = 3; i * i <= n; i += 2) { 10 if (n % i == 0) return 0; 11 } 12 return 1; 13 } 14 15 int main() { 16 printf("100以内的孪生素数:\n"); 17 int count = 0; 18 for (int i = 2; i <= 98; i++) { 19 if (is_prime(i) && is_prime(i + 2)) { 20 printf("%d %d\n", i, i + 2); 21 count++; 22 } 23 } 24 printf("100以内的孪生素数共有%d个\n", count); 25 return 0; 26 }

task5
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 int func(int n, int m); // 函数声明 5 6 int main() { 7 int n, m; 8 int ans; 9 10 while (scanf("%d%d", &n, &m) != EOF) { 11 ans = func(n, m); // 函数调用 12 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 13 } 14 15 return 0; 16 } 17 18 int func(int n, int m) { 19 if(m>n) 20 return 0; 21 if (m == 0 || n == m) 22 return 1; 23 double ans = 1.0; 24 int j = m; 25 for (int i = 1; i <= j; i++) { 26 ans = ans * n / m; 27 n--; 28 m--; 29 } 30 return ans; 31 32 }
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 int func(int n, int m); // 函数声明 5 6 int main() { 7 int n, m; 8 int ans; 9 10 while (scanf("%d%d", &n, &m) != EOF) { 11 ans = func(n, m); // 函数调用 12 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 13 } 14 15 return 0; 16 } 17 18 int func(int n, int m) { 19 if(m>n) 20 return 0; 21 if (m == 0 || n == m) 22 return 1; 23 return func(n - 1, m - 1) + func(n - 1, m); 24 25 26 }

task6
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int gcd(int a, int b,int c); 6 7 int main() { 8 int a, b, c; 9 int ans; 10 11 while (scanf("%d%d%d", &a, &b, &c) != EOF) { 12 ans = gcd(a, b, c); // 函数调用 13 printf("最大公约数: %d\n\n", ans); 14 } 15 16 return 0; 17 } 18 19 int gcd(int a, int b,int c) { 20 21 int min1= a < b? a : b ; 22 int i= min1 < c ? min1 : c; 23 for (int j = i; i >=1; j--) { 24 if (a % j == 0 && b % j == 0 && c % j == 0) 25 return j; 26 27 } 28 }

task7
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 void print_charman(int n); 6 void ans1(int m, int indent); 7 8 int main() { 9 int n; 10 11 printf("Enter n: "); 12 scanf("%d", &n); 13 print_charman(n); // 函数调用 14 15 return 0; 16 } 17 18 void print_charman(int n) { 19 20 for (int i = 0; i < n; i++) { 21 int m = 2 * (n - i) - 1; 22 int indent = i; 23 ans1(m, indent); 24 printf("\n"); 25 } 26 } 27 28 void ans1(int m, int indent) { 29 int i, k; 30 for (k = 0; k < indent; k++) printf("\t"); 31 for (i = 0; i < m; i++) { 32 printf(" O \t"); 33 34 } 35 printf("\n"); 36 37 for (k = 0; k < indent; k++) printf("\t"); 38 for (i = 0; i < m; i++) { 39 printf("<H>\t"); 40 41 } 42 printf("\n"); 43 44 for (k = 0; k < indent; k++) printf("\t"); 45 for (i = 0; i < m; i++) { 46 printf("I I\t"); 47 48 } 49 printf("\n"); 50 }


浙公网安备 33010602011771号