实验3

任务1

#include <stdio.h>

char score_to_grade(int score);  

int main() {
    int score;
    char grade;

    while(scanf("%d", &score) != EOF) {
        grade = score_to_grade(score); 
        printf("分数: %d, 等级: %c\n\n", score, grade);
    }

    return 0;
}

char score_to_grade(int score) {
    char ans;

    switch(score/10) {
    case 10:
    case 9:   ans = 'A'; break;
    case 8:   ans = 'B'; break;
    case 7:   ans = 'C'; break;
    case 6:   ans = 'D'; break;
    default:  ans = 'E';
    }

    return ans;
}
View Code

1

回答:

1. 功能:将数转换为等级(A,B,C,D,E)。

   形参类型:int

   返回值类型:char

2. 问题:

   · ans = "A" 应改为 ans = 'A'

   · 缺少 break,选择无法正确执行

任务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 int sum_digits(int n) {
18     int ans = 0;
19 
20     while(n != 0) {
21         ans += n % 10;
22         n /= 10;
23     }
24 
25     return ans;
26 }

2

回答:

1.计算一个整数的各位数字之和

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

3

回答:

1. 功能:计算 x^n
2. 是递归函数
递归模式:

3.1

任务4

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

4

任务5

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 int main(){
 4     int m,n;
 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     long long a=1,b=1;
19     for(int i=1;i<=m;i++){
20         a*=(n-m+i);
21         b*=i;
22     }
23     return a/b;
24 }

5.1

 1 #include<stdio.h>
 2 int func(int n,int m);
 3 int main(){
 4     int m,n;
 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||n==m)
17         return 1;
18     return func(n-1,m)+func(n-1,m-1);
19 }

5.2

任务6

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

6

任务7

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

7

 

posted @ 2026-04-15 19:47  awd01  阅读(7)  评论(0)    收藏  举报