实验三
实验任务1:
1. 源代码
1 #include2 char score_to_grade(int score); 3 int main() { 4 int score; 5 char grade; 6 while (scanf_s("%d", &score) != EOF) { 7 grade = score_to_grade(score); 8 printf("分数: %d, 等级: %c\n\n", score, grade); 9 } 10 return 0; 11 } 12 char score_to_grade(int score) { 13 char ans; 14 switch (score / 10) { 15 case 10: 16 case 9: ans = 'A'; break; 17 case 8: ans = 'B'; break; 18 case 7: ans = 'C'; break; 19 case 6: ans = 'D'; break; 20 default:ans = 'E'; 21 } 22 return ans; 23 }
2. 运行结果截图:

3.问题回答:
ans1:函数score_to_grade的功能是将分数转化成对应的等级 形参类型是int 返回值类型是char
ans2:(1)由于返回值类型为char,故应该使用' '而不是“ ” (2)缺少break,case会一直向下,最终输出结果均为E
实验任务2:
1.源代码:
1 #include2 int sum_digits(int n); 3 int main() { 4 int n; 5 int ans; 6 while (printf("Enter n: "), scanf_s("%d", &n) != EOF) { 7 ans = sum_digits(n); 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 return 0; 11 } 12 int sum_digits(int n) { 13 int ans = 0; 14 while (n != 0) { 15 ans += n % 10; 16 n /= 10; 17 } 18 return ans; 19 }
2.运行结果截图:

3.问题回答:
ans1:函数sum_digits的功能是计算n各个数位上数字的和
ans2:能实现,原代码是运用循环算法,修改代码是运用递归算法
实验任务3:
1.源代码:
1 #include2 int power(int x, int n); 3 int main() { 4 int x, n; 5 int ans; 6 while (printf("Enter x and n: "), scanf_s("%d%d", &x, &n) != EOF) { 7 ans = power(x, n); 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 11 return 0; 12 } 13 int power(int x, int n) { 14 int t; 15 if (n == 0) 16 return 1; 17 else if (n % 2) 18 return x * power(x, n - 1); 19 else { 20 t = power(x, n / 2); 21 return t * t; 22 } 23 }
2.运行结果截图:

3.问题回答:
ans1:函数power的功能是计算x的n次幂
ans2:是递归函数,在n为奇数和偶数时存在递归,数学公式为:

实验任务4:
1.源代码:
1 #include2 3 int main() 4 { 5 int a, b, c; 6 int classify_triangle(int a, int b, int c); 7 while (scanf_s("%d%d%d", &a, &b, &c) != EOF) { 8 switch (classify_triangle(a, b, c)) { 9 case 0: 10 printf("不能构成三角形\n"); 11 break; 12 case 1: 13 printf("普通三角形\n"); 14 break; 15 case 2: 16 printf("等边三角形\n"); 17 break; 18 case 3: 19 printf("等腰三角形\n"); 20 break; 21 case 4: 22 printf("直角三角形\n"); 23 break; 24 } 25 } 26 27 return 0; 28 29 } 30 31 int classify_triangle(int a, int b, int c) { 32 33 if (a + b <= c || a + c <= b || b + c <= a) 34 return 0; 35 else if (a == b && b == c) 36 return 2; 37 else if (a == b || c == b || a == c) 38 return 3; 39 else if (a * a + b * b == c * c || a * a + c * c == b * b || c * c + b * b == a * a) 40 return 4; 41 else 42 return 1; 43 44 }
2.运行结果截图:

实验任务5:
1.源代码
迭代:
1 #include2 int func(int n, int m); 3 int main() 4 { 5 int n, m; 6 int ans; 7 while (scanf_s("%d%d", &n, &m) != EOF) 8 { 9 ans = func(n, m); 10 printf("n = %d,m = %d,ans = %d\n\n", n, m, ans); 11 } 12 return 0; 13 } 14 int func(int n, int m) 15 { 16 int i; 17 int a1 = 1, a2 = 1, a3 = 1; 18 int a; 19 for (i = 1; i <= n; i++) 20 { 21 a1 *= i; 22 } 23 for (i = 1; i <= m; i++) 24 { 25 a2 *= i; 26 } 27 for (i = 1; i <= (n - m); i++) 28 { 29 30 a3 *= i; 31 } 32 a = a1 / a2 / a3; 33 return a; 34 }
递归:
1 #include2 int func(int n, int m); 3 int main() 4 { 5 int n, m; 6 int ans; 7 while (scanf_s("%d%d", &n, &m) != EOF) 8 { 9 ans = func(n, m); 10 printf("n = %d,m = %d,ans = %d\n\n", n, m, ans); 11 } 12 return 0; 13 } 14 int func(int n, int m) 15 { 16 if (m == 0||m == n) 17 return 1; 18 else if (m > n) 19 return 0; 20 else 21 return func(n - 1, m) + func(n - 1, m - 1); 22 }
2.运行结果截图:

实验任务6:
1.源代码:
1 #include2 int gcd(int a, int b, int c); 3 int main() { 4 int a, b, c; 5 int ans; 6 while (scanf_s("%d%d%d", &a, &b, &c) != EOF) { 7 ans = gcd(a, b, c); 8 printf("最大公约数: %d\n\n", ans); 9 } 10 return 0; 11 } 12 int gcd(int a, int b, int c) 13 { 14 int min = a; 15 if (b < min) min = b; 16 if (c < min) min = c; 17 for (int i = min; i >= 1; i--) { 18 if (a % i == 0 && b % i == 0 && c % i == 0) { 19 return i; 20 } 21 } 22 return 1; 23 }
2.运行结果截图:

实验任务7:
1.源代码:
1 #include2 #include 3 void print_charman(int n); 4 int main() { 5 int n; 6 printf("Enter n:"); 7 scanf_s("%d", &n); 8 print_charman(n); 9 return 0; 10 } 11 void print_charman(int n) 12 { 13 int i, j, k; 14 for (i = n - 1; i >= 0; i--) { 15 for (k = n; k > i; k--) 16 { 17 printf("\t"); 18 } 19 for (j = 0; j < 2 * i + 1; j++) 20 { 21 printf(" O\t"); 22 } 23 printf("\n"); 24 for (k = n; k > i; k--) 25 { 26 printf("\t"); 27 } 28 for (j = 0; j < 2 * i + 1; j++) 29 { 30 printf(" \t "); 31 } 32 printf("\n"); 33 for (k = n; k > i; k--) 34 { 35 printf("\t"); 36 } 37 for (j = 0; j < 2 * i + 1; j++) 38 { 39 printf("I I\t"); 40 } 41 printf("\n"); 42 } 43 }
2.运行结果截图:


原文地址: https://www.cveoy.top/t/topic/qGuf 著作权归作者所有。请勿转载和采集!