实验3

任务1:

代码:

 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 // 函数定义
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 }

 

截图:image

 

问题:

 1.函数功能:将实际分数转化为ABC等等级;

  形参类型:整数型;    返回值类型:字符型

2.字符的赋值需要用单引号;

  每个case后没有break,会一直顺位执行下去,即无论输入什么分数最后显示的等级都是“E”

 

任务2:

代码:

 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.求输入数n的各项数字之和

2.能

  原代码利用的是迭代的思维

  更改后的代码是递归的思维

任务3:

代码:

 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 // 函数定义
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 }

 

截图:image

 

问题:

1.求x的n次方

2.是递归函数 模型如下

IMG_20260419_154115_edit_3429905715073506

 

任务4:

代码:

 1 #include<stdio.h>
 2 
 3 int classify_triangle(int a,int b,int c);
 4 
 5 int main(){
 6     int a,b,c,n;
 7     while(scanf("%d%d%d",&a,&b,&c)!=EOF){
 8     n=classify_triangle(a,b,c);
 9     switch(n){
10     case 0: printf("不能构成三角形\n");
11         break;
12     case 1:printf("普通三角形\n");
13         break;
14     case 2:printf("等边三角形\n");
15         break;
16     case 3:printf("等腰三角形\n");
17         break;
18     case 4:printf("直角三角形\n");
19         break; 
20     }
21     }
22     return 0;
23 }
24 
25 int classify_triangle(int a,int b,int c){
26     if(a+b<=c||a+c<=b||b+c<=a){
27         return 0;
28     }
29     else{
30         if(a==b&&a==c&&b==c){
31             return 2;
32         }
33         else if(a==b||a==c||b==c){
34             return 3;
35         }
36         else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a){
37             return 4;
38         }
39         else{
40             return 1;
41         }
42     }
43     
44 }

 

截图:image

任务5:

代码:

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 
 4 int main(){
 5     int n,m;
 6     int ans;
 7     
 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 
16 int func(int n,int m){
17     if(n<m){
18         return 0;
19     }
20     else if(m==0||m==n){
21         return 1;
22     }
23     else{
24         int ans=1;
25         int i; 
26         for(i=1;i<m+1;i++){
27             ans=ans*(n-m+i)/i;
28         }
29         return ans;
30     }
31 }

 

截图:image

 

代码:

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 
 4 int main(){
 5     int n,m;
 6     int ans;
 7     
 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 
16 int func(int n,int m){
17     if(n<m){
18         return 0;
19     }
20     else if(m==0||m==n){
21         return 1;
22     }
23     else{
24         return func(n-1,m)+func(n-1,m-1);
25     }
26 }

 

截图: image

 

 

任务6:

代码:

 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\n",ans);
12     }
13     return 0;
14 }
15 
16 int gcd(int a,int b,int c){
17     int i;
18     if(a<=b&&a<=c){
19         i=a;
20     }
21     else if(b<=a&&b<=c){
22         i=b;
23     }
24     else{
25         i=c;
26     }
27     
28     for(i;i>=1;i--){
29         while(a%i==0&&b%i==0&&c%i==0){
30             return i;
31         }
32     }
33 }

 

 

 

截图:image

 

任务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 {
13     int i, j;
14     for (i = 0; i < n; i++)
15     {
16         for (j = 0; j < i; j++)
17         {
18             printf("\t");
19         }
20         for (j = 0; j < n - i; j++)
21         {
22             printf(" O \t");
23         }
24         for (j = 0; j < n - i - 1; j++)
25         {
26             printf(" O \t");
27         }
28         printf("\n");
29 
30         for (j = 0; j < i; j++)
31         {
32             printf("\t");
33         }
34         for (j = 0; j < n - i; j++)
35         {
36             printf("<H>\t");
37         }
38         for (j = 0; j < n - i - 1; j++)
39         {
40             printf("<H>\t");
41         }
42         printf("\n");
43 
44         for (j = 0; j < i; j++)
45         {
46             printf("\t");
47         }
48         for (j = 0; j < n - i; j++)
49         {
50             printf("I I\t");
51         }
52         for (j = 0; j < n - i - 1; j++)
53         {
54             printf("I I\t");
55         }
56         printf("\n\n");
57     }
58 
59 }

 

截图:image

 

posted @ 2026-04-20 21:13  cccccyh  阅读(6)  评论(0)    收藏  举报