实验二
任务一
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
int main() {
int number;
int i;
srand(time(0)); // 以当前系统时间作为随机种子
for(i = 0; i < N; ++i) {
number = rand() % 100 + 1;
printf("20490042%04d\n", number);
}
return 0;
}
Q1:生成5个20240042XXXX格式的学员编号,其中XXXX为0001~0100的随机整数
Q2:
Q3:确保输出为4位数字
Q4:以当前系统时间作为随机种子
任务二
点击查看代码
#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;
}

Q1:导致总价累加错误
Q2:当输入无效数量时,避免执行错误逻辑,
任务三
点击查看代码
#include <stdio.h>
int main() {
char color;
printf("请输入交通信号灯颜色(r/g/y): ");
while ((color = getchar()) != EOF) {
if (color == '\n') continue;
switch(color) {
case 'r':
case 'R': printf("stop!\n"); break;
case 'g':
case 'G': printf("go go go\n"); break;
case 'y':
case 'Y': printf("wait a minute\n"); break;
default: printf("something must be wrong...\n");
}
printf("请输入交通信号灯颜色(r/g/y): ");
}
return 0;
}

任务四
点击查看代码
#include <stdio.h>
#include <limits.h>
int main() {
double expense, max = -1, min = INT_MAX, sum = 0;
int count = 0;
printf("请输入每日开销(输入-1结束):\n");
while (scanf("%lf", &expense) == 1 && expense != -1) {
if (expense <= 0 || expense > 20000) {
printf("输入无效!请确保0 < 开销 <= 20000。\n");
continue;
}
if (expense > max) max = expense;
if (expense < min) min = expense;
sum += expense;
count++;
}
if (count == 0) {
printf("未输入任何有效开销。\n");
} else {
printf("最高开销: %.1f 元\n", max);
printf("最低开销: %.1f 元\n", min);
printf("总开销: %.1f 元\n", sum);
}
return 0;
}

任务五
点击查看代码
#include <stdio.h>
#include <math.h>
int main() {
int a, b, c;
printf("请输入三角形三边长(空格分隔):\n");
while (scanf("%d %d %d", &a, &b, &c) == 3) {
// 判断能否构成三角形
if (a <= 0 || b <= 0 || c <= 0 ||
a + b <= c || a + c <= b || b + c <= a) {
printf("不能构成三角形\n");
} else {
// 判断类型(按优先级:等边 > 直角 > 等腰 > 普通)
if (a == b && b == c) {
printf("等边三角形\n");
} else if (a*a + b*b == c*c ||
a*a + c*c == b*b ||
b*b + c*c == a*a) {
printf("直角三角形\n");
} else if (a == b || b == c || a == c) {
printf("等腰三角形\n");
} else {
printf("普通三角形\n");
}
}
printf("请输入三角形三边长(空格分隔):\n");
}
return 0;
}

任务六
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned)time(0));
int lucky_day = rand() % 30 + 1; // [1,30]
int guess, attempts = 0;
printf("欢迎来到4月幸运日游戏!您有3次机会。\n");
while (attempts < 3) {
printf("请输入您猜测的日期(1-30): ");
if (scanf("%d", &guess) != 1) {
printf("输入错误!请输入数字。\n");
while (getchar() != '\n');
continue;
}
attempts++;
if (guess == lucky_day) {
printf("恭喜!您猜中了4月的幸运日:%d\n", lucky_day);
return 0;
} else if (guess < lucky_day) {
printf("太早了!幸运日在这之后。\n");
} else {
printf("太晚了!幸运日在这之前。\n");
}
}
printf("很遗憾,3次机会已用完。4月幸运日是:%d\n", lucky_day);
return 0;
}


浙公网安备 33010602011771号