实验三

四、实验结论

实验任务1

 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 // 函数定义
13 char score_to_grade(int score) {
14     char ans ;
15     switch(score/10) {
16     case 10 :
17     case 9 :   ans = 'A'; break;
18     case 8 :   ans = 'B'; break;
19     case 7 :   ans = 'C'; break;
20     case 6 :   ans = 'D'; break;
21     default :  ans = 'E';
22     }
23 
24     return ans ;
25 }

image

 问题一:功能:将一个在整数形式的数,根据数的区间将其转换为对应的等级字符ABCDE。形参类型是int整形,返回值类型为char型。

问题二:1.要求输出的是char型,要用单引号,而非用双引号;2.其后缺少break,会继续执行后续所有分支语句而导致代码出现错误。

实验任务二

 1 #include <stdio.h>
 2 
 3 int sum_digits(int n);
 4 
 5 int main() {
 6     int n;
 7     int ans;
 8 
 9     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
10         ans = sum_digits(n);
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13 
14     return 0;
15 }
16 
17 
18 int sum_digits(int n) {
19     int ans = 0;
20 
21     while(n != 0) {
22         ans += n % 10;
23         n /= 10;
24     }
25 
26     return ans;
27 }

image

问题一:计算输入一个整数的各位数字之和并输出

问题二:能,原先的算法思维是迭代,修改的算法思维是递归

实验任务三

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

image

 问题一:输出x的n次幂

问题二:

6f237396559596213d4e1993f9058cf9_720

 实验任务四

 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("%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     if(a == b && b ==c)
24         return 2;
25     if(a == b || b ==c || a == c)
26         return 3;
27     if(a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
28         return 4;
29 
30     return 1;
31 }

image

 实验任务五

1.迭代

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 int main(){
 4     int n,m;
 5     int ans;
 6     while(scanf("%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     int i;
14     int a=1, b=1;
15     if (m < 0 || m > n)
16         return 0;
17     if (m == 0 || m == n)
18         return 1;
19     for (i = 1; i <= m; i++) {
20         a*= (n - m + i);
21         b*=i;
22     }
23     return a / b;
24 }

image

2.递归

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 int main(){
 4     int n,m;
 5     int ans;
 6     while(scanf("%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 
13 int func(int n, int m){
14     if (m < 0 || m > n)
15         return 0;
16     if (m == 0 || m == n)
17         return 1;
18     return func(n-1,m)+func(n-1,m-1);
19 }

cd2e73b4fda097c6fca8cbb5957864a9

 实验任务六

 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 
 7     while(scanf("%d%d%d",&a,&b,&c)!=EOF){
 8         ans=gcd(a,b,c);
 9         printf("最大公约数:%d\n\n",ans);
10     }
11     return 0;
12 }
13 int gcd(int a,int b,int c){
14     int min = a;
15     int i;
16     if(b < min)
17          min =b;
18     if(c < min)
19          min =c;
20     for(i=min;i>=1;i--){
21          if(a % i==0 && b%i==0 && c%i==0)
22          return i;
23     }
24 }

e66c543df5d79bc7766fba6e1cd56b1d

 实验任务七

 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("%d", &n);
 8     print_charman(n); 
 9     return 0;
10 }
11 void print_charman(int n) {
12     int i, j, k;  
13     for(k = n; k >= 1; k--){      
14         for(i = 0; i < n-k; i++){
15             printf("\t"); 
16         }
17         for(i = 0; i < 2*k-1; i++){
18             printf(" O \t");
19         }
20         printf("\n");
21         
22         for(i = 0; i < n-k; i++){
23             printf("\t");
24         }
25         for(i = 0; i < 2*k-1; i++){
26             printf("<H>\t");
27         }
28         printf("\n");
29         
30         for(i = 0; i < n-k; i++){
31             printf("\t");
32         }
33         for(i = 0; i < 2*k-1; i++){
34             printf("I I\t");
35         }
36         printf("\n");
37     }
38 }

image

image

 五、实验总结

1.学习并了解一些可以运用于日常生活工作中的函数,使代码运算更加便捷。

2.熟练掌握了循环和递归函数,需要思路清晰,理清变量之间的关系。

3.实验七思考量有些大,有关空格和字符、换行之间的关系,略显复杂,要搞清楚需要输出的内容以及其所在位置。

posted @ 2026-04-22 05:03  a怡宝a  阅读(7)  评论(0)    收藏  举报