C语言——“三天打鱼两天晒网”和简单四则运算

利用for循环计算通过用户输入的年月日后判断在该天是在“打鱼”还是在“晒网”:

中国有句俗语叫“三天打鱼两天晒网”,某人从1900年1月1日起开始“三天打鱼两天晒网”,问这个人在1944年3月1日这一天是在“打鱼”还是在“晒网”
根据提议可以将解题过程分为以下三步:
1.计算1900年1.1开始支1944.3.1日共多少天
2.由于“打鱼”和“晒网”的周期为5,所以将计算出的天数用5去除
3.根据余数判断是在“打鱼”还是在“晒网”
如果余数为1,2,3则是在打鱼 否则是在晒网
tips:某个年份能否被4除尽且不能被100除尽或能被400除尽,则该年是闰年,否则是平年

出于严谨性,我们需要对输入的年月日进行规范验证,如果没有需求也可放弃验证的代码编写,直接写对天数进行统计的方法


//定义全局变量
int year, month, date;//声明(定义)接收年月日的变量
int day_count;//定义统计天数的变量
int i, j;//定义辅助变量
//对天数进行统计的方法
int DayCount() {
	for (i = 1990; i < year; i++)
	{
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
			day_count += 366;
		}
		else
		{
			day_count += 365;
		}
	}
	for (j = 1; j < month; j++)//统计从1990-1-1到year年month-1月月末总共有多少天
	{
		switch (j)
		{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			day_count += 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			day_count += 30;
			break;
		case 2:
			if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断年份是闰年还是平年 进而对二月的天数进行判断
			{
				day_count += 29;

			}
			else
			{
				day_count += 28;
			}
			break;

		}


	}
	day_count += date;//统计1990-1-1到year-month-date总共有多少天
	i = day_count % 5;//对总天数进行取模 通过余数判断是在打鱼还是在晒网
	switch (i)
	{
	case 1:
	case 2:
	case 3:
		printf("%d-%d-%d是在打鱼", year, month, date);
		break;
	case 4:
	case 0:
		printf("%d-%d-%d是在晒网", year, month, date);
		break;
	default:
		break;
	}
	return 0;
}
int DYSW() {
	
	printf("请输入1990年1月1日之后的某个日期,格式为xxxx-xx-xx:");//输入日期
	scanf("%d-%d-%d",&year,&month,&date);//取地址,接收输入的值
	if (year < 1990) {//对输入的年份进行限制
		printf("输入的年份非法");
		exit(0);
	}
	if (month > 12 || month < 1) {//判断月份是否在1-12,对输入的月大于12或者小于1月进行限制
		printf("输入的月份非法");
		exit(0);

	}
	switch (month)//判断日期是否符合常识
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		if (date > 31 || date < 1) {
			printf("输入的日期非法");
			exit(0);
		}
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		if (date > 30 || date < 1) {
			printf("输入的日期非法");
			exit(0);
		}
		break;
	case 2:
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断年份是闰年还是平年 进而对二月的天数进行判断
		{

			if (date > 29 || date < 1)
			{
				printf("输入的日期非法");
				exit(0);
			}
		}
		else if (date > 28 || date < 1)
		{
			printf("输入的日期非法");
			exit(0);

		}
		break;
	
	}
	//调用对天数进行统计的方法
	DayCount();
	return 0;
}

tips:
在调用DayCount()方法时,该方法需要写在DYSW()方法之前,否则会弹未找到标识符错误 就像登账号一样,这个DYSW()方法就像密码框一样,
我们总是要在密码框中先输入密码才行,不能点了登录才来写密码
将DayCount()方法写在DYSW()方法后面就像是点击了登录才想起来输入密码,这样是不可行的
但在编写代码时我们还是一步一步的写,先写DYSW(),然后再写DayCount(),也可以将DayCount()中的代码块全部写入DYSW()中

简易计算器实现简单的四则运算,仅仅是从左到右的计算,暂未实现数学中的规则运算:

本次运算是先将第一个数和第二个数进行计算,将结果存放在一个变量中,然后判断第二个操作符,如果为等于“=”,则输出结果,否则则继续进行下一步运算。

int JSQ(void) {
	//定义变量
	int a1, a2, a3, a4;//定义四个整型变量,用于运算的操作数
	char opt;//定义操作符
	int r1, r2, r3;//用于接收结果值

	//输入数据
	//输入提示
	printf("请输入您要计算的+-*/四则运算(不带括号和空格,以=结尾,此计算器暂只能从左往右计算):\n");

	//第一个运算单元
	scanf("%d", &a1);//读取第一个操作数
	opt = getchar();//读取第一个操作数
	scanf("%d", &a2);//读取第二个操作数

	//进行第一次运算
	switch (opt)
	{
	case '+' : //操作数为+
		r1 = a1 + a2;  //将a1 + a2 赋值给  r1
		break;
	case '-': //操作数为-
		r1 = a1 - a2;  //将a1 - a2 赋值给  r1
		break;
	case '*': //操作数为*
		r1 = a1 * a2;  //将a1 * a2 赋值给  r1
		break;
	case '/': //操作数为/
		if (a2!=0)
		{
			r1 = a1 / a2;  //将a1 / a2 赋值给  r1
		}
		else
		{
			printf("\n除数不能为0!\n");
		}
		
		break;

	default:
		printf("\n输入错误!");
		break;
	}

	opt = getchar();//读取第二个操作符
	if (opt== '=')
	{
		printf("\n傻瓜式计算器结果为:%d\n", r1);//输出结果
		exit(0);//程序结束
	}

	//接收第三个操作数
	scanf("%d", &a3);//读取第三个操作数

	//第二次运算
	switch (opt)
	{
	case '+': //操作数为+
		r2 = r1 + a3;  //将r1 + a3 赋值给  r2
		break;
	case '-': //操作数为-
		r2 = r1 - a3;  //将r1 - a3 赋值给  r2
		break;
	case '*': //操作数为*
		r2 = r1 * a3;  //将r1 * a3 赋值给  r2
		break;
	case '/': //操作数为/
		if (a3 != 0)
		{
			r2 = r1 / a3;  //将a1 / a2 赋值给  r1
		}
		else
		{
			printf("\n除数不能为0!\n");
		}

		break;

	default:
		printf("\n输入错误!");
		break;
	}

	opt = getchar();//读取第三个操作符
	if (opt == '=')
	{
		printf("\n傻瓜式计算器结果为:%d\n", r2);//输出结果
		exit(0);//程序结束
	}

	//接收第四个操作数
	scanf("%d", &a4);//读取第四个个操作数

	//第二次运算
	switch (opt)
	{
	case '+': //操作数为+
		r3 = r2 + a4;  
		break;
	case '-': //操作数为-
		r3 = r2 - a4;  
		break;
	case '*': //操作数为*
		r3 = r2 * a4;  
		break;
	case '/': //操作数为/
		if (a4 != 0)
		{
			r3 = r2 / a4;  
		}
		else
		{
			printf("\n除数不能为0!\n");
		}

		break;

	default:
		printf("\n输入错误!");
		break;
	}

	opt = getchar();//读取第四个个操作符
	if (opt == '=')
	{
		printf("\n傻瓜式计算器结果为:%d\n", r3);//输出结果
		exit(0);//程序结束
	}

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值