作业
task1:
1 #include<stdio.h> 2 char score_to_grade(int score); 3 int main(){ 4 int score; 5 char grade; 6 7 while(scanf("%d",&score)!=EOF){ 8 grade = score_to_grade(score); 9 printf("分数:%d, 等级: %c\n\n",score,grade); 10 } 11 return 0; 12 } 13 14 char score_to_grade(int score){ 15 char ans; 16 17 switch(score/10){ 18 case 10: 19 case 9: ans = 'A';break; 20 case 8: ans = 'B';break; 21 case 7: ans = 'C';break; 22 case 6: ans = 'D';break; 23 default: ans = 'E'; 24 25 } 26 return ans; 27 }
问题1:功能是将分数转化为相应的等级。形参类型是整形,返回值类型是字符型。
问题2:有问题,更改后输入一个分数会输出许多等级。
task2:
1 #include<stdio.h> 2 int sum_digits(int n); 3 int main(){ 4 int n; 5 int ans; 6 7 while(printf("Enter n:"),scanf("%d", &n)!=EOF){ 8 ans = sum_digits(n); 9 printf("n = %d,ans = %d\n\n",n,ans); 10 } 11 return 0; 12 13 } 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 23 }
问题一:sum_digits是自己写的函数,为了把输入的n每个数位上的数字提出来加在一起赋值给ans。
问题二:可以实现,第一种是利用迭代方式把n每个数字提出来加给ans。第二种是利用递归方式实现把n的每个数位的数字提出来给ans。
task3:
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 10 } 11 return 0; 12 13 } 14 int power(int x,int n){ 15 int t; 16 17 if(n == 0) 18 return 1; 19 else if(n%2) 20 return x*power(x,n-1); 21 else{ 22 t = power(x,n/2); 23 return t*t; 24 } 25 }
问题一:通过递归实现x的n次方的计算。
问题二:power是递归函数。n==0是递归的边界,n为奇数时,可以表示为x*x的n-1次幂;n为偶数时,可以表示为x乘以x的一半次幂的平方。
task4:
1 #include<stdio.h> 2 #include<math.h> 3 int is_prime(int num){ 4 if (num<=1) 5 return 0; 6 int i=2; 7 for(i;i<=sqrt(num);i++){ 8 if(num%i==0) 9 return 0; 10 } 11 return 1; 12 13 } 14 void double_prime(int x){ 15 int i; 16 for(i=2;i<=x-2;i++){ 17 if(is_prime(i)&&is_prime(i+2)){ 18 printf("%d %d\n",i,i+2); 19 } 20 } 21 } 22 int main(){ 23 int x=100; 24 double_prime(x); 25 return 0; 26 }
实验五:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 unsigned int move_count = 0; 5 6 void hanoi(unsigned int n, char from, char temp, char to); 7 void moveplate(unsigned int n, char from, char to); 8 9 int main() { 10 unsigned int n; 11 while (scanf("%u", &n)!= EOF) { 12 move_count = 0; 13 hanoi(n, 'A', 'B', 'C'); 14 printf("一共需要移动 %u 次\n", move_count); 15 } 16 return 0; 17 } 18 19 void hanoi(unsigned int n, char from, char temp, char to) { 20 if (n == 1) { 21 moveplate(n, from, to); 22 } 23 else { 24 hanoi(n - 1, from, to, temp); 25 moveplate(n, from, to); 26 hanoi(n - 1, temp, from, to); 27 } 28 } 29 30 void moveplate(unsigned int n, char from, char to) { 31 move_count++; 32 printf("%u:%c-->%c\n", n, from, to); 33 }
实验六:
递归:
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 return 0; 13 14 } 15 int fac(int num){ 16 int i,p = 1; 17 for(i = 1;i<=num;i++){ 18 p*=i; 19 } 20 return p; 21 } 22 int func(int n,int m){ 23 if(n<m) 24 return 0; 25 if(n==m||m==0) 26 return 1; 27 else{ 28 return fac(n)/(fac(m)*fac(n-m)); 29 } 30 31 }
迭代:
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 return 0; 13 14 } 15 int func(int n,int m){ 16 if(n<m) 17 return 0; 18 if(n==m||m==0) 19 return 1; 20 int result = 1; 21 int i; 22 int min_m_nm = (m<(n-m))?m:(n-m); 23 for(i=0;i<min_m_nm;i++){ 24 result*=(n-i); 25 result/=(i+1); 26 27 } 28 return result; 29 30 31 }
实验七:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 函数声明 5 void print_charman(int n, int j); 6 7 int main() { 8 int n; 9 10 printf("Enter n: "); 11 scanf("%d", &n); 12 print_charman(n, 0); 13 14 return 0; 15 } 16 17 void print_charman(int n, int j) 18 { 19 if (n <= 0) { 20 return; 21 } 22 int i; 23 for (i = 0; i < j; i++) { 24 printf(" "); 25 } 26 for (i = 0; i < 2 * n - 1; i++) { 27 printf(" o "); 28 } 29 printf("\n"); 30 for (i = 0; i < j; i++) { 31 printf(" "); 32 } 33 for (i = 0; i < 2 * n - 1; i++) { 34 printf("<H> "); 35 } 36 printf("\n"); 37 for (i = 0; i < j; i++) { 38 printf(" "); 39 } 40 for (i = 0; i < 2 * n - 1; i++) { 41 printf("I I "); 42 } 43 printf("\n"); 44 print_charman(n - 1, j + 7); 45 }