实验3

task1

程序

 1 #include<stdio.h>
 2 #include<stdlib.h>
 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     system("pause");
14     return 0;
15 }
16 
17 
18 char score_to_grade(int score){
19     char ans;
20 
21     switch(score/10){
22     case 10:
23     case 9: ans = 'A'; break;
24     case 8: ans = 'B'; break;
25     case 7: ans = 'C'; break;
26     case 6: ans = 'D'; break;
27     default: ans = 'E';
28     }
29     return ans;
30 }

运行结果

ans1:功能:将输入的整数分数(score)转换为对应的等级(A,B,C,D,E);形参类型:int score:接收一个整数类型的分数值;返回值类型:char。

ans2:1."A" 是字符串(char 类型),而 ans 是 char 类型,类型不匹配。2.缺少 break 语句在 case 9:、case 8:、case 7:、case 6: 后均未写 break。3.混合字符串和字符"A"/"B"/"C"/"D" 是字符串,而 'E' 是字符。

 

task2

程序

 1 #include <stdio.h>
 2 #include<stdlib.h>
 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     system("pause");
14     return 0;
15 }
16 
17 int sum_digits(int n){
18     int ans=0;
19 
20     while(n!=0){
21         ans+=n%10;
22         n/=10;
23     }
24 
25     return ans;
26 }

运行结果

ans1:功能:计算一个整数 n 的各位数字之和。

ans2:不能完全实现同等效果,原因:1.负数处理问题:原迭代实现中,while(n != 0) 会自动处理负数的各位数字(因为取模运算会保留符号),递归实现没有处理负数的情况,会导致错误结果(如输入-123会得到-6而不是6)。2.递归终止条件:递归版本在 n < 10 时直接返回 n,这会导致对负数返回错误值。

 

task3

程序

 1 #include <stdio.h>
 2 #include<stdlib.h>
 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     system("pause");
14     return 0;
15 }
16 
17 int power(int x,int n){
18     int t;
19 
20     if(n==0)
21         return 1;
22     else if(n%2)
23         return x*power(x,n-1);
24     else{
25         t=power(x,n/2);
26         return t*t;
27     }
28 }

运行结果

 ans1:功能是计算整数 x 的 n 次幂。

ans2:是递归函数。

 

task4

程序

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int is_prime(int n);
 4 
 5 int main(){
 6     int i,c=0;
 7     printf("100以内的孪生素数:\n");
 8     for(i=1;i<=100;++i){
 9         if (is_prime(i)){
10             if (is_prime(i+2)){
11                 printf("%d %d\n",i,i+2);
12                 c+=1;
13             }
14         }
15     }
16     printf("100以内的孪生素数共有%d个\n",c);
17     system("pause");
18     return 0;
19 }
20 
21 int is_prime(int n){
22     int i,f=1;
23     if (n==1)
24         f=0;
25     for(i=2;i<=n/2;++i){
26         if (n%i==0){
27             f=0;
28             break;
29         }
30     }
31     return f;
32 }

运行结果

 

task5

程序

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 void hanoi(int n, char from, char to, char via, int *count) {
 4     if (n == 1) {
 5         printf("1: %c --> %c\n", from, to);
 6         (*count)++;
 7     } 
 8     else {
 9         hanoi(n - 1, from, via, to, count);
10         printf("%d: %c --> %c\n", n, from, to);
11         (*count)++;
12         hanoi(n - 1, via, to, from, count);
13     }
14     system("pause");
15 }
16  
17  int main(){
18      int n;
19      while (scanf("%d", &n) != EOF) {
20          int count = 0;
21          hanoi(n, 'A', 'C', 'B', &count);
22          printf("一共移动了%d次.\n\n", count);
23      }
24      return 0;
25 }

运行结果

task6-1迭代

程序

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int func(int n, int m);   // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8 
 9     while(scanf("%d%d", &n, &m) != EOF) {
10         ans = func(n, m);   // 函数调用
11         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12     }
13     system("pause");
14     return 0;
15 }
16 int func(int n, int m)
17 {
18     int i,j,h=1,l=1;
19     for(i=1;i<=m;i++)
20         l*=i;
21     for(j=n-m+1;j<=n;j++)
22         h*=j;
23     return h/l;
24 }

运行结果

 

task6-2递归

程序

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int func(int n, int m);   // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8 
 9     while(scanf("%d%d", &n, &m) != EOF) {
10         ans = func(n, m);   // 函数调用
11         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12     }
13     system("pause");
14     return 0;
15 }
16 int func(int n, int m)
17 {
18     if(n==m)
19         return 1;
20     if(n<m)
21         return 0;
22     if(m==0)
23         return 1;
24     return func(n-1,m)+func(n-1,m-1);
25 }

运行结果

 

task7

程序

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int gcd(int a,int b,int c);
 4 int main() {
 5     int a, b, c;
 6     int ans;
 7 
 8     while(scanf("%d%d%d", &a, &b, &c) != EOF) {
 9         ans = gcd(a, b, c);
10         printf("最大公约数: %d\n\n", ans);
11     }
12 
13     return 0;
14 }
15 int gcd(int a,int b,int c)
16 {
17     int mini,i;
18     mini=a;
19     if (b<mini)
20         mini=b;
21     else if(c<mini)
22         mini=c;
23     for(i=mini;i>0;i--)
24     {
25         if(a%i==0 && b%i==0 && c%i==0)
26             return i;
27     }
28 }

运行结果

 

posted @ 2025-04-09 14:38  OasisShining  阅读(38)  评论(0)    收藏  举报