实验3

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

 任务1

问题1:函数 score_to_grade 的功能是什么?形参类型、返回值类型是什么?
将分数对应转变为各个等级,int char
问题2:如果line21-28以下形式,有问题吗?如果有,指出有哪些问题?
有问题,没有break,语句会一直进行下去,最后都会变成E。
switch(score/10) {
case 10:
case 9: ans = "A";
case 8: ans = "B";
case 7: ans = "C";
case 6: ans = "D";
default: ans = 'E';
}   
任务2:
 1 #include<stdio.h>
 2 int sum_digits(int n);
 3 int main(){
 4     int n;
 5     int ans;
 6     while(printf("Enter n: "),scanf("%d",&n)!=EOF){
 7         ans=sum_digits(n);
 8         printf("n=%d,ans=%d\n\n",n,ans);
 9         } return 0;
10 }
11 int sum_digits(int n){
12     int ans=0;
13     while(n!=0){
14         ans+=n%10;
15         n/=10;
16     } return ans;
17 }

 

问题1:函数 sum_digits 的功能是什么?
将数字的各个数位上的数字相加
问题2:如果保持 main 代码和函数 sum_digits 声明不变,把函数 sum_digits 定义成如下实现方
式,能实现同等的效果吗?
如果不能实现同等效果,分析原因。
如果能实现同等效果,说明两种实现方式背后的算法思维区别
可以,第二种方法为递归
任务3:
 1 #include<stdio.h>
 2 int power(int x,int n);
 3 int main(){
 4     int x,n;
 5     int ans;
 6     while(printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){
 7         ans=power(x,n);
 8         printf("n=%d,ans=%d\n\n",n, ans);
 9     } return 0;
10 } 
11 int power(int x,int n){
12     int t;
13     if(n==0)
14     return 1;
15     else if(n%2)
16     return x*power(x,n-1);
17     else{
18         t=power(x,n/2);
19         return t*t;
20     } 
21 }

 

问题1: 函数 power 的功能是什么? 算出x的n次幂的值
问题2:函数 power 是递归函数吗?如果是,找出递归模式。写出这个递归模式对应的数学公式模
型。
是递归
任务4:
 1 #include<stdio.h>
 2 int is_prime(int x){
 3     int i;
 4     int rex;
 5     if(x<2) return 0;
 6     for(i=2;i<x;i++){
 7         if(x%i==0){
 8             rex=0; break;
 9         }else{ 
10             rex=1;
11         }
12     } return rex;
13 }
14 int main(){
15     printf("100以内的孪生素数:\n");
16     int cnt=0; 
17     int j=1;
18     while(j<98){
19         int rex;
20         int rix;
21         rex=is_prime(j);
22         rix=is_prime(j+2);
23         if(rex==1 && rix==1){
24         printf("%d  %d\n",j,j+2);
25         cnt++;
26         }
27         j++; 
28     }
29     printf("100以内的孪生素数共有%d个\n",cnt);
30     return 0;
31 }

 任务5:

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

 任务6:

 1 #include<stdio.h>
 2 int CQW(int c){
 3         int rex=1;
 4         for(int j=1;j<=c;j++){
 5         rex*=j;
 6     } return rex;
 7 }
 8 int func(int n, int m){
 9     int rex,rix,rmx;
10     int ans;
11     int l=n-m;
12     rex=CQW(n);
13     rix=CQW(m);
14     rmx=CQW(l);
15     ans=rex/(rix*rmx);
16     return ans; 
17 }
18 int main(){
19     int x,y;
20     while(scanf("%d%d", &x, &y) != EOF){
21         int ans;
22     if(y>x||x==0||y==0){
23         ans=0;
24     }else if(x==y){
25         ans=1;
26     }
27     else{
28         ans=func(x,y);
29     } 
30     printf("x = %d, y = %d, ans = %d\n\n", x, y, ans);
31     }  return 0;}
 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 int func(int n, int m) {
13     if (m == 0 || m == n) return 1;
14     if (m > n || m < 0) return 0;
15     return func(n - 1, m) + func(n - 1, m - 1);
16 }

 任务7

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

 

posted @ 2024-10-26 00:25  陈秋雯2024  阅读(14)  评论(0编辑  收藏  举报