找回密码
 立即注册
首页 业界区 安全 实验二

实验二

堠秉 2025-6-1 20:43:51
实验任务1:
Q1:解释lin13代码的功能
A1:设计出所需要取的随机数的区间,如题目中为区间100的随机数
Q2:解释line14使用格式符%04d起到什么作用
A2:确保number所占位数为4位,不够则用0来填充
Q3:这个程序的功能是什么
A3:取该专业学号伪随机数,可用于抽奖或抽人回答问题
源代码:
1.gif
2.gif
  1. 1 #include<stdio.h>
  2. 2 #include<stdlib.h>
  3. 3 #include<time.h>
  4. 4
  5. 5 #define N 5
  6. 6
  7. 7 int main() {
  8. 8     int number;
  9. 9     int i;
  10. 10
  11. 11     srand(time(0));
  12. 12     for (i = 0; i < N; ++i) {
  13. 13         number = rand() % 100 + 1;
  14. 14             printf("20248328%03d\n", number);
  15. 15
  16. 16
  17. 17     
  18. 18     }
  19. 19
  20. 20
  21. 21     return 0;
  22. 22 }
复制代码
实验任务1运行截图:
3.png

 
 
实验任务2:
Q1:line53代码的用途?如果去掉,会有什么影响?
A1:清零已选的商品,重置售货机;去掉会导致下次使用总额有个初值,会导致bug
Q2:line17-18, 使用了break语句;line20-23, line28-31, 使用了continue语句。在循环中使用break和 continue有什么区别? 
A2:break是终止当前循环,跳出循环。continue是跳出当前一次的循环,开始下一次的循环。
Q3:line33-44,使用了switch语句实现多分支。通常情况下,在switch语句中使用default子句有利于代码 运行时错误排查,这个程序中,是否有必要增加default子句?你的答案和原因。
A3:没必要,在第20行中,已经将default所可能发生的情况给排除了。
源代码:
4.gif
5.gif
  1. 1 #include <stdio.h>
  2. 2 int main()
  3. 3  {
  4. 4        int choice, quantity;
  5. 5        float total_price = 0, amount_paid, change;
  6. 6           while (1)
  7. 7              {
  8. 8                   printf("\n自动饮料售卖机菜单:\n");
  9. 9                   printf("1. 可乐 - 3 元/瓶\n");
  10. 10                   printf("2. 雪碧 - 3 元/瓶\n");
  11. 11                   printf("3. 橙汁 - 5 元/瓶\n");
  12. 12                   printf("4. 矿泉水 - 2 元/瓶\n");
  13. 13                   printf("0. 退出购买流程\n");
  14. 14                   printf("请输入饮料编号: ");
  15. 15                       scanf_s("%d", &choice);
  16. 16                if (choice == 0)
  17. 17                              break;
  18. 18                 if (choice < 1 || choice > 4)
  19. 19                     {
  20. 20                             printf("无效的饮料编号,请重新输入。\n");
  21. 21                                  continue;
  22. 22              }
  23. 23                    printf("请输入购买的数量: ");
  24. 24                    scanf_s("%d", &quantity);
  25. 25                         if (quantity < 0)
  26. 26                             {
  27. 27                                 printf("购买数量不能为负数,请重新输入。\n");
  28. 28                                 continue;
  29. 29               }
  30. 30                  switch (choice) {
  31. 31                   case 1:
  32. 32                    case 2:
  33. 33                        total_price += 3 * quantity;
  34. 34                              break;
  35. 35                    case 3:
  36. 36                           total_price += 5 * quantity;
  37. 37                             break;
  38. 38                    case 4:
  39. 39                            total_price += 2 * quantity;
  40. 40                             break;
  41. 41            
  42. 42         }
  43. 43                   printf("请投入金额: ");
  44. 44                   scanf_s("%f", &amount_paid);
  45. 45                   change = amount_paid - total_price;
  46. 46                   printf("本次购买总价: %.2f 元\n", total_price);
  47. 47                   printf("找零: %.2f 元\n", change);
  48. 48                   total_price = 0;
  49. 49          }
  50. 50      printf("感谢您的购买,欢迎下次光临!\n");
  51. 51      return 0;
  52. 52      }
复制代码
实验任务2运行截图:
6.png

 
 
实验任务3:
源代码:
7.gif
8.gif
  1. 1 #include<stdio.h>
  2. 2 #include<ctype.h>
  3. 3 int main() {
  4. 4     char color;
  5. 5     printf("请输入此时交通信号灯的颜色(红:r,黄:y,绿:g):\n");
  6. 6     
  7. 7     while ((color=getchar())!=EOF)
  8. 8     {
  9. 9         while ((getchar()) != '\n' && !feof(stdin));
  10. 10         
  11. 11         switch (color)
  12. 12         {
  13. 13
  14. 14         case('r'):printf("stop!\n"); break;
  15. 15         case('y'):printf("wait a minute!\n"); break;
  16. 16         case('g'):printf("go go go\n"); break;
  17. 17         default:
  18. 18             if (isalpha(color))
  19. 19                 printf("something must be wrong...\n\n\n");
  20. 20             printf("请输入现在你所看到的颜色(红:r,黄:y,绿:g):\n");
  21. 21             break;
  22. 22         }
  23. 23         
  24. 24     }
  25. 25     return 0;
  26. 26 }
复制代码
实验任务3运行截图:
9.png

 
 
实验任务4:
源代码:
10.gif
11.gif
  1. 1 #include<stdio.h>
  2. 2
  3. 3 int main()
  4. 4 {
  5. 5     printf("输入今日的若干笔开销,输入-1时终止:\n");
  6. 6     int count = 0;
  7. 7     double m=0, total=0, max=0, min=0;
  8. 8     while (1)
  9. 9     {
  10. 10         scanf_s("%lf", &m);
  11. 11         if (m != -1)
  12. 12         {
  13. 13             if (m > 20000 || m < 0) {
  14. 14                 printf("请重新输入一个小于20000元和大于0元的有效值:");
  15. 15                 scanf_s("%lf", &m);
  16. 16
  17. 17             }
  18. 18             else{
  19. 19
  20. 20                 if (count == 0)
  21. 21                 {
  22. 22                     min = m;
  23. 23                     max = m;
  24. 24
  25. 25                 }
  26. 26                 else
  27. 27                 {
  28. 28                     if (max < m)
  29. 29                         max = m;
  30. 30                     if (m < min)
  31. 31                         min = m;
  32. 32                 }
  33. 33                 count += 1;
  34. 34                 total += m;
  35. 35             }
  36. 36         }
  37. 37         else
  38. 38             break;
  39. 39         
  40. 40     }
  41. 41     printf("今日累计消费总额为%.1lf\n", total);
  42. 42     printf("今日最高开销为%.1lf\n", max);
  43. 43     printf("今日最低开销为%.1lf\n", min);
  44. 44     return 0;
  45. 45
  46. 46 }
复制代码
实验任务4运行截图:
12.png

 
 
实验任务5:
源代码:
13.gif
14.gif
  1. 1 #include<stdio.h>
  2. 2 #include<stdlib.h>
  3. 3 #include<time.h>
  4. 4 #define N 10
  5. 5 int main()
  6. 6 {
  7. 7     int i, day, x = 0;
  8. 8     printf("猜猜2025年哪天是你的lucky day\n");
  9. 9     printf("你有十次机会,猜吧从1到365:");
  10. 10     srand(time(0));
  11. 11     day = rand() % 365 + 1;
  12. 12     for (i = 0; i < N; ++i)
  13. 13     {
  14. 14         scanf_s("%d", &x);
  15. 15         if (x == day)
  16. 16         {
  17. 17             printf("哇,猜中了\n");
  18. 18             break;
  19. 19         }
  20. 20         else if (x < day)
  21. 21             printf("你猜的日期早了,你的lucky day还没到呢\n\n再猜(你还有%d次机会):", 9 - i);
  22. 22         else if (x > day)
  23. 23             printf("你猜的日期晚了,你的lucky day在前面呢\n\n再猜(你还有%d次机会):",9-i);
  24. 24
  25. 25     }
  26. 26     if (i == 10)
  27. 27         printf("你的次数用完了,偷偷告诉你你的lucky day是:%d", day);
  28. 28     return 0;
  29. 29 }
复制代码
实验任务5运行截图:
15.png

 
 
实验任务6:
源代码:
16.gif
17.gif
  1. 1 #include <stdio.h>
  2. 2
  3. 3 int main() {
  4. 4     int r, i, j;
  5. 5
  6. 6
  7. 7     printf("请输入倒三角的行数: ");
  8. 8     scanf_s("%d", &r);
  9. 9
  10. 10
  11. 11     for (i = r; i >= 1; --i)
  12. 12     {
  13. 13
  14. 14         for (j = 0; j < r - i; ++j) {
  15. 15             printf("      ");
  16. 16         }
  17. 17
  18. 18         for (j = 0; j < 2 * i - 1; ++j) {
  19. 19             printf(" 0 ");
  20. 20             printf("   ");
  21. 21         }
  22. 22         printf("\n");
  23. 23         for (j = 0; j < r - i; ++j) {
  24. 24             printf("      ");
  25. 25         }
  26. 26         for (j = 0; j < 2 * i - 1; ++j) {
  27. 27             printf("<H>");
  28. 28             printf("   ");
  29. 29         }
  30. 30
  31. 31         printf("\n");
  32. 32         for (j = 0; j < r - i; ++j) {
  33. 33             printf("      ");
  34. 34         }
  35. 35         for (j = 0; j < 2 * i - 1; ++j) {
  36. 36             printf("/ \");
  37. 37             printf("   ");
  38. 38
  39. 39         }
  40. 40         printf("\n");
  41. 41         for (j = 0; j < r - i; ++j) {
  42. 42             printf(" ");
  43. 43         }
  44. 44         printf("\n");
  45. 45     }
  46. 46
  47. 47     return 0;
  48. 48 }
复制代码
实验任务6运行截图:
18.png

 
 
实验总结:这次的实验2难度上升了很多,但是熟练度已经不是第一次实验中的我所能比拟的,这次的实验更偏向于在现实生活中的应用,例如随机数,记账,售货机之类的,我在想,在生活中或许可以更好的利用自己在这门课上所培养的算法思维。这次实验中也出现了很多问题,例如在实验3中,回车作为一个字符,导致“something must be wrong”总是多打一行,在与舍友的交流中我们有了两个解决方法,一个是清空域,另一个就是多打一个getchar专门用来接收回车。总之,这次的实验有难度,但是也很有趣。

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