实验3

task1

 1 #include <stdio.h>
 2 #include <stdlib.h>
 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     system("pause");
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 }

 

功能是将score转化为对应的等级

形参类型为int 返回值类型为char

错误:字符串应该用单引号 缺少break语句 

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 }

 

功能是计算一个整数n的各位数字之和

能 一个是递归,一个是迭代

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 }

task4

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int is_prime(int n);
 5 
 6 int main()
 7 {
 8     int count;
 9     int n;
10     n = 2;
11     count = 0;
12     printf("100以内的孪生素数:\n");
13     while(n < 99)
14     {
15         if(is_prime(n) && is_prime(n + 2))
16         {
17             printf("%d  %d\n", n, n+2);
18             count++;
19         }
20         n = n + 1;
21     }
22     printf("100以内的孪生素数共有%d个\n",count);
23     system("pause");
24     return 0;
25 }
26 
27 int is_prime(int n){
28     int i;
29     i = 2;
30     while(i < n)
31     {
32         if(n % i == 0)
33             break;
34         else
35             i = i + 1;
36     }
37     if(i == n)
38         return 1;
39     else
40         return 0;
41 
42 }

 

task5

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 void hanoi(unsigned int n,char from,char temp,char to,unsigned int *count);
 4 void moveplate(unsigned int n,char from,char to,unsigned int *count);
 5 int main()
 6 {
 7     unsigned int n;
 8     unsigned int count;
 9     while(1){
10         scanf("%u",&n);
11         count = 0;
12         hanoi(n,'A','B','C',&count);
13         printf("一共移动了%u次\n\n", count);
14     }
15     system("pause");
16     return 0;
17 }
18 void hanoi(unsigned int n,char from,char temp,char to,unsigned int *count)
19 {
20     if(n == 1)
21         moveplate(n,from,to,count);
22     else
23     {
24         hanoi(n-1,from,to,temp,count);
25         moveplate(n,from,to,count);
26         hanoi(n-1,temp,from,to,count);
27     }
28 }
29 void moveplate(unsigned int n,char from,char to,unsigned int *count)
30 {
31     (*count)++;
32     printf("%u:%c-->%c\n",*count,from,to);
33 }

 

task6

 1 #include <stdio.h>
 2 #include <stdlib.h>
 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     system("pause");
14     return 0;
15 }
16 int func(int n, int m){
17     int i;
18     long long res;
19     if(m < 0 || m > n)
20         return 0;
21     if(m == 0 || m == n)
22         return 1;
23     res = 1;
24     for (i = 1;i <= m;i++){
25         res = res * (n - m + i) / i;
26     }
27     return (int)res;
28 }
29 
30 /*
31 int func(int n, int m){
32     if(m < 0 || m > n)
33         return 0;
34     if(m == 0 || m == n)
35         return 1;
36     return func(n - 1, m) + func(n - 1, m - 1);
37 }
38 */

 

task7

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

 

posted @ 2025-04-07 19:36  闫芊语  阅读(5)  评论(0)    收藏  举报