实验3 C语言函数应用编程

实验一

源代码

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

屏幕截图 2026-04-21 173343

回答问题:

问题一:(1)score to grade函数的功能是将成绩转换成对应的等级,90~100分为等级A,80~89分为等级B,70~79分为等级C,60~69分为等级D,0~59分为等级E。

             (2)形参类型:int

             (3)返回值类型:char

问题二:修改后的代码缺少break语句,从case10到case6都没有break,程序就会从匹配的case开始,一直执行到default,导致最后ans给到e,不能输出正确的等级。

              而且有符号使用错误,是’A‘而不是”A“。

 

实验二

源代码

 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 // 函数定义
13 int sum_digits(int n) {
14     int ans = 0;
15     while(n != 0) {
16         ans += n % 10;
17         n /= 10;
18     }
19     return ans;
20 }

屏幕截图 2026-04-21 182354

回答问题:

问题一:功能是计算输入数字的各位上的数字之和。

问题二:能实现

             两种算法思维区别分析:(1)原题:从低位到高位,循环取余,整除,累加,直到数字变为0.

                                                   (2)改后:采用递归的方式,把数字拆分成高位数字和当前各位数字,直到只剩一位数。

 

实验三

源代码

 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     
11     return 0;
12 }
13 // 函数定义
14 int power(int x, int n) {
15     int t;
16     if(n == 0)
17         return 1;
18     else if(n % 2)
19         return x * power(x, n-1);
20     else {
21         t = power(x, n/2);
22         return t*t;
23     }
24 }
25     

屏幕截图 2026-04-21 183426

回答问题:

问题一:power的功能是计算幂函数。

问题二:power是递归函数。其模式为:(1)递归出口:n=0,任何数的0次方都是1. (2)当n为奇数时,x^n=x*x^(n-1)  (3)当n为偶数时,x^n=(x^2/n)的平方

 

实验四

源代码

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

屏幕截图 2026-04-15 105410

 

实验五

源代码1.c

 1 //task5.1.c
 2 #include <stdio.h>
 3 int func(int n, int m);   // 函数声明
 4 int main() {
 5      int n, m;
 6     int ans;
 7     while(scanf("%d%d", &n, &m) != EOF) {
 8         ans = func(n, m);   // 函数调用
 9         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
10     }
11         
12     return 0;
13 }
14 
15 //函数定义
16 int func(int n, int m) {
17    if(m<0 || m>n)
18    return 0;
19    if(m==0 || m==n)
20    return 1;
21    if(m>n-m) m=n-m;
22    
23    int up=1;
24    int down=1;
25    for(int i=1; i<=m; i++){
26        up*=(n-m+i);
27        down*=i;
28    }
29    return up/down;
30 }
31     

屏幕截图 2026-04-21 185953

源代码2.c

 1 //task5.2.c
 2 #include <stdio.h>
 3 int func(int n, int m);   // 函数声明
 4 int main() {
 5      int n, m;
 6     int ans;
 7     while(scanf("%d%d", &n, &m) != EOF) {
 8         ans = func(n, m);   // 函数调用
 9         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
10     }
11         
12     return 0;
13 }
14 
15 //函数定义
16 int func(int n, int m) {
17    if(m<0 || m>n) return 0;
18    if(m==0 || m==n) return 1;
19    
20    return func(n-1,m) + func(n-1,m-1);
21    
22 }
23     

屏幕截图 2026-04-21 185953

 

实验六

源代码

 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     while(scanf("%d%d%d", &a, &b, &c) != EOF) {
 9         ans = gcd(a, b, c);     // 函数调用
10         printf("最大公约数: %d\n\n", ans);
11     }
12     return 0;
13 }
14 
15 //函数定义
16 int gcd(int a, int b, int c){
17    if(a<0) a=-a;
18    if(b<0) b=-b;
19    if(c<0) c=-c;
20    
21    int min=a;
22    if(b<min) min=b;
23    if(c<min) min=c;
24    
25    for(int i=min; i>=1; i--){
26        if(a%i==0 && b%i==0 && c%i==00) {
27            return i;
28        }
29    }
30    return 1;
31 }

 屏幕截图 2026-04-21 192940

实验七

源代码

 

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

屏幕截图 2026-04-21 235644

屏幕截图 2026-04-21 235700

 

posted @ 2026-04-22 00:07  渝寒京  阅读(4)  评论(0)    收藏  举报