实验三

1 #include <stdio.h>
2
3 char score_to_grade(int score);
4
5 int main() {
6 int score;
7 char grade;
8
9 while(scanf("%d", &score) != EOF) {
10 grade = score_to_grade(score);
11 printf("分数: %d, 等级: %c\n\n", score, grade);
12 }
13
14 return 0;
15 }
16
17 char score_to_grade(int score) {
18 char ans;
19
20 switch(score/10) {
21 case 10:
22 case 9: ans = 'A'; break;
23 case 8: ans = 'B'; break;
24 case 7: ans = 'C'; break;
25 case 6: ans = 'D'; break;
26 default: ans = 'E';
27 }
28
29 return ans;
30 }
复制代码
实验三wzy

问题一:是将用户输入的数作整除并按照10分一个档次分ABCD四个等级,低于60分的是E级

形参类型是整型,返回值类型是字符型

问题二:ans是字符型,单引号变成双引号会导致返回值类型错误。

删掉break会使ans=这个语句继续执行下去,使得无论输入什么值,最后ans都是E。

任务二:

复制代码
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 int sum_digits(int n) {
17 int ans = 0;
18
19 while(n != 0) {
20 ans += n % 10;
21 n /= 10;
22 }
23
24 return ans;
25 }
复制代码
E7FAA3BC3F23A5120B8F1B5F369A06F4

问题一:sum_digits的功能是求所输入数字的各位数之和

问题二:可以实现同样的输出

第一种是用了迭代的思想

第二种则是用了递归的思想

任务三:

复制代码
1 #include <stdio.h>
2
3 int power(int x, int n);
4
5 int main() {
6 int x, n;
7 int ans;
8
9 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
10 ans = power(x, n);
11 printf("n = %d, ans = %d\n\n", n, ans);
12 }
13
14 return 0;
15 }
16
17 int power(int x, int n) {
18 int t;
19
20 if(n == 0)
21 return 1;
22 else if(n % 2)
23 return x * power(x, n-1);
24 else {
25 t = power(x, n/2);
26 return t*t;
27 }
28 }
复制代码
5B82C019B3DDFF4E2249FAFFB446A982

问题一:power是求x的n次方的

问题二:是递归函数0B1AED9CA4412C84B4F524B396E5516E

任务四:

复制代码
1 #include<stdio.h>
2
3 int classify_triangle(int a,int b,int c)
4 {
5
6 if(a+b<=c||a+c<=b||b+c<=a)
7 return 0;
8 if(ab&&bc)
9 return 2;
10 else if(ab||bc||ac)
11 return 3;
12 else if(aa+bb
cc||aa+cc==bb||bb+cca*a)
13 return 4;
14 else
15 return 1;
16
17 }
18 int main()
19 {int a,b,c;
20
21 while(scanf("%d%d%d",&a,&b,&c)
3)
22 {
23
24 switch(classify_triangle(a,b,c))
25 {
26 case 0:printf("不能构成三角形\n");break;
27 case 1:printf("普通三角形\n");break;
28 case 2:printf("等边三角形\n");break;
29 case 3:printf("等腰三角形\n");break;
30 case 4:printf("直角三角形\n");break;
31 return 0;}}
32 }
复制代码
4D6735C0E7BCA4E76DB77C7AA1713FD0

任务5:

递归方法:

复制代码
1 #include<stdio.h>
2 int func(int n,int m);
3
4 int main()
5 {
6 int n,m;
7 int ans;
8 while(scanf("%d%d",&n,&m)!=EOF){
9 ans=func(n,m);
10 printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);
11
12 }
13 return 0;
14 }
15 int func(int n,int m){
16 if(m<0||m>n)
17 return 0;
18 if(m0||mn)
19 return 1;
20 return func(n-1,m)+func(n-1,m-1);
21 }
复制代码
7878C23A8DFC0A5E7F3E4C41F2DD5C81

迭代方法:

复制代码
1 #include<stdio.h>
2 int func(int n,int m);
3
4 int main()
5 {
6 int n,m;
7 int ans;
8 while(scanf("%d%d",&n,&m)!=EOF){
9 ans=func(n,m);
10 printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);
11
12 }
13 return 0;
14 }
15 int func(int n,int m){
16 if(m<0||m>n)
17 return 0;
18 if(m0||mn)
19 return 1;
20 int z=1;
21 for(int i=0;i<m;i++)
22 z=z(n-i);
23 int mu=1;
24 for(int i=1;i<=m;i++)
25 mu=mu
i;
26 return z/mu;
27 }
复制代码
7878C23A8DFC0A5E7F3E4C41F2DD5C81

任务六:

复制代码
1 #include<stdio.h>
2 int gcd(int a,int b,int c);
3
4 int main()
5 {
6 int a,b,c;
7 int ans;
8 while(scanf("%d%d%d",&a,&b,&c)!=EOF){
9 ans=gcd(a,b,c);
10 printf("最大公约数:%d\n\n",ans);
11
12 }
13 return 0;
14 }
15 int gcd(int a,int b,int c)
16 {int i;
17 if(a<b&&a<c)
18 i=a;
19 else if(b<a&&b<c)
20 i=b;
21 else
22 i=c;
23 int max_gcd=1;
24 for(int n=1;n<=i;n++)
25 {
26 if(a%n0&&b%n0&&c%n==0)
27 {
28 max_gcd=n;
29
30 }
31 }
32 return max_gcd;
33
34 }
复制代码
A0F3D665ED7479442955420AC7D277A2

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

ED4E0841B761EE0087E2B1D750E1A9CF

posted @ 2026-06-15 18:05  种野菜  阅读(3)  评论(0)    收藏  举报