实验三
task1
1 #include<stdio.h> 2 char grade(int score) 3 { 4 char a; 5 switch(score/10) 6 { 7 case 10: 8 case 9:a = 'A';break; 9 case 8:a = 'B';break; 10 case 7:a = 'C';break; 11 case 6:a = 'D';break; 12 default:a = 'E'; 13 } 14 return a; 15 } 16 int main() 17 { 18 int score; 19 char g; 20 while(scanf("%d",&score)!=EOF) 21 { 22 g = grade(score); 23 printf("分数是%d,等第是%c\n",score,g); 24 } 25 return 0; 26 }
Q1:按照学生的分数进行分类;整型;字符型
Q2:有问题,会一次性的把下面的分类结果全部输出
task2
1 #include<stdio.h> 2 int sum(int n) 3 { 4 int a; 5 while(n!=0) 6 { 7 a += n%10; 8 n /= 10; 9 } 10 return a; 11 } 12 int main() 13 { 14 int n; 15 int ans; 16 while(scanf("%d",&n)!=EOF) 17 { 18 ans = sum(n); 19 printf("n=%d,ans=%d\n",n,ans); 20 } 21 return 0; 22 }
Q1:输出n的各个数位之和
Q2:能实现同等效果;原来的方法是通过迭代的方法直接取值,新方法是通过递归的方式
task3
1 #include<stdio.h> 2 int pow(int a,int b) 3 { 4 int n; 5 if(n==0) 6 { 7 return 1; 8 } 9 else if(n%2) 10 { 11 return a*pow(a,b-1); 12 } 13 else 14 { 15 n = pow(a,b/2); 16 return n*n; 17 } 18 } 19 int main() 20 { 21 int x,n,ans; 22 while(scanf("%d%d",&x,&n)!=EOF) 23 { 24 ans=pow(x,n); 25 printf("n=%d,ans=%d\n",n,ans); 26 } 27 return 0; 28 }
Q1:求出x的n次方
Q2:是递归,不会公式模型
task4
1 #include<stdio.h> 2 int is_prime(int n) 3 { 4 int i; 5 if(n == 1) 6 { 7 return 0; 8 } 9 for(i = 2;i <= n/2;i++) 10 { 11 if(n%i == 0) 12 { 13 return 0; 14 } 15 } 16 return 1; 17 } 18 19 int main() 20 { 21 int n,i=1,m=0; 22 scanf("%d",&n); 23 printf("%d以内的孪生素数:\n",n); 24 while(i<n) 25 { 26 if(is_prime(i)&&is_prime(i+2)) 27 { 28 printf("%d %d\n",i,i+2); 29 m++; 30 } 31 i++; 32 } 33 printf("%d以内的孪生素数共有%d个",n,m); 34 }
task5
1 #include<stdio.h> 2 #include<math.h> 3 void move(int n,char f,char t) 4 { 5 printf("%d: %c --> %c\n",n,f,t); 6 } 7 void hanoi(int n,char f,char m,char t) 8 { 9 if(n==1) 10 { 11 printf("%d: A --> C\n",n); 12 } 13 else 14 { 15 hanoi(n-1,f,t,m); 16 move(n,f,t); 17 hanoi(n-1,m,f,t); 18 } 19 } 20 21 int main() 22 { 23 int n; 24 while(scanf("%d",&n)!=EOF) 25 { 26 hanoi(n,'A','B','C'); 27 int m; 28 m = pow(2,n)-1; 29 printf("一共移动了%d次。\n",m); 30 } 31 return 0; 32 }
task6
迭代:
1 #include <stdio.h> 2 int func(int n, int m); 3 int main() 4 { 5 int n, m; 6 int ans; 7 while(scanf("%d%d", &n, &m) != EOF) 8 { 9 ans = func(n, m); 10 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 11 } 12 return 0; 13 } 14 15 int func(int n, int m) 16 { 17 int i,j=1,a,b=1,c,d=1,ans; 18 for(i=1;i<=n;i++) 19 { 20 j *= i; 21 } 22 for(a=1;a<=m;a++) 23 { 24 b *= a; 25 } 26 for(c=1;c<=n-m;c++) 27 { 28 d *= c; 29 } 30 ans = j/(b*d); 31 return ans; 32 }
递归:
1 #include <stdio.h> 2 int func(int n, int m); 3 int main() 4 { 5 int n, m; 6 int ans; 7 while(scanf("%d%d", &n, &m) != EOF) 8 { 9 ans = func(n, m); 10 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 11 } 12 return 0; 13 } 14 15 int func(int n, int m) 16 { 17 int ans; 18 if(m == 0) 19 { 20 return 1; 21 } 22 else if(n == m) 23 { 24 return 1; 25 } 26 else if(n<m) 27 { 28 return 0; 29 } 30 else 31 { 32 return func(n-1,m)+func(n-1,m-1); 33 } 34 }
task7
1 #include<stdio.h> 2 #include<stdlib.h> 3 int print_charman(int n); 4 int p; 5 int main() 6 { 7 int n; 8 printf("Enter n: "); 9 scanf("%d",&n); 10 p = n; 11 print_charman(n); 12 return 0; 13 } 14 15 int print_charman(int n) 16 { 17 int i=n,j,s; 18 if(i>0) 19 { 20 for(j=0;j<(2*i-1);j++) 21 { 22 printf(" O \t"); 23 } 24 printf("\n"); 25 for(s=p-n;s>0;s--) 26 { 27 printf("\t"); 28 } 29 for(j=0;j<(2*i-1);j++) 30 { 31 printf("<H>\t"); 32 } 33 printf("\n"); 34 for(s=p-n;s>0;s--) 35 { 36 printf("\t"); 37 } 38 for(j=0;j<(2*i-1);j++) 39 { 40 41 printf("I I\t"); 42 } 43 printf("\n"); 44 for(s=p-n+1;s>0;s--) 45 { 46 printf("\t"); 47 } 48 print_charman(n - 1); 49 } 50 }