实验3

实验任务1

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

捕获

问题1:判断分数的等级;形参类型:int;返回值类型:char

问题2:没有break,最后结果都会变成'E';"A"为字符串,应该用'A'

实验任务2

 

 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:计算出输入数的各数位的数字之和

问题2:能

第一张为迭代,第二种为递归

实验任务3

 

 1 #include <stdio.h>
 2 int power(int x, int n);
 3 int main() {
 4     int x, n;
 5     int ans;
 6 
 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 
16     if(n == 0)
17         return 1;
18     else if(n % 2)
19         return x * power(x, n-1);
20     else {
21         t = power(x, n/2);
22         return t*t;
23     }
24 }

捕获

问题1:计算x的n次方

问题2:是

递归模式:power(x,0)=1;power(x,n(为奇数))=power(x,n-1);power(x,n(n为偶数))=power(x,n/2)

实验任务4

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

屏幕截图 2025-10-26 140948

实验任务5

迭代

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 int main(){
 4     int n,m;
 5     int ans;
 6     while(scanf("%d%d",&n,&m)!=EOF){
 7         ans=func(n,m); 
 8         printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);
 9     }
10     return 0;
11 }
12 int func(int n, int m) {
13     long long c=1;
14     for(int i=1;i<=m;i++){
15         c=c*(n-i+1)/i;
16     }
17     return (int)c;
18 }

屏幕截图 2025-10-26 142336

递归

 1 #include <stdio.h>
 2 int func(int n, int m);
 3 int main(){
 4     int n,m;
 5     int ans;
 6     while(scanf("%d%d",&n,&m)!=EOF){
 7         ans=func(n,m); 
 8         printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);
 9     }
10     return 0;
11 }
12 int func(int n, int m) {
13     if(m==n||m==0)
14         return 1;
15     else
16         return func(n-1,m)+func(n-1,m-1);
17 }

屏幕截图 2025-10-26 143027

实验任务6

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

屏幕截图 2025-10-26 145015

实验任务7

 

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

屏幕截图 2025-10-26 151245

 

posted @ 2025-10-26 15:13  202563160003  阅读(11)  评论(1)    收藏  举报