实验2_C语言分支与循环基础应用

源代码

include <stdio.h>

int main()
{
int choice, quantity;
float total_price = 0, amount_paid, change;

while (1)
{
printf("\n自动饮料售卖机菜单:\n");
printf("1. 可乐 - 3 元/瓶\n");
printf("2. 雪碧 - 3 元/瓶\n");
printf("3. 橙汁 - 5 元/瓶\n");
printf("4. 矿泉水 - 2 元/瓶\n");
printf("0. 退出购买流程\n");
printf("请输入饮料编号: ");
scanf("%d", &choice);

if (choice == 0)
break;

if (choice < 1 || choice > 4)
{
printf("无效的饮料编号,请重新输入。\n");
continue;
}

printf("请输入购买的数量: ");
scanf("%d", &quantity);

if (quantity < 0) {
printf("购买数量不能为负数,请重新输入。\n");
continue;
}

if(choice == 1 || choice == 2)
total_price += 3 * quantity;
else if(choice == 3)
total_price += 5 * quantity;
else
total_price += 2 * quantity;

printf("请投入金额: ");
scanf("%f", &amount_paid);

change = amount_paid - total_price;
printf("本次购买总价: %.2f 元\n", total_price);
printf("找零: %.2f 元\n", change);

total_price = 0;
}
printf("感谢您的购买,欢迎下次光临!\n");
return 0;
}
运行结果如下
屏幕截图 2026-11-03 172211

问题1:line47代码total_price = 0;如果去掉,对程序有什么影响?

不能去掉。 原代码是“每次购买独立结算”的设计,total_price = 0; 负责在每次结算后归零。删掉它,total_price 会变成“累计总价”,但付款逻辑仍是“每次只投本次的钱”,两者不匹配,导致总价显示错误、找零为负、多次购买逻辑崩溃。

问题2:while循环中,有两处使用continue 语句。解释在循环中使用countinue语句,语义是什么?

两处都是“输入校验失败时的子句”——发现非法输入就跳过本次购买的全部处理,直接重新开始下一轮

实验结论:
1:total_price = 0; 不可删除。 该语句用于每次购买结算后将累计金额归零,保证“每次购买独立结算”。删除后 total_price 变为历史累计值,而投币仍按单次金额输入,将导致总价显示错误、找零出现负数,多次购买后逻辑完全失效。

2:continue 的语义是“跳过本次迭代剩余语句,进入下一次循环”。 本程序两处 continue 均位于输入校验失败处,作用是放弃本次购买流程(不输入数量 / 不算价 / 不投币 / 不找零),直接回到菜单重新选择;且均位于 total_price 累加之前,不会污染金额状态。与 break 不同,它不退出循环。

posted @ 2026-11-03 17:31  邓瞻  阅读(1)  评论(0)    收藏  举报