堠秉 发表于 2025-6-1 20:43:51

实验二

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

 
 
实验任务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所可能发生的情况给排除了。
源代码:
1 #include <stdio.h>
2 int main()
3{
4      int choice, quantity;
5      float total_price = 0, amount_paid, change;
6         while (1)
7            {
8                   printf("\n自动饮料售卖机菜单:\n");
9                   printf("1. 可乐 - 3 元/瓶\n");
10                   printf("2. 雪碧 - 3 元/瓶\n");
11                   printf("3. 橙汁 - 5 元/瓶\n");
12                   printf("4. 矿泉水 - 2 元/瓶\n");
13                   printf("0. 退出购买流程\n");
14                   printf("请输入饮料编号: ");
15                     scanf_s("%d", &choice);
16                if (choice == 0)
17                              break;
18               if (choice < 1 || choice > 4)
19                     {
20                           printf("无效的饮料编号,请重新输入。\n");
21                                  continue;
22            }
23                  printf("请输入购买的数量: ");
24                  scanf_s("%d", &quantity);
25                         if (quantity < 0)
26                           {
27                                 printf("购买数量不能为负数,请重新输入。\n");
28                                 continue;
29               }
30                  switch (choice) {
31                   case 1:
32                  case 2:
33                        total_price += 3 * quantity;
34                              break;
35                  case 3:
36                           total_price += 5 * quantity;
37                           break;
38                  case 4:
39                            total_price += 2 * quantity;
40                           break;
41            
42         }
43                   printf("请投入金额: ");
44                   scanf_s("%f", &amount_paid);
45                   change = amount_paid - total_price;
46                   printf("本次购买总价: %.2f 元\n", total_price);
47                   printf("找零: %.2f 元\n", change);
48                   total_price = 0;
49          }
50      printf("感谢您的购买,欢迎下次光临!\n");
51      return 0;
52      }实验任务2运行截图:

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

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

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

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

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 实验二