实验三

任务1

Q1将百分制的成绩转化为字母等级。

Q2形参类型int整形;返回值类型char字符型。没有break,不会跳出循环;输出的为单个字符,应该用单引号。

任务2

Q1将各数位上的数相加求和,赋值给ans。

Q2可以。该段代码利用了递归,n<10各数位上的数之和即为n,n>=10反复用sum digits函数,从个位开始依次取出各数位上的数相加。

任务3

Q1计算n的x次幂

Q2是。

2D421FAE05E40735A93639CE6B71BAF7

任务4

 1 #include<stdio.h>
 2 int is_prime(int n); 
 3 
 4 int main(){
 5     int count = 0;
 6     printf("100以内的孪生素数:");
 7     for(int n = 2; n <= 98; n++){ 
 8         if(is_prime(n) && is_prime(n + 2)){ 
 9             printf("\n(%d, %d)\n ", n, n + 2);
10             count++;
11         }
12     }
13     printf("\n100以内的孪生素数有%d个\n", count); 
14     return 0;
15 }
16 
17 int is_prime(int n){ 
18     if(n < 2){
19         return 0;
20     }
21     for(int i = 2; i * i <= n; i++){ 
22         if(n % i == 0){ 
23             return 0;
24         }
25     }
26     return 1; 
27 }

屏幕截图 2025-10-25 125948

任务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 // 函数定义
17 // 待补足。。。(分别用迭代和递归实现)
18 int func(int n, int m) {
19     if (m == 0 || m == n) {
20         return 1;
21     }
22     if (n < m) {
23         return 0;
24     }
25     if (m > n - m) {
26         m = n - m;
27     }
28     long long up = 1;
29     long long down = 1;
30     int i;
31     for (i = 0; i < m; i++) {
32         up *= (n - i);
33     }
34     for (i= 1; i <= m; i++) {
35         down *= i;
36     }
37     return up / down;
38 }

屏幕截图 2025-10-25 143246

 

 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 // 函数定义
17 // 待补足。。。(分别用迭代和递归实现)
18 int func(int n, int m) {
19     if (m == 0 || m == n) {
20         return 1;
21     }
22     if (n < m) {
23         return 0;
24     }
25     return func(n-1,m)+func(n-1,m-1);
26 }

屏幕截图 2025-10-25 145637

任务6

 1 #include <stdio.h>
 2 
 3 // 函数声明
 4 // 待补足....
 5 int gcd(int a,int b,int c);
 6 
 7 int main() {
 8     int a, b, c;
 9     int ans;
10 
11     while(scanf("%d%d%d", &a, &b, &c) != EOF) {
12         ans = gcd(a, b, c);     // 函数调用
13         printf("最大公约数: %d\n\n", ans);
14     }
15 
16     return 0;
17 }
18 
19 
20 // 函数定义
21 // 待补足...
22 int gcd(int a,int b,int c){
23     int i=a;
24     if(b<i){
25         i=b;
26     }
27     if(c<i){
28         i=c;
29     }
30     for(i;i>0;i--){
31         if(a%i==0&&b%i==0&&c%i==0){
32             return i;
33         }
34     }
35 }

屏幕截图 2025-10-25 153512

任务7

 1 #include <stdio.h>
 2 
 3 // 函数声明
 4 // 待补足
 5 // xxx
 6 void print_charman(int n);
 7 
 8 int main() {
 9     int n;
10 
11     printf("Enter n: ");
12     scanf("%d", &n);
13     print_charman(n); // 函数调用
14        
15     return 0;
16 }
17 
18 // 函数print_charman定义
19 // 待补足
20 // xxx
21 
22 void print_charman(int n) {
23 
24     int max = 2 * n - 1;
25     int k, i, j;
26     const int per = 5;
27 
28     for (k = n; k >= 1; k--) {
29         int ren = 2 * k - 1; 
30         int total = max * per;      
31         int current = ren * per; 
32         int kong = (total - current) / 2;
33 
34         for (i = 0; i < kong; i++) printf(" ");
35         for (j = 0; j < ren; j++) printf("  0  ");  
36         printf("\n");
37 
38         for (i = 0; i < kong; i++) printf(" ");
39         for (j = 0; j < ren; j++) printf(" <H> ");  
40         printf("\n");
41 
42         for (i = 0; i <kong; i++) printf(" ");
43         for (j = 0; j < ren; j++) printf(" I I "); 
44         printf("\n");
45     }
46 }

屏幕截图 2025-10-25 171906

字符小人好难搞:(

 

posted @ 2025-10-25 17:21  郭语涵  阅读(7)  评论(0)    收藏  举报