实验三

实验任务1

源代码

 1 #include <stdio.h>
 2 
 3 char score_to_grade(int score);
 4 
 5 int main() {
 6     int score;
 7     char grade;
 8 
 9     while(scanf("%d", &score) != EOF) {
10         grade = score_to_grade(score);
11         printf("分数: %d, 等级: %c\n\n", score, grade);
12     }
13 
14     return 0;
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 }

图片

问题

功能为通过成绩计算等第

类型为字符型

更改后会按顺序输出E,而不是对应的等第

实验任务2

源代码

 1 #include <stdio.h>
 2 
 3 int sum_digits(int n);
 4 
 5 int main() {
 6     int n;
 7     int ans;
 8     
 9     while(printf("Enter n: "), scanf("%d", &n) != EOF){
10         ans = sum_digits(n);
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13     
14     return 0;
15 }
16 int sum_digits(int n){
17     int ans = 0;
18     while(n != 0){
19         ans += n % 10;
20         n /= 10;
21     }
22     
23     return ans;

图片

问题

功能 得出这个数每位相加的值

 

能实现

原代码是ans每次加上n个位上的数,n再去掉个位的数,直至n为0

更改后为n每次除以10后n个位的数相加,如果只剩2位数,就能实现十位个位直接相加,因为n变为个位数了,所以停止,返回n了。

 

实验任务3

源代码

 

 1 #include <stdio.h>
 2 
 3 int power(int x, int n);
 4 
 5 int main(){
 6     int x, n;
 7     int ans;
 8     
 9     while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF){
10         ans = power(x, n);
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13     
14     return 0;
15 }
16 
17 int power(int x, int n){
18     int t;
19     if(n==0)
20         return 1;
21     else if(n % 2)
22         return x * power(x, n-1);
23     else{
24         t = power(x, n/2);
25         return t*t;
26     }
27 }

 

图片

问题

功能为求x的n次方

当n=0时,x的0次=1

当n>0时,x的n次=x*x的n-1次

 

实验任务4

源代码

 

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

 

图片

 

实验任务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 static int s = 0;
 6 int main(){
 7     unsigned int n;
 8     while(scanf("%u",&n) != EOF){
 9     hanoi(n,'A','B','C');
10     printf("一共移动了%d次\n",s);
11     s = 0;
12     }
13     system("pause");
14     return 0;
15 }
16 void hanoi(unsigned int n,char from,char temp,char to)
17 {
18     if(n == 1){
19         moveplate(n,from,to);
20         s++;
21     }
22     else
23     {
24         hanoi(n-1,from,to,temp);
25         moveplate(n,from,to);
26         hanoi(n-1,temp,from,to);
27         s++;
28     }
29 }
30 void moveplate(unsigned int n,char from,char to)
31 {
32     printf("%u: %c-->%c\n",n, from, to);
33 }

图片

 

实验任务6

源代码1(迭代)

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

图片

源代码2(递归)

 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 int func(int n, int m){
16     int s;
17     
18     if(m==0||n==m)
19     return 1;
20     else if(m>n)
21     return 0;
22     else
23     s = func(n-1,m)+func(n-1,m-1);
24     
25     return s;
26 }

图片

 

实验任务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     
13     return 0;
14 }
15 void print_charman(int n){
16     int i,j,s=0;
17     while(n>0)
18     {
19     for (j = 0; j < s ; j++)
20         printf("\t");
21     for(i=1;i<=2*n-1;i++){
22         printf("   O    ");
23     }
24     printf("\n");
25     
26     for (j = 0; j < s ; j++)
27         printf("\t");
28     for(i=1;i<=2*n-1;i++){
29         printf("  <H>   ");
30     }
31     printf("\n");
32     
33     for (j = 0; j < s ; j++)
34         printf("\t");
35     for(i=1;i<=2*n-1;i++){
36         printf("  I I   ");
37     }
38     printf("\n");
39         
40     n -= 1;
41     s++;
42     
43     }
44 }

图片

 

posted @ 2024-10-26 14:24  scjzl  阅读(3)  评论(0编辑  收藏  举报