task1.c

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

问题1:函数 score_to_grade 的功能是什么?形参类型、返回值类型是什么?
答:功能是把分数转化为相应的等级并且赋给grade,形参类型是int,返回值类型是char。

问题2:如果line21-28以下形式,有问题吗?如果有,指出有哪些问题?
答:有问题。
1.%c无法输出字符串,需要改为%s
2.char类型的变量无法存储字符串,需要使用char类型数组
因此无论输入什么都只可能输出E,或者导致程序出错

 

task2.c

 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     }
10     return 0;
11 }
12 int sum_digits(int n){
13     int ans=0;
14     while(n != 0){
15         ans+=n%10;
16         n/=10;
17     }
18     return ans;
19 }

问题1:函数 sum_digits 的功能是什么?

答:将n的各个位数相加,并返回给ans

问题2:如果保持 main 代码和函数 sum_digits 声明不变,把函数 sum_digits 定义成如下实现方
式,能实现同等的效果吗?

如果不能实现同等效果,分析原因。

如果能实现同等效果,说明两种实现方式背后的算法思维区别。

答:能。原代码的算法用的是迭代,用循环的方式来的到结果。

更改后的代码用的是递归的思想,通过一个函数不断引用自身来得到所需的结果。

 

task3.c

 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: 函数 power 的功能是什么?

答:计算出x的n次方,并返回该值。

问题2:函数 power 是递归函数吗?如果是,找出递归模式。写出这个递归模式对应的数学公式模
型。

答:是。

 

task4.c

 

 1 #include<stdio.h>
 2 
 3 int is_prime(int n);
 4 
 5 int main(){
 6     printf("100以内的孪生素数\n");
 7     int n,num=0;
 8     for(n=2;n<100;n++){
 9     if(is_prime(n)==1)
10         if(is_prime(n+2)==1){
11         printf("%d %d\n",n,n+2);
12         num++;}
13     }
14     printf("100以内的孪生素数有%d个",num);
15 return 0;
16 }
17 
18 int is_prime(int n){
19     int i;
20     for(i=2;i<n;i++){
21         if(n%i==0) return 0;
22     }
23     return 1;
24 }

 

task5.c

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int i=0;
 4 void hanoi(int n,char from,char temp,char to);
 5 void moveplate(int n,char from,char to);
 6 int main(){
 7    int n;
 8    while(scanf("%d",&n)!=EOF){
 9        hanoi(n,'A','B','C');
10        printf("一共移动了%d次\n",i);
11        system("pause");
12    }
13 return 0;
14 }
15 void hanoi(int n,char from,char temp,char to)
16 {
17     if(n==1) moveplate(n,from,to);
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("%d:%c-->%c\n",n,from,to);
26     i++;
27 }
28 }

 

task6_1.c

 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 int func(int n, int m){
15 int i,a=1,b=1;
16 if(m>n){
17 return 0;
18 }
19 else
20 {for(i=n-m+1;i<=n;i++) a*=i;
21 for(i=1;i<=m;i++) b*=i;
22 return a/b;
23 }
24 }

 

task6_2.c

 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 int func(int n, int m){
15 if(m>n) return 0;
16 else if(n==m) return 1;
17 else if(m==1) return n;
18 else return func(n-1,m)+func(n-1,m-1);
19 }

 

task7.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int 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        
13     return 0;
14 }
15 
16 int print_charman(int n){
17     int i,j,x,y=0,m=0;
18     for(i=n;i>0;i--){
19         x=2*i-1;
20         for(j=x;j>0;j--){for(y;y>0;y--)printf("      ");printf(" O    ");}
21         printf("\n");
22         y=m;
23         for(j=x;j>0;j--){for(y;y>0;y--)printf("      ");printf("<H>   ");}
24         printf("\n");
25         y=m;
26         for(j=x;j>0;j--){for(y;y>0;y--)printf("      ");printf("I I   ");}
27         printf("\n");
28         m++;
29         y=m;
30 }
31 return 0;
32 }