实验任务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专门用来接收回车。总之,这次的实验有难度,但是也很有趣。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |