实验3

实验任务1:

 1 #include <stdio.h>
 2 char score_to_grade(int score);
 3 
 4 int main() {
 5   int score;
 6   char grade;
 7   while(scanf("%d", &score) != EOF) {
 8     grade = score_to_grade(score); 
 9     printf("分数: %d, 等级: %c\n\n", score, grade);
10   }
11    return 0;
12 }
13   char score_to_grade(int score) {
14   char ans;
15   switch(score/10) {
16   case 10:
17   case 9: ans = 'A'; break;
18   case 8: ans = 'B'; break;
19   case 7: ans = 'C'; break;
20   case 6: ans = 'D'; break;
21   default: ans = 'E';
22  }
23   return ans;
24 }
View Code

 屏幕截图 2025-10-24 162759

问题1:输入分数返回等级。形参为整形,返回值为字符型。

问题2:双引号为字符串,应用单引号指字符型;末尾没有break,仍会继续。

 

实验任务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     return 0;
14 }
15 
16 int sum_digits(int n) {
17   int ans = 0;
18   while(n != 0) {
19     ans += n % 10;
20     n /= 10;
21  }
22   return ans;
23 }
View Code

 屏幕截图 2025-10-24 162849

问题1:输入一个数,计算它的所有位数上的数之和

问题2:可以,原代码为迭代,修改后为递归

 

实验任务3:

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

屏幕截图 2025-10-24 162927

问题1:计算x的n次方

问题2:是实验3

 

实验任务4:

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

屏幕截图 2025-10-24 174501

实验任务5:

5.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 
16 int func(int n,int m){
17     if(n<m)
18       return 0;
19     int i,k;
20     int t=1,j=1,y=1;
21     double anw;
22     for(i=1;i<=n;++i)
23         t=t*i;
24     for(i=1;i<=m;++i)
25         j=j*i;
26     k=n-m;
27     for(i=1;i<=k;++i)
28         y=y*i;
29     return anw=t/(j*y);
30 } 
View Code

屏幕截图 2025-10-24 180125

 

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

屏幕截图 2025-10-24 181426

实验任务6:

 1 #include <stdio.h>
 2 
 3 int gcd(int x,int y,int z);
 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 
17 int gcd(int x,int y,int z){
18     int i;
19     if(x<y&&x<z)
20      i=x;
21     if(y<x&&y<z)
22      i=y;
23     if(z<y&&z<x)
24      i=z;
25     for(;i>0;i--)
26      if(!(x%i)&&!(y%i)&&!(z%i)){
27       return i;
28       break;
29     }
30 }
View Code

屏幕截图 2025-10-24 183051

实验任务7:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 // 函数声明
 5 // 待补足
 6 // xxx
 7 void print_charman(int x);
 8 
 9 int main() {
10     int n;
11 
12     printf("Enter n: ");
13     scanf("%d", &n);
14     print_charman(n); // 函数调用
15        
16     return 0;
17 }
18 
19 // 函数print_charman定义
20 // 待补足
21 // xxx
22 void print_charman(int x){
23     int i,j,k;
24     
25     for(j=x;j>0;j--){ 
26         for(k=0;k<x-j;k++)
27          printf("\t");
28         for(i=0;i<j*2-1;i++){
29         printf(" O \t");
30         }
31     printf("\n");
32         for(k=0;k<x-j;k++)
33          printf("\t");
34         for(i=0;i<j*2-1;i++){
35         printf("<H>\t");
36         }
37     printf("\n");
38         for(k=0;k<x-j;k++)
39          printf("\t");
40          for(i=0;i<j*2-1;i++){
41         printf("I I\t");
42         }
43     printf("\n");
44 }
45 }
View Code

屏幕截图 2025-10-24 223224

屏幕截图 2025-10-24 223302

 

posted @ 2025-10-24 22:35  楊yyy  阅读(8)  评论(0)    收藏  举报