实验二
实验任务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]