实验3 C语言函数应用编程
实验任务1:
源代码:
1 #include <stdio.h> 2 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 }
运行截图:

问题1:功能:将百分制的整数分数转换为对应的等级制成绩A/B/C/D/E 形参类型:int 返回值类型:char
问题2:1.缺少break; 2.'E'应该为“E”
实验任务2:
源代码:
1 #include <stdio.h> 2 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 15 while (n != 0) { 16 ans += n % 10; 17 n /= 10; 18 } 19 return ans; 20 }
运行截图:

问题1:计算一个整数的各位数字之和
问题2:能。原代码中为迭代,修改后的代码为递归
实验任务3:
源代码:
1 #include <stdio.h> 2 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 }
运行截图:

问题1:计算x的n次方
问题2:是的。

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

实验任务5:
迭代源代码:
1 #include <stdio.h> 2 int func(int n, int m); 3 long long fact(int x); 4 int main() { 5 int n, m; 6 int ans; 7 while (scanf_s("%d%d", &n, &m) != EOF) { 8 ans = func(n, m); 9 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 10 } 11 return 0; 12 } 13 int func(int n, int m) { 14 if (m < 0 || m > n) { 15 return 0; 16 } 17 if (m == 0 || m == n) { 18 return 1; 19 } 20 long long numerator = fact(n); 21 long long denominator = fact(m) * fact(n - m); 22 return (int)(numerator / denominator); 23 } 24 long long fact(int x) { 25 long long res = 1; 26 int i; 27 for (i = 1; i <= x; i++) { 28 res *= i; 29 } 30 return res; 31 }
运行结果:

递归源代码:
1 #include <stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 while (scanf_s("%d%d", &n, &m) != EOF) { 7 ans = func(n, m); 8 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 9 } 10 return 0; 11 } 12 int func(int n, int m) { 13 if (m < 0 || m > n) { 14 return 0; 15 } 16 if (m == 0 || m == n) { 17 return 1; 18 } 19 return func(n - 1, m) + func(n - 1, m - 1); 20 }
运行截图:

实验任务6:
源代码:
1 #include <stdio.h> 2 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 int min = a; 14 if (b < min) min = b; 15 if (c < min) min = c; 16 int i; 17 for (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 }
运行截图:

实验任务7:
源代码:
1 #include <stdio.h> 2 #include <stdlib.h> 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 for (int k = 0; k < n; k++) { 13 for (int space = 0; space < k *7; space++) { 14 printf(" "); 15 } 16 int count = 2 * (n - k) - 1; 17 for (int i = 0; i < count; i++) { 18 printf(" O "); 19 } 20 printf("\n"); 21 for (int space = 0; space < k * 7; space++) { 22 printf(" "); 23 } 24 for (int i = 0; i < count; i++) { 25 printf("<H> "); 26 } 27 printf("\n"); 28 for (int space = 0; space < k * 7; space++) { 29 printf(" "); 30 } 31 for (int i = 0; i < count; i++) { 32 printf("I I "); 33 } 34 printf("\n"); 35 } 36 }
运行截图:


浙公网安备 33010602011771号