实验2
实验任务
任务1
源代码
- task1.c
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
#define CNT 5
int main() {
int number;
int i;
srand(time(0));
for(i=0; i < CNT; ++i) {
number = rand() % N + 1;
printf("20490042%04d\n", number);
}
return 0;
}
运行截图

问题
- 1
根据系统时间随机生成5个1到100的数字,并加入到已有序列后面,进而生成5个随机学号。 - 2
根据系统时间随机生成5个1到100的数字。 - 3
控制格式,将number以四位长度输出,不足的在左侧补0。 - 4
改代码实现以系统时间为随机种子,让后续生成随机数根据系统时间生成。删掉这行代码多次运行后发现:每次运行结果都一样。因为rand()函数生成的随机数是伪随机。
任务2
源代码
- task2.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;
}
运行截图



问题
- 1
总价会一直累加,每次购买的费用都会加在一起,同时自然也会造成找零不对。 - 2
本次循环到此为止但不终止循环,立即开启下一次循环。
任务3
源代码
- task3.c
点击查看代码
#include <stdio.h>
int main()
{
char light;
printf("请输入交通信号灯颜色(输入r表示red,输入g表示green, 输入y表示yellow):");
for(int i=1; i <= 4; ++i) {
light = getchar();
getchar();
switch (light) {
case 'r': printf("stop!\n"); break;
case 'g': printf("go go go\n"); break;
case 'y': printf("wait a minute\n"); break;
default: printf("something must be wrong...\n");
}
}
return 0;
}
运行截图

任务4
源代码
- task4.c
点击查看代码
#include <stdio.h>
int main(){
double amount, min = 20000, max = 0;
double total_amount = 0;
amount > 0 && amount <= 20000;
printf("输入今日开销,直到输入-1终止:\n");
while(1) {
scanf("%lf", &amount);
if(amount == -1)
break;
total_amount += amount;
if(min >= amount)
min = amount;
if(max <= amount)
max = amount;
}
printf("今日累计消费总额:%.1f\n", total_amount);
printf("今日最高一笔开销:%.1f\n", max);
printf("今日最低一笔开销:%.1f\n", min);
return 0;
}
运行截图

任务5
源代码
- task5.c
点击查看代码
#include <stdio.h>
int main()
{
int a, b, c;
for(int i = 1; i <= 5; ++i)
{
printf("请输入三角形的三边:\n");
scanf("%d%d%d", &a, &b, &c);
if(a + b > c && a +c > b && b + c > a)
{
if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a)
{
printf("直角三角形\n");
continue;
}
else if(a == b && a == c )
{
printf("等边三角形\n");
continue;
}
else if((a == b && a !=c) || (a == c && a != b) || (b == c && b != a))
{
printf("等腰三角形\n");
continue;
}
else
{
printf("普通三角形\n");
continue;
}
}
else
{
printf("不能构成三角形\n");
continue;
}
}
return 0;
}
运行截图

任务6
源代码
- task6.c
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int day, lucky_day;
srand(time(0));
printf("猜猜2026年11月哪一天是你的lucky day\n\n");
printf("开始喽,你有3次机会,猜吧(1~30):");
lucky_day = rand() % 30 + 1;
for(int i = 1;; ++i)
{
if(i > 3)
{
printf("次数用光啦。11月你的luck day是%d号\n", lucky_day);
break;
}
scanf("%d", &day);
printf("\n");
day >= 1 && day <= 30;
if(day == lucky_day)
{
printf("哇,猜中了:)\n");
break;
}
else if(day >= lucky_day)
{
printf("你猜的日期晚了,你的lucky day在前面哦\n\n");
printf("再猜(1~30):");
}
else
{
printf("你猜的日期早了,你的lucky day还没到呢\n\n");
printf("再猜(1~30):");
}
}
return 0;
}
运行截图



实验总结
- 通过这次实验,我巩固了循环中continue的用法,格式符的用法作用,if,switch,while,for的用法及其嵌套使用。另外有三点让我印象深刻:
- 任务4中,循环中一些语句要放在正确的位置上,不然可能会让整个程序出错。
- 任务5中,^ 和数学中表示次方不一样,在c中 ^ 是按位异或运算符,不是幂运算符,c本身没有幂运算符。
- 任务6中,在使用rand()函数时,需要时要限定范围,通过求余的方式得到适合的范围。
posted on 2026-10-28 23:52 sunshine-c 阅读(10) 评论(1) 收藏 举报
浙公网安备 33010602011771号