找回密码
 立即注册
首页 业界区 安全 作业3
蔡如风 2025-6-1 18:33:58
实验任务1
代码
  1. 1 #include <stdio.h>
  2. 2
  3. 3 char score_to_grade(int score);  // 函数声明
  4. 4
  5. 5 int main() {
  6. 6     int score;
  7. 7     char grade;
  8. 8     
  9. 9     while(scanf("%d", &score) != EOF) {
  10. 10         grade = score_to_grade(score);  // 函数调用
  11. 11         printf("分数: %d, 等级: %c\n\n", score, grade);
  12. 12     }
  13. 13     
  14. 14     return 0;
  15. 15 }
  16. 16
  17. 17 // 函数定义
  18. 18 char score_to_grade(int score) {
  19. 19     char ans;
  20. 20     
  21. 21     switch(score/10) {
  22. 22     case 10:
  23. 23         case 9:   ans = 'A'; break;
  24. 24         case 8:   ans = 'B'; break;
  25. 25         case 7:   ans = 'C'; break;
  26. 26         case 6:   ans = 'D'; break;
  27. 27         default:  ans = 'E';
  28. 28     }
  29. 29     
  30. 30     return ans;
  31. 31 }
复制代码
 
运行结果
1.png

问题1.函数 score_to_grade 的功能是根据输入的分数转换为对应的等级,形参类型是整型,返回值类型是字符。
问题2. 1.case后面没有了break,会执行后面的所有语句。
    2.单个字符需要用'  '进行引用
 
实验任务2
代码
  1. 1 #include <stdio.h>
  2. 2
  3. 3 int sum_digits(int n);  // 函数声明
  4. 4
  5. 5 int main() {
  6. 6     int n;
  7. 7     int ans;
  8. 8
  9. 9     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
  10. 10         ans = sum_digits(n);    // 函数调用
  11. 11         printf("n = %d, ans = %d\n\n", n, ans);
  12. 12     }
  13. 13
  14. 14     return 0;
  15. 15 }
  16. 16
  17. 17 // 函数定义
  18. 18 int sum_digits(int n) {
  19. 19     int ans = 0;
  20. 20
  21. 21     while(n != 0) {
  22. 22         ans += n % 10;
  23. 23         n /= 10;
  24. 24     }
  25. 25
  26. 26     return ans;
  27. 27 }
复制代码
运行结果
2.png

问题1;函数sum_digits的功能是将输入数字n各个位数上面的数字进行代数相加
问题2:可以实现同等的效果,前者是使用迭代的方法,后者是使用递归的思想。
 
实验任务3
代码:
  1. 1 include <stdio.h>
  2. 2
  3. 3 int power(int x, int n);    // 函数声明
  4. 4
  5. 5 int main() {
  6. 6     int x, n;
  7. 7     int ans;
  8. 8     
  9. 9     while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
  10. 10         ans = power(x, n);  // 函数调用
  11. 11         printf("n = %d, ans = %d\n\n", n, ans);
  12. 12     }
  13. 13     
  14. 14     return 0;
  15. 15 }
  16. 16
  17. 17 // 函数定义
  18. 18 int power(int x, int n) {
  19. 19     int t;
  20. 20     
  21. 21     if(n == 0)
  22. 22         return 1;
  23. 23     else if(n % 2)
  24. 24         return x * power(x, n-1);
  25. 25     else {
  26. 26         t = power(x, n/2);
  27. 27         return t*t;
  28. 28     }
  29. 29 }
复制代码
运行结果:
3.png

 问题1:函数的功能是进行幂指数的运算
问题2:是递归函数
    
4.jpeg

实验任务4
代码
  1. 1 #include <stdio.h>
  2. 2 #include <math.h>
  3. 3 int is_prime(int n);
  4. 4
  5. 5 int main() {
  6. 6     printf("100以内的了孪生素数\n");
  7. 7     int n = 5;
  8. 8     int sum = 0;
  9. 9     while (n < 100) {
  10. 10         if (is_prime(n) == 1 && is_prime(n - 2) == 1) {
  11. 11             sum++;
  12. 12             printf("%d %d\n", n - 2, n);
  13. 13         }
  14. 14         n += 2;
  15. 15     }
  16. 16     printf("100以内的了孪生素数共有%d个", sum);
  17. 17     return 0;
  18. 18 }
  19. 19
  20. 20 int is_prime(int n) {
  21. 21     int i = 2;
  22. 22     while (i <= n / 2) {
  23. 23         if ((n % i) != 0)i++;
  24. 24         if ((n % i) == 0)return 0;
  25. 25     }
  26. 26     return 1;
  27. 27 }
复制代码
运行结果
5.png

 实验感想:更加体会理解了递归函数的使用和流程,用递归表示会让代码很简单,但比较难以理解。此外,递归中全局变量的使用有时也至关重要。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册