实验二

实验二

任务一

回答问题

问题1:程序的功能是什么?

随机打印5个学号。

问题2:解释line14代码的功能。

确保生成的随机数在1~ 100之间。rand生成的随机数大小为0~ rand_max,要通过line14的运算限定它的范围在1~ 100之间。

问题3:解释line15使用格式符%04d起到什么作用

在输出结果时,末尾四位在输出时自动用0补齐,保证每一个学号输出时长度都相同。

问题4:代码srand(time(0));起到什么作用

srand()以时间函数time(0)抓取的当前系统时间作为rand()的随机数种子,srand(time(0))不断变化,rand()生成的随机数也不断变化。srand(time(0))本身只设置种子,不生成随机数,随机数由rand()生成。去掉srand(time(0))之后,每次运行后输出的值都是固定的,出现“伪随机”的情况。

任务二

回答问题

问题1:line47代码total_price=0;如果去掉,对程序有什么影响?

去掉之后,在下一次输入购买的物品时,几次购买的金额会累计,导致购买总价出错。

问题2:while循环中,有两处使用continue语句。解释在循环中使用continue语句,语义是什么?

在循环中,continue语句的语义是跳过本次循环,继续执行下一个循环。

任务三

task3.c源代码

点击查看代码
#include<stdio.h>
char a;
int i=1;
int main()
{
	for(i=1;i<=4;i++)
	{	
		scanf("%c",&a);
		getchar();
		switch(a)
		{
			case 'g':
				printf("go go go\n");
				break;
			case 'r':
				printf("stop!\n");
				break;
			case 'y':
				printf("wait a minute\n");
				break;
			default :
				printf("something must be wrong…\n"); 
				break;
		}
	}
	return 0;
}

运行测试截图

屏幕截图 2026-10-28 164342

任务四

task4.c源代码

点击查看代码
#include<stdio.h>
double a,max=-1,min=30000,s=0;
int main()
{
	printf("输入今日开销,直到输入-1终止:");
	while(1)
	{
		scanf("%lf",&a);
		if(a==-1)
		break;
		if(a>max)
		max=a;
		if(a<min)
		min=a;
		s=s+a;
	}
	printf("今日累计消费总额:%.1lf\n今日最高一笔开销:%.1lf\n今日最低一笔开销:%.1lf\n",s,max,min);
	return 0;
 }

运行测试截图

屏幕截图 2026-10-28 165330

任务五

task5.c源代码

点击查看代码
#include<stdio.h>
int a,b,c,i=1;
int judge()
{
	scanf("%d%d%d",&a,&b,&c);
	if(a+b>c&&a+c>b&&b+c>a)	//判断是不是三角形 
	{
		if(a==b&&b==c)	//判断是不是等边三角形 
		printf("等边三角形\n");
		else
		{
			if(a==b||b==c||a==c)	//判断是不是等腰三角形 
			printf("等腰三角形\n");
			else
			{
				if(a*a+b*b==c*c||a*a+c*c==b*b||a*a==b*b+c*c)	//判断是不是直角三角形 
				printf("直角三角形\n");
				else
				printf("普通三角形\n");	//上面的情况都不满足,一般三角形 
			}	
		}
	}
	else
	{
		printf("不能构成三角形\n");
	}	
	return 0;
}
int main()
{
	for(i=1;i<=5;i++)
	judge();
	return 0;
 }

运行测试截图

屏幕截图 2026-10-28 091646

任务六

task6.c源代码

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

运行测试截图

屏幕截图 2026-10-28 174832

屏幕截图 2026-10-28 174907

实验总结

关于switch

在使用switch多分支结构时,如果每一种情况执行结束之后,要在语句后添加break语句,否则会无视后续case的条件,直接继续执行下一个case中的语句,直到遇到break或switch结束。

switch基本语法格式
点击查看代码
switch (表达式) 
{
    case 常量1:	//只能是常量,不能是变量或表达式。常量类型可以是整型或字符型,不能是浮点型或字符串,且每个case后的常量值不能重复 
        // 当表达式等于常量1时执行的代码
        break;  // 执行完后跳出整个 switch 结构
    case 常量2:
        // 当表达式等于常量2时执行的代码
        break;
    case 常量3:
    case 常量4:
        // 当表达式等于常量3或常量4时,都会执行这里的代码
        break;
    default:
        // 当所有 case 都不匹配时执行的默认代码(类似 else)
        break;
}

关于break语句和continue语句

语句 作用 循环是否继续
break 终止整个循环,跳出循环体 循环终止
continue 跳过本次循环,继续执行下一次循环 循环继续

注:二者在内层循环执行时,均不影响外层循环的进程。

关于srand()和rand()

函数 作用
srand(seed) 设置随机数种子,决定随机序列的起点
rand 根据种子生成下一个随机数

srand()常用time(0)作为seed是因为时间一直在变,种子不同,序列就不同。如果使用定值或不使用srand()设置种子,会导致每次运行生成的随机数一样,出现伪随机的情况(例如任务一问题4中提及的)。

posted @ 2026-10-28 19:52  Balena  阅读(3)  评论(2)    收藏  举报