实验三

实验一

源代码:

 1 #include <stdio.h>
 2 #include<stdlib.h>
 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 system("pause");
14 return 0;
15 }
16 
17 // 函数定义
18 char score_to_grade(int score) {
19 char ans;
20 
21 switch(score/10) {
22 case 10:
23 case 9: ans = 'A'; break;
24 case 8: ans = 'B'; break;
25 case 7: ans = 'C'; break;
26 case 6: ans = 'D'; break;
27 default: ans = 'E';
28 }
29 
30 return ans;
31 }
View Code

 

实验截图:

image

问题一:功能:根据学生所得分数的十位数上的数字来输出对应的等级。形参类型是整型int,返回值类型是字符型char

问题二:1.每一个case语句的最后都要有break。2.赋值应该用两个单引号引出对应的等地

 

实验二

源代码:

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

 

实验截图:image

问题一:实现了对于输入数字每个数位上的数字求和的功能

问题二:可以实现相同的功能,源代码中的函数是迭代的逻辑,通过while语句重复执行一段代码,每次迭代更新状态,直到满足条件为之。而问题中的函数使用的是递归的的逻辑,通过不断地调用自身函数,将问题分解为更小的子问题直到达到基本情况。

 

实验三:

源代码:

 1 #include <stdio.h>
 2 #include<stdlib.h>
 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     system("pause");
14     return 0;
15 }
16 
17 // 函数定义
18 int power(int x, int n) {
19     int t;
20 
21     if(n == 0)
22         return 1;
23     else if(n % 2)
24         return x * power(x, n-1);
25     else {
26         t = power(x, n/2);
27         return t*t;
28     }
29 }
View Code

 

实验截图:

image

 问题一:函数的功能是求一个整数的整数次方

问题二:是递归函数,对应的数学模型如下:

image

 实验四:

源代码:

 1 #include<stdlib.h>
 2 #include<stdio.h>
 3 
 4 int classify_triangle(int,int,int);
 5 int maxi(int a,int b);
 6 int mini(int a,int b);
 7 int main()
 8 {
 9     int a,b,c,ans,A,B,C;
10     while(scanf("%d %d %d",&a,&b,&c)!=EOF)
11     {
12     getchar();
13     C=maxi(a,c);
14 
15 
16     C=maxi(C,b);
17     A=mini(a,b);
18     A=mini(A,c);
19     B=a+b+c-A-C;
20     ans=classify_triangle(A,B,C);
21 
22     if(ans==1)
23         printf("普通三角形");
24     else if(ans==2)
25         printf("等边三角形");
26     else if(ans==3)
27         printf("等腰三角形");
28     else if(ans==4)
29         printf("直角三角形");
30     if(ans==0)
31         printf("不构成三角形");
32 
33     }
34         system("pause");
35         return 0;
36 }
37 int classify_triangle(int a,int b,int c)
38 {
39 if(a+b<=c)
40     return 0;
41 else if(a==b)
42     {
43     if(b==c)
44         return 2;
45     else
46         return 3;
47     }
48 else if(a*a+b*b==c*c)
49     return 4;
50 else
51     return 1;
52 }
53 int maxi(int a,int b)
54 { if(a>b)
55 return a;
56 else
57 return b;}
58 int mini(int a,int b)
59 { if(a<b)
60 return a;
61 else
62 return b;}
View Code

实验截图:

image

 

 

实验五:

源代码:

迭代版:

 1 #include<stdlib.h>
 2 #include<stdio.h>
 3 int func(int,int);
 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     system("pause");
13     return 0;
14 }int func(int n,int m)
15 {
16     int a=1,b=1,c=1,i;
17     for(i=1;i<=n;i++)
18     {a*=i;}
19     for(i=1;i<=m;i++)
20     {b*=i;}
21     for(i=1;i<=n-m;i++)
22     {c*=i;}
23     return (a/b/c);
24 
25 }
View Code

递归版:

 1 #include<stdlib.h>
 2 #include<stdio.h>
 3 int func(int,int);
 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     system("pause");
13     return 0;
14 }int func(int n,int m)
15 {
16     if(m>n)
17         return 0;
18     if(m==n||m==0)
19         return 1;
20     else
21         return func(n-1,m)+func(n-1,m-1);
22 
23 }
View Code

 

实验截图:

image

 

实验六:

源代码:

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

 

实验截图:

image

 

 

实验七:

源代码:

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

实验截图:

image

 

posted @ 2026-04-18 10:50  zhangqingyang347  阅读(8)  评论(0)    收藏  举报