实验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()%100+1;
		printf("20490042%04d\n",number);
	}
	
	return 0;
}
  • 运行结果截图

屏幕截图 2026-10-28 092404

  • 回答问题
    问题1.随机抽取 5 位学员编号。基础前缀固定为 20490042,再拼接一个在 1~100 之间随机生成的数字,最终输出完整学员编号。
    问题2.利用 rand() 获取随机整数;对 N(值为 100)取余,得到范围 0~99;再加 1,就得到 1~100 的随机整数,用来作为学员编号的后两位。
    问题3.%04d:以至少占 4 位的宽度输出整数;如果数字不足 4 位,在左侧自动补前导 0,保证编号对齐。
    问题4.这一句用来设置随机种子,使用当前系统时间作为种子。
    如果删掉这一行:每次启动程序都会使用同一个默认种子,随机序列就固定不变,每次运行抽出来的编号都是一样的,失去随机效果。加上之后,因为时间一直在变化,每次运行都会得到不同的随机编号。

任务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;
	}

  • 运行结果截图

屏幕截图 2026-10-28 222857

  • 回答问题
    问题1.这行的作用是把本次订单的总价清零。如果去掉,下一轮购买会在上一次的总价基础上继续累加,导致价格越算越大,总价、找零全部出错。
    运行结果如图:

屏幕截图 2026-10-28 223018

问题2.continue:直接跳过本轮循环中位于它后面的所有代码,回到循环条件判断,继续进入下一轮循环。
在这个自动售卖机里:
如果编号无效,执行 continue,就会跳过“输入数量、计算价格”等后续步骤,直接回到菜单;
如果购买数量是负数,同样使用 continue,放弃本次输入,重新开始选择商品。

任务3

  • task3.c源代码
点击查看代码
#include <stdio.h>

int main(){
	char ch;
	int i;
	
	for(i=0;i<4;++i)
	{
		scanf("%c",&ch);
		//getchar();
		switch(ch)
		{
			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;
}
  • 运行结果截图

屏幕截图 2026-10-28 133213

任务4

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

屏幕截图 2026-10-28 151908

任务5

  • task5.c源代码
点击查看代码
#include <stdio.h>
int main()
{
	int a,b,c;
	int i;
	for(i=0;i<5;++i)
	{
	scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
	{if(a==b&&b==c&&a==c)
	printf("等边三角形\n");
	else if(a==b||a==c||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
	printf("普通三角形\n");
			}		
	else
	printf("不能构成三角形\n");
	}
	return 0;		
}
  • 运行结果截图

屏幕截图 2026-10-28 170438

任务6

  • task6.c源代码
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	int n,ld;
	int chance;
	
	srand(time(0));
	ld=rand()%30+1;
	printf("猜猜2026年11月哪一天是你的lucky day\n");
	printf("开始喽,你有3次机会,请吧(1~30)\n");
	for(chance=1;chance<=3;++chance)
	{
	scanf("%d",&n);	
	if(n==ld)
	{
	printf("哇,猜中了:)\n");
	return 0;
	} //break;
	 else if(n<ld)
	 printf("你猜的日期早了,你的lucky day还没到呢\n");
	 else
	 printf("你猜的日期晚了,你的lucky day在前面哦\n");
	   if(chance<3)
	 printf("再猜(1~30):\n") ;
	
	}
	  
	 printf("次数用光啦。11月你的lucky day是%d号\n",ld);
	 
	 return 0;
}
  • 运行结果截图

屏幕截图 2026-10-28 174534

实验总结

  • 任务3 要加getchar()吃掉回车,若没有getchar()运行结果如下图

屏幕截图 2026-10-28 133305

  • 任务6
    (1)"猜中了"后面不加break,加return 0
    break:
    只跳出这一层 for,循环结束之后,会继续执行后面这一行:

于是就会变成:猜中了,但还额外打印一句“次数用光了”,不符合题目效果。
return 0:
直接结束整个 main,程序立刻终止,后面所有代码都不再执行,正好满足需求。
(2)如果写:
rand()%31
得到的是:
0~30
会出现 0,但日期没有第 0 号。
所以要写rand()%30+1

posted @ 2026-10-28 22:46  羊羊羊三只羊  阅读(8)  评论(2)    收藏  举报