实验二
任务一
源代码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;
}
运行测试截图

回答问题
问题一:随机生成5个学员编号,并输出打印。
问题二:第14行number=rand()%N+1;生成1~100之间的随机整数,存入变量number。
问题三:%04d以4位宽度输出整数,数值不足4位时,在左侧自动补0,保证编号后缀固定为4位数字。
问题四:设置伪随机数的种子,使用不断变化的当前系统时间作为种子,保证每次运行程序得到不同的随机数;如果删去,每次运行产生的随机数都相同。
任务二
源代码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;
}
运行测试截图

回答问题
问题一:这行代码的作用是一次购买结算完成后,清空总价,为下一轮选购计算做准备。如果删去,下一次循环计算时,会保留上一轮计算的金额,导致计算错误。
问题二:countinue的语义是立刻结束本次循环后面的语句,直接跳回while循环的条件判断出,开启下一轮循环。
任务三
源代码task3.c
#include<stdio.h>
int main()
{
char ans,r,g,y;
int i=0;
for(i=0;i<4;++i)
{
scanf(" %c",&ans);
if(ans=='r')
printf("stop!");
else if(ans=='g')
printf("go go go");
else if(ans=='y')
printf("wait a minute");
else
printf("something must be wrong");
}
return 0;
}
运行测试截图

任务四
源代码task4.c
#include<stdio.h>
int main()
{
float sum=0,current;
float max,min;
int first=1;
printf("输入今天开销,直到输入-1终止:\n");
while(1)
{
scanf("%f",¤t);
if(current==-1)
{
break;
}
if(current<0||current>20000)
{
printf("数据非法\n");
continue;
}
sum+=current;
if(first==1)
{
max=min=current;
first=0;
}
else
{
if(current>max)
max=current;
if(current<min)
min=current;
}
}
if(first==0)
{
printf("今日累计消费总额:%.1f\n",sum);
printf("今日最高一笔开销:%.1f\n",max);
printf("今日最低一笔开销:%.1f\n",min);
}
else
{
printf("没有输入有效开销\n");
}
return 0;
}
运行测试截图

任务五
源代码task5.c
#include<stdio.h>
int main()
{
int a,b,c;
int i;
for (i=1;i<=5;++i)
{
scanf("%d%d%d",&a,&b,&c);
if(a+b<=c||a+c<=b||b+c<=a)
{
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)
{
printf("等边三角形\n");
}
else if(a==b||a==c||b==c)
{
printf("等腰三角形\n");
}
else
{
printf("普通三角形\n");
}
}
}
return 0;
}
运行测试截图

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


浙公网安备 33010602011771号