实验二

任务一

源代码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;
}

运行测试截图

屏幕截图 2026-10-28 155507

回答问题

问题一:随机生成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;
}

运行测试截图

屏幕截图 2026-10-28 164644

回答问题

问题一:这行代码的作用是一次购买结算完成后,清空总价,为下一轮选购计算做准备。如果删去,下一次循环计算时,会保留上一轮计算的金额,导致计算错误。

问题二: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;	
}  

运行测试截图

屏幕截图 2026-10-28 172212

任务四

源代码task4.c

#include<stdio.h>
int main()
{
	float sum=0,current;
	float max,min;
	int first=1;
	
	printf("输入今天开销,直到输入-1终止:\n");
	while(1)
	{
		scanf("%f",&current);
		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;
}

运行测试截图

屏幕截图 2026-10-28 175923

任务五

源代码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;
}

运行测试截图

屏幕截图 2026-10-29 145059

任务六

源代码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;
}

运行测试截图

屏幕截图 2026-10-29 151944

 

posted @ 2026-10-29 15:21  靳雅茹  阅读(8)  评论(0)    收藏  举报