实验3_C语言函数应用编程
任务一
源代码:
1 #include <stdio.h> 2 char score_to_grade(int score); 3 int main() { 4 int score; 5 char grade; 6 while(scanf("%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 }
运行测试截图:

问题一:接收输入的整数,根据分数所在的具体区间,返回对应的等级字符。
问题二:每一个case后面都没有break,所以程序会从匹配的一个case执行后面的所有分支,最终ans的值永远都是default分支的结果。
任务二:
源代码:
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("%d", &n) != EOF) { 7 ans = sum_digits(n); 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 return 0; 11 } 12 // 函数定义 13 int sum_digits(int n) { 14 int ans = 0; 15 while(n != 0) { 16 ans += n % 10; 17 n /= 10; 18 } 19 return ans; 20 }
运行测试截图:

问题一:计算这个整数每一位上的数字之和
问题二:能实现相同输出,源代码是循环迭代,递归版本属于函数调用。
任务三:
源代码:
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("%d%d", &x, &n) != EOF) { 7 ans = power(x, n); 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 return 0; 11 } 12 int power(int x, int n) { 13 int t; 14 if(n == 0) 15 return 1; 16 else if(n % 2) 17 return x * power(x, n-1); 18 else { 19 t = power(x, n/2); 20 return t*t; 21 }}
运行测试截图:

问题一:计算并且返回整数x的n次幂
问题二:是递归函数

任务四:
源代码:
1 #include <stdio.h> 2 3 int classify_triangle(int a, int b, int c); 4 5 int main() { 6 int a, b, c, ret; 7 while (scanf("%d%d%d", &a, &b, &c) != EOF) { 8 ret = classify_triangle(a, b, c); 9 switch (ret) { 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 return 0; 18 } 19 20 int classify_triangle(int a, int b, int c) { 21 int t; 22 if (a > b) { t = a; a = b; b = t; } 23 if (b > c) { t = b; b = c; c = t; } 24 if (a > b) { t = a; a = b; b = t; } 25 26 if (a <= 0 || a + b <= c) return 0; 27 28 if (a == b && b == c) return 2; 29 30 if (a == b || b == c) return 3; 31 32 if (a*a + b*b == c*c) return 4; 33 34 return 1; 35 }
运行测试截图:

任务五:
1 #include <stdio.h> 2 3 int func(int n, int m); 4 5 int main() { 6 int n, m; 7 int ans; 8 9 while(scanf("%d%d", &n, &m) != EOF) { 10 ans = func(n, m); 11 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 12 } 13 14 return 0; 15 } 16 17 int func(int n, int m) { 18 if (m < 0 || m > n) return 0; 19 if (m == 0 || m == n) return 1; 20 21 if (m > n - m) { 22 m = n - m; 23 } 24 25 int result = 1; 26 for (int i = 1; i <= m; i++) { 27 result = result * (n - m + i) / i; 28 } 29 return result; 30 }
1 #include <stdio.h> 2 3 int func(int n, int m); 4 5 int main() { 6 int n, m; 7 int ans; 8 9 while(scanf("%d%d", &n, &m) != EOF) { 10 ans = func(n, m); 11 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 12 } 13 14 return 0; 15 } 16 17 int func(int n, int m) { 18 if (m < 0 || m > n) return 0; 19 if (m == 0 || m == n) return 1; 20 21 return func(n - 1, m) + func(n - 1, m - 1); 22 }

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

任务七:
1 #include <stdio.h> 2 #include <stdlib.h> 3 void print_charman(int n); 4 5 int main() { 6 int n; 7 8 printf("Enter n: "); 9 scanf("%d", &n); 10 print_charman(n); 11 12 return 0; 13 } 14 15 16 void print_charman(int n) { 17 18 for (int i = 0; i < n; i++) { 19 for (int j = 0; j < n - i; j++) { 20 printf(" O "); 21 } 22 printf("\n"); 23 for (int j = 0; j < n - i; j++) { 24 printf("<H>"); 25 } 26 printf("\n"); 27 for (int j = 0; j < n - i; j++) { 28 printf("I I"); 29 } 30 printf("\n\n"); 31 } 32 system("pause"); 33 }


浙公网安备 33010602011771号