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

运行截图:

111

问题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 }

运行截图:

2222

问题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 }

运行截图:

3333

问题1:计算x的n次方

问题2:是的。

333333

  

实验任务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 }

运行截图:

4444

 

实验任务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 }

运行结果:

55551

递归源代码:

 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 }

运行截图:

55552

 

实验任务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 }

运行截图:

55552

 

实验任务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 }

运行截图:

66666

56666566

 

posted @ 2026-04-21 18:22  rjyyy  阅读(6)  评论(0)    收藏  举报