实验3

实验1

源代码

 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 // 函数定义
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

实验结果捕获

问题回答:1.函数定义 将输入的分数或整数 对应到相应的等级中去2.在结尾少了break 导致无法跳出while语句 导致继续执行 错误赋级 导致最后输出都为E

实验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 // 函数定义
13 int sum_digits(int n) {
14   int ans = 0;
15   while(n != 0) {
16     ans += n % 10;
17     n /= 10;
18  }
19   return ans;
20 }
View Code

实验结果捕获2

问题回答:1.将输入整数各个位上的数求和 即输入2049 输出2+0+4+9=15   2.能实现同样的输出 “原来的定义“”是循环法 依次从右往左 得到各位 并求和 “新的定义”是递归法 将原来的算法 递归为 去除原输入数的个位的数 求剩余位数上的和 加个位上的和

实验3

源代码

 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 
11   return 0;
12 }
13 // 函数定义
14 int power(int x, int n) {
15   int t;
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 } 
View Code

实验结果捕获3

问题回答:1.对输入的x和n 以x为底求x的n次方 2.是递归函数

实验4

源代码

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

实验结果IMG_20251028_122532

 

 

实验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     if(m>n){
14         return 0;
15     }
16     if(m==0||n==0){
17         return 1;
18     }
19     if(m>n-m){
20         m=n-m;
21     }
22     int result=1;
23     for(int i=0;i<m;i++){
24         result*=(n-i);
25     }
26     for(int i=2;i<=m;i++){
27         result/=i;
28     }
29     return result;
30 }
View Code

源代码递归

 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){
14         return 0;
15     }
16     if(m==0||n==n){
17         return 1;
18     }
19     return func(n-1,m)+func(n-1,m-1);
20 }
View Code

实验结果IMG_20251028_124206

 

实验6

源代码IMG_20251028_125931

 

 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){
15         min=b;
16     }
17     if(c< min){
18         min=c;
19     }
20     for(int i=min;i>=1;i--){
21         if(a%i==0&&b%i==0&&c%i==0){
22             return i;
23         }
24     }
25     return 1;
26 }
View Code

实验结果

实验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  
10     return 0;
11 }
12 void print_charman(int n){
13     for(int i=0;i<n;i++){
14     for(int tab=0;tab<i;tab++){
15         printf("\t");
16     }
17     for(int j=0;j<n-i;j++){
18         printf("0\t");
19     }
20     printf("\n");
21     for(int tab=0;tab<i;tab++){
22         printf("\t");
23     }
24     for(int j=0;j<n-i;j++){
25         printf("<H>\t");
26     }
27     printf("\n");
28     for(int tab=0;tab<i;tab++){
29         printf("\t");
30     }
31     for(int j=0;j<n-i;j++){
32         printf("I I\t");
33     }
34     printf("\n");
35 }
36 }
View Code

实验结果IMG_20251028_132404

 

posted @ 2025-10-28 13:34  错过不算爱  阅读(4)  评论(1)    收藏  举报