实验三
实验任务1
1 #include <stdio.h> 2 #include<stdlib.h> 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 17 char score_to_grade(int score) { 18 char ans; 19 20 switch(score/10) { 21 case 10: 22 case 9: ans = 'A'; break; 23 case 8: ans = 'B'; break; 24 case 7: ans = 'C'; break; 25 case 6: ans = 'D'; break; 26 default: ans = 'E'; 27 } 28 29 return ans; 30 }
问题1
该函数的作用为将不同分数段的分数转化为字母等级,90到100为A,80到90为B,70到80为C,60到70为D,60分以下为E
形参类型为整形,返回类型为字符型
问题2
有问题,第一个问题是A,B,C,D字符应该用单引号,
第二个问题是没有执行打破选择分支的break语句,完成第一次选择后会继续向下执行。
实验任务2
1 #include<stdio.h> 2 int sum_digits(int n); 3 int main() 4 { 5 int n; 6 int ans; 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 int sum_digits(int n){ 15 int ans =0; 16 while(n!=0){ 17 ans+=n%10; 18 n/=10; 19 } 20 return ans; 21 22 }
问题1
功能为求n各位数之和。
问题2
可以实现,第一种实现方法为迭代直接进行每一位的取余求和;第二种,即修改后的函数利用递归,将问题转化为低阶问题,当n<10时直接返回n,并且此时递归有出口。所以可以实现。
实验任务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 } 10 return 0; 11 } 12 int power(int x, int n) { 13 int t; 14 if(n == 0) 15 return 1; 16 else if(n % 2) 17 return x * power(x, n-1); 18 else { 19 t = power(x, n/2); 20 return t*t; 21 } 22 }
问题1
输出x的n次幂
问题2
实验任务4
1 #include<stdio.h> 2 int isprime(int n); 3 int main() 4 { 5 int m,cnt=0; 6 for(m=3;m<100;m++) 7 { 8 9 if(isprime(m+1)&&isprime(m-1)) 10 { 11 cnt++; 12 printf("%d %d\n",m-1,m+1); 13 14 } 15 } 16 printf("100以内孪生数共有%d个",cnt); 17 return 0; 18 } 19 20 int isprime(int n) 21 { 22 int ret=1; 23 int i; 24 for(i=2;i<n;i++) 25 { 26 if(n%i==0) 27 { 28 ret=0; 29 break; 30 } 31 32 } 33 return ret; 34 } 35
实验任务5
1 #include<stdio.h> 2 #include<stdlib.h> 3 void hanoi(unsigned int n,char from,char temp,char to); 4 void moveplate(unsigned int n,char from,char to); 5 int cnt=0; 6 int main() 7 { 8 unsigned int n; 9 while(scanf("%u",&n)!=EOF) 10 { 11 hanoi(n,'A','B','C'); 12 printf("移动次数%d\n",cnt); 13 cnt=0; 14 } 15 return 0; 16 17 } 18 19 void hanoi(unsigned int n,char from,char temp,char to) 20 { 21 if(n==1) 22 moveplate(n,from,to); 23 else 24 { 25 hanoi(n-1,from,to,temp); 26 moveplate(n,from,to); 27 hanoi(n-1,temp,from,to); 28 29 } 30 31 } 32 33 void moveplate(unsigned int n,char from,char to) 34 { 35 printf("%u:%c-->%c\n",n,from,to); 36 cnt+=1; 37 }
实验任务6
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 { 18 int a=1,b=1; 19 int c,d; 20 if(m==0) 21 return 1; 22 else if(n<m) 23 return 0; 24 for(d=1;d<=m;d++) 25 { 26 b=b*d; 27 } 28 for(c=n;c>=n-m+1;c--) 29 { 30 a=a*c; 31 } 32 return a/b; 33 34 }
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 { 18 if(m==0) 19 return 1; 20 else if(n<m) 21 return 0; 22 else 23 return(func(n-1, m)+func(n-1,m-1)); 24 25 }
实验任务7
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 return 0; 13 } 14 15 void print_charman(int n) 16 { 17 int i,t,cnt=1; 18 for(cnt=n;cnt>=1;cnt--) 19 { 20 for(t=1;t<=(n-cnt);t++) 21 { 22 printf("\t"); 23 } 24 for(i=2*cnt-1;i>=1;i--) 25 { 26 printf(" 0 \t"); 27 } 28 for(t=1;t<=(n-cnt);t++) 29 { 30 printf("\t"); 31 } 32 printf("\n"); 33 34 for(t=1;t<=(n-cnt);t++) 35 { 36 printf("\t"); 37 } 38 for(i=2*cnt-1;i>=1;i--) 39 { 40 printf("<H>\t"); 41 } 42 for(t=1;t<=(n-cnt);t++) 43 { 44 printf("\t"); 45 } 46 printf("\n"); 47 48 for(t=1;t<=(n-cnt);t++) 49 { 50 printf("\t"); 51 } 52 for(i=2*cnt-1;i>=1;i--) 53 { 54 printf("I I\t"); 55 } 56 for(t=1;t<=(n-cnt);t++) 57 { 58 printf("\t"); 59 } 60 printf("\n"); 61 62 } 63 }