实验3

task1

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

Q1:score_to_grade是一个自己定义的函数,方便我们将得分进行等级评定然后封存在字符中,方便后续调用。形参类型是int,返回值类型是char

Q2:有问题,如果没有break,那么会从满足的case开始之后的返回值都会多余且单字符不应该用双引号“”

task2

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

Q1:sum_digits是我们自行定义的一个函数,计算各数位上数字相加之和,方便后续调用

Q2:能实现同等效果,原代码的思维是循环的思维,改后的思维是函数递归的思维。

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 }

Q1:power是我们自己定义的一个函数,可以计算x的n次幂;且当n为0时结果为1

Q2:是递归函数,其对应的递归模式如图

task4

 

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

task5

 1 #include<stdio.h>
 2 void Hanoi(int n, char from, char to, char temp);
 3 int count;
 4 int main()
 5 {
 6     int n;
 7     scanf_s("%d", &n);
 8     Hanoi(n, 'A', 'C', 'B');
 9     printf("一共移动了%d次", count);
10     return 0;
11 }
12 void Hanoi(int n, char from, char to, char temp)
13 {
14     if (n == 1){
15         printf("%d : %c --> %c\n", n, from, to);
16         count++;
17     }
18     else{
19         count++;
20         Hanoi(n - 1, from, temp, to);
21         printf("%d : %c --> %c\n", n, from, to);
22         Hanoi(n - 1, temp, to, from);
23     }
24 }

 

task6

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

 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 int func(int n, int m){
17 int i,x,y,z;
18 x=1,y=1,z=1;
19 for(i=1;i<=n;i++){
20 x*=i;
21 }
22 for(i=1;i<=m;i++){
23 y*=i;        
24 }
25 for(i=1;i<=(n-m);i++){
26 z*=i;
27 }
28 return x/y/z;    
29 }
30 //迭代方式

task7

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int print_charman(int n);
 4 int r;
 5 int main(){
 6 int n;    
 7 printf("Enter n:");
 8 scanf("%d",&n);
 9 r=n;
10 print_charman(n);    
11 return 0;
12 }
13 int print_charman(n){
14 if(n>0){
15 int s,z;
16 for(s=2*n-1;s>0;s--) printf(" o \t");
17 printf("\n");
18 for(z=r-n;z>0;z--) printf("\t");
19 for(s=2*n-1;s>0;s--) printf("<H>\t");
20 printf("\n");
21 for(z=r-n;z>0;z--) printf("\t");
22 for(s=2*n-1;s>0;s--) printf("I I\t");
23 printf("\n\n");
24 for(z=r-n+1;z>0;z--) printf("\t");
25 print_charman(n-1);
26 }     
27 }

 

posted @ 2024-10-30 15:43  易香兑  阅读(3)  评论(0编辑  收藏  举报