实验三

任务一:

 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 // 函数定义
13 char score_to_grade(int score) {
14     char ans;
15     switch(score/10) {
16     case 10:
17     case 9:   ans = 'A'; break;
18     case 8:   ans = 'B'; break;
19     case 7:   ans = 'C'; break;
20     case 6:   ans = 'D'; break;
21     default:  ans = 'E';
22    }
23     return ans;
24 }

问题一:函数的功能是根据输入的分数返回分数所对应的等级,形参类型是整形,返回值是字符型。

问题二:有问题,没有break,程序会将只读字符型赋值给字符型ans。

任务二:

 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 #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 }

问题1:求x的n次方。

问题2:是递归函数。

任务四:

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

任务五:

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

任务六:

迭代:

 1 #include<stdio.h>
 2 int func(int n,int m){
 3     int a=1,b=1,c=1;
 4     for(int i=1;i<=n;i++){
 5         a=a*i;
 6     }
 7     for(int i=1;i<=m;i++){
 8         b=b*i;
 9     }
10     for(int i=1;i<=n-m;i++){
11         c=c*i;
12     }
13     return a/(c*b);
14 }
15 int main(){
16     int n,m;
17     int ans;
18     while(scanf("%d%d",&n,&m)!=EOF){
19         ans=func(n,m);
20         printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);
21     }
22     return 0;
23 }

递归:

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

任务七:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void print_charman(int n);
 5 
 6 int main() {
 7     int n;
 8 
 9     printf("Enter n: ");
10     scanf("%d", &n);
11     print_charman(n); // 函数调用
12 
13     return 0;
14 }
15 
16 void print_charman(int n)
17 {
18     int i, j;
19     for (i = 0; i < n; i++)
20     {
21         for (j = 0; j < i; j++)
22         {
23             printf("\t");
24         }
25         for (j = 0; j < 2*n - 2*i-1; j++)
26         {
27             printf(" O \t");
28         }
29         printf("\n");
30 
31         for (j = 0; j < i; j++)
32         {
33             printf("\t");
34         }
35         for (j = 0; j < 2*n - 2*i-1; j++)
36         {
37             printf("<H>\t");
38         }
39         printf("\n");
40 
41         for (j = 0; j < i; j++)
42         {
43             printf("\t");
44         }
45         for (j = 0; j < 2*n - 2*i-1; j++)
46         {
47             printf("I I\t");
48         }
49         printf("\n\n");
50     }
51 
52 }

posted @ 2024-10-24 01:15  大红鞭炮炸鬼子  阅读(14)  评论(0编辑  收藏  举报