实验三

task1

源代码

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

运行结果截图

屏幕截图 2026-04-16 184722

问题回答

问题1:函数score——to——grade的功能是将百分制的整数分数转化成等级,形参类型是int,返回值类型是char

问题2:每个case分支后面都没有break语句,导致程序会一直执行到default结束,最终的ans值永远都是'E';"A""B""C""D"是字符型常量,将字符型常量赋值给char类型变量,类型不匹配

task2

源代码

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

运行结果截图

屏幕截图 2026-04-16 185234

问题回答

问题1:函数sum——digits的功能是计算并返回一个整数的各数位数字之和

问题2:能实现同样的输出。原来的代码是运用迭代的方式,取个位数字累加再去掉个位,直到数字变为0,改后的代码是用递归的方式,调用函数自身,当前数字的个位+去掉个位后数字的各数位之和,直到数字小于10返回结果

task3

源代码

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

运行结果截图

屏幕截图 2026-04-16 185625

问题回答

问题1:函数power的功能是计算整数x的n次方并返回结果

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

663E9528F207FBEFEF04B08DF844DC50

task4

源代码

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

运行结果截图

屏幕截图 2026-04-16 190020

task5

源代码1

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

运行结果截图

屏幕截图 2026-04-16 192632

源代码2

 1 #include <stdio.h>
 2 int func(int n,int m);
 3 int main(){
 4 int n, m;
 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 int func(int n,int m){
13     if(m<0||m>n)
14     return 0;
15     if(m==0||m==n)
16     return 1;
17     return func(n-1,m)+func(n-1,m-1);
18 }    
View Code

运行结果截图

屏幕截图 2026-04-16 193558

task6

源代码

 1 #include <stdio.h>
 2 int gcd(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 = gcd(a, b, c); 
 8 printf("最大公约数: %d\n\n", ans);
 9 }
10 return 0;
11 }
12 int gcd(int a,int b,int c){
13     int min=a;
14     if (b < min) {
15          min= b;
16      }
17      if (c < min) {
18          min = c;
19      }
20      int i;
21      for (i = min; i >= 1; i--) {
22          if (a % i == 0 && b % i == 0 && c % i == 0) {
23              return i; 
24          }
25      }
26      return 1; 
27  }
View Code

运行结果截图

屏幕截图 2026-04-16 200035

task7

源代码

 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     return 0;
12 }
13 
14 void print_charman(int n) {
15     int i, j, k;
16     for (i = 1; i <= n; i++) {
17         int count = 2 * n - 2 * i + 1;
18         for (j = 1; j < i; j++)
19             printf("\t");
20         for (k = 0; k < count; k++)
21             printf(" O\t");
22         printf("\n");
23         for (j = 1; j < i; j++)
24             printf("\t");
25         for (k = 0; k < count; k++)
26             printf("<H>\t");
27         printf("\n");
28         for (j = 1; j < i; j++)
29             printf("\t");
30         for (k = 0; k < count; k++)
31             printf("I I\t");
32         printf("\n\n");
33     }
34 }
View Code

运行结果截图

屏幕截图 2026-04-16 215647

屏幕截图 2026-04-16 215736

 

posted @ 2026-04-20 21:51  yq8  阅读(7)  评论(0)    收藏  举报