tgwz

实验3

task1
 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 }

A1:将学生分数转化成对应等级;int;char

A2:没有break 导致逻辑错误

task2

 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,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 }

A1:计算输入数字各个位数字之和

A2:能,第一种是迭代法 ,第二种是递归法

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     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 }

 A1:计算x的n次方

A2:

image

task4

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

image

 

task5

 迭代

 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 a=1,b=1,c,i,j;
17     for(i=n-m+1;i<=n;i++){
18         a*=i;
19     }
20     for(j=1;j<=m;j++){
21         b*=j;
22     }
23     c=a/b;
24     return c;
25     
26 }

递归

 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     if(n==m||m==0){
17         return 1;
18     } 
19     else{
20         return func(n-1,m)*func(n-1,m-1);
21     }
22 }

task6

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

image

 

task7

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void print_charman(int n); 
 5 int main() {
 6     int n;
 7 
 8     printf("Enter n: ");
 9     scanf("%d", &n);
10     print_charman(n); 
11        
12     return 0;
13 }
14 void print_charman(int n){
15 int i,m,row,j;
16 for(i=0;i<n;i++){
17 
18     for(row=0;row<3;row++){
19             for(m=0;m<i;m++){
20         printf("    \t");
21     }
22         for(j=0;j<2*n-1-i*2;j++){
23             
24             switch(row){
25                 case 0:printf(" o\t");continue;
26                 case 1:printf("<H>\t");continue;
27                 case 2:printf("I I\t");continue;
28             }
29             printf("\n");
30         }
31             printf("\n");
32     }
33 } 
34 }

 

posted on 2025-10-27 21:15  添罐望仔  阅读(0)  评论(0)    收藏  举报

导航