实验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 }
View Code

运行测试截图:

d6f396327c4bc4cda1f4ff8832b4ee27

 

问题一:接收输入的整数,根据分数所在的具体区间,返回对应的等级字符。

问题二:每一个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 }
View Code

运行测试截图:

877fe2d2b5013a5dde9ddcd0aae4f0c9

问题一:计算这个整数每一位上的数字之和

问题二:能实现相同输出,源代码是循环迭代,递归版本属于函数调用。

 

任务三:

源代码:

 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 }}
View Code

运行测试截图:

806ee3fcbb187ee34912aa793ea93760

问题一:计算并且返回整数x的n次幂

问题二:是递归函数

0DA271EE5CA6F6A0BAFB406D8B194775

 

任务四:

源代码:

 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 }
View Code

运行测试截图:

559aa16355616cb051923279405e1137

 

任务五:

 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 }
View Code
 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 }
View Code

c79da80b5627c8cffd2c51410d129491

 

任务六:

 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 }
View Code

cf7da67455132efe9a2788c2e389a11f

 

任务七:

 

 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 }
View Code

 

56eaf09f7c33e781f2fc10114a76de63

fbb2e1cf70a7f59eadacc21c79e18743

 

posted @ 2026-04-21 21:32  everleaf1616  阅读(10)  评论(0)    收藏  举报