实验报告3

TASK1

源代码:

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

 


运行测试截图:屏幕截图 2026-04-21 093711

 

问题1:

根据成绩划分等级

形参类型:int(整数)
返回值类型:char(字符)

问题2:

1.每个 case 后缺少 break,会导致“穿透”执行,返回多种等级。

2."A"、"B" 应改为单引号字符 'A'、'B'

TASK2

源代码:

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

 


运行测试截图:屏幕截图 2026-04-21 100151

 

问题1:计算一个整数各位数字之和

问题2:可以。一种是循环,一种是递归。

TASK3
源代码:
 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 }
View Code

 

运行测试截图:屏幕截图 2026-04-21 095023

 

问题1:计算 x 的 n 次方

问题2:

是递归。

奇数时:xⁿ = x * xⁿ⁻¹,偶数时:xⁿ = (xⁿ⁄²)²

TASK4

源代码:

 1 #include<stdio.h>
 2 
 3 int classify_triangle(int a, int b, int c);//函数声明
 4 
 5 int main(){
 6     int a,b,c;
 7     while(scanf("%d%d%d",&a,&b,&c)!=EOF){
 8         switch(classify_triangle(a, b, c)){
 9         case 1:printf("普通三角形\n");break; 
10         case 2:printf("等边三角形\n");break; 
11         case 3:printf("等腰三角形\n");break; 
12         case 4:printf("直角三角形\n");break;
13         default:printf("不能构成三角形\n");
14     }
15     }
16     return 0;
17 } 
18 
19 int classify_triangle(int a, int b, int c){
20         if(a+b>c&&a+c>b&&b+c>a){
21             if(a==b&&b==c&&a==c)return 2;
22             else if(a==b||a==c||b==c)return 3;
23             else if(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b)return 4;
24             else return 1;
25         }
26         else return 0;
27        }
View Code

 

运行结果截图:屏幕截图 2026-04-21 104524

 

TASK5

源代码1:

 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(m<n){
18         long long up=1,down=1;
19         int i;
20         for(i = 0; i < m; i++) {
21         up *= (n - i);      // 乘 n, n-1, n-2, ...
22         down *= (i + 1);    // 乘 1, 2, 3, ..., m
23     }
24         return up/down;
25     }
26    return 0;
27 }
View Code

 

运行结果截图1:屏幕截图 2026-04-21 112359

 

源代码2:

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

运行结果截图2:屏幕截图 2026-04-21 195939

 

TASK6

源代码:View Code

运行结果截图:屏幕截图 2026-04-21 211838

 

TASK7

源代码:

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

 

运行结果截图:屏幕截图 2026-04-21 221458

屏幕截图 2026-04-21 221604

 

 
posted @ 2026-04-21 22:16  杨若琳  阅读(6)  评论(0)    收藏  举报