实验三
任务一
#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; }

问题一:功能是将输入的整数形式的百分数转换为ABCDE五个等级字符;形参类型是int;返回值类型是char
问题二:缺少break;语句会使ans=继续执行,最终ans都为E
任务二
#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; }

问题一:功能是计算一个整数所有位数之和
问题二:可以实现(1)迭代法
(2)递归法
任务三
#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; } }

问题一:算出x的n次幂
问题二:是:
任务四
#include<stdio.h> int classify_triangle(int a, int b, int c) { if (a + b <= c || a + c <= b || b + c <= a) return 0; if (a == b && b == c) return 2; else if (a == b || b == c || a == c) return 3; else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) return 4; else return 1; } int main() {int a, b, c; while (scanf("%d%d%d", &a, &b, &c) == 3) { switch (classify_triangle(a, b, c)) { case 0:printf("不能构成三角形\n"); break; case 1:printf("普通三角形\n"); break; case 2:printf("等边三角形\n"); break; case 3:printf("等腰三角形\n"); break; case 4:printf("直角三角形\n"); break; return 0; }} }

任务五
递归方法:
#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); }

迭代方法:
#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; int z = 1; for (int i = 0; i < m; i++) z = z * (n - i); int mu = 1; for (int i = 1; i <= m; i++) mu = mu * i; return z / mu; }

任务六
#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 gcd(int a, int b, int c) {int i; if (a < b && a < c) i = a; else if (b < a && b < c) i = b; else i = c; int max_gcd = 1; for (int n = 1; n <= i; n++) { if (a % n == 0 && b % n == 0 && c % n == 0) { max_gcd = n; } } return max_gcd; }

任务七
#include <stdio.h> #include <stdlib.h> void print_charman(int n); int main() { int n; printf("Enter n: "); while (scanf("%d", &n) != EOF) { printf("input n: %d\n", n); print_charman(n); printf("\nEnter n: "); } return 0; } void print_charman(int n) { for (int i = 1; i <= n; i++) { for (int j = 1; j < i; j++) { printf("\t"); } for (int j = 1; j <= 2 * (n - i) + 1; j++) { printf(" O \t"); } printf("\n"); for (int j = 1; j < i; j++) { printf("\t"); } for (int j = 1; j <= 2 * (n - i) + 1; j++) { printf(" <H> \t"); } printf("\n"); for (int j = 1; j < i; j++) { printf("\t"); } for (int j = 1; j <= 2 * (n - i) + 1; j++) { printf(" I I \t"); } printf("\n"); } }

浙公网安备 33010602011771号