实验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;
}

运行截图

image

问题

  • 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;
}

运行截图

屏幕截图 2026-10-28 201330
屏幕截图 2026-10-28 201338
image

问题

  • 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;
}

运行截图

image

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

}

运行截图

image

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

运行截图

image

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

运行截图

image
image
image

实验总结

  • 通过这次实验,我巩固了循环中continue的用法,格式符的用法作用,if,switch,while,for的用法及其嵌套使用。另外有三点让我印象深刻:
  1. 任务4中,循环中一些语句要放在正确的位置上,不然可能会让整个程序出错。
  2. 任务5中,^ 和数学中表示次方不一样,在c中 ^ 是按位异或运算符,不是幂运算符,c本身没有幂运算符。
  3. 任务6中,在使用rand()函数时,需要时要限定范围,通过求余的方式得到适合的范围。

posted on 2026-10-28 23:52  sunshine-c  阅读(10)  评论(1)    收藏  举报

导航