daizybroa

导航

作业3

实验1

 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_s("%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 }

 

(1)将分数转换为对应的等级

(2)1.会依次执行从case 9到default的所有分支,造成输出结果错误。

2.双引号引用表示字符串(地址),于char类型不相符。

实验2

 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 }

 (1):计算整数n各位数字之和

(2):等效。一个是递归算法,另一个是循环算法,但效果是相同的。

实验3

 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 }

 实验4

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

 实验5

 1 #include <stdio.h>
 2 extern int sum=0;
 3 void move(int n,char x,char y)
 4 {
 5     printf("%d:%c-->%c\n",n,x,y);
 6     sum+=1;
 7 
 8 }
 9 void hanoi(int n,char a,char c,char b)
10 {
11     if(n==1)
12         move(n,a,c);
13     else
14     {
15         hanoi(n-1,a,b,c);
16         move (n,a,c);
17         hanoi(n-1,b,c,a);
18     }
19 
20 }
21 int main(){
22     int n;
23     do
24     {
25         scanf_s("%d",&n);
26         hanoi(n,'A','C','B');
27         printf("一共移动了%d次\n",sum);
28         sum=0;
29 
30     }while(n!=EOF);
31 
32 
33 
34     return 0;
35 }

 实验6

 1 #include <stdio.h>
 2 int func(int n, int m);   // 函数声明
 3 int jiecheng(int n);
 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 // 函数定义
18 // 待补足。。。(分别用迭代和递归实现)
19 /*int jiecheng(int n){
20     int i,sum;
21     sum =1;
22 
23     for(i = 1; i <= n;i++){
24         sum *= i;
25     }
26 
27     return sum;
28 }
29 
30 int func(int n, int m){
31     if(n < m)
32         return 0;
33 
34     return jiecheng(n)/(jiecheng(m)*jiecheng(n-m));
35 }*/
36 
37 int func(int n, int m){
38     if(n < m){
39         return 0;
40     }
41     
42     if(n == m){
43         return 1;
44     }
45 
46     if(n - m == 1){
47         return n;
48     }
49 
50     if(m == 0){
51         return 1;
52     }
53 
54     return func(n - 1,m)+func(n -1,m -1);
55 
56 }

 实验7

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

 

posted on 2025-04-10 07:30  孤独在一方的星  阅读(10)  评论(0)    收藏  举报