[go学习笔记.第六章.函数.练习] 编写一个函数:判断是打鱼还是晒网

package main

import (
    "fmt"
)


//编写一个函数:判断是打鱼还是晒网
func fishONet()  {
	//"三天打鱼,两天晒网",如果从1990.01.01起执行"三天打鱼,两天晒网",如何判断今后的某一天是"打鱼"还是"晒网"
	//思路:
	//首先计算出1990年1月1日到输入的年月日之间共有多少天:
	//第一步,1990年1月1日到所输入的年份之间的天数 需要注意的是:平年365天,闰年366天
	//第二步,输入的这个年份中,从1月1号一直到输入的月份之间的天数
	//第三步,输入的日期即为当月的天数
	//然后“三天打鱼两天晒网”一共五天,每隔五天循环一次,那么,可以用总的天数除以5,得出余数:
	//如果余数是1,2,3,则输出“今日打鱼”
	//如果余数是4,0,则输出“今日晒网”

	//定义年月日
	var year, month, day int
	//判断年月日是否输入正确
	fmt.Println("请输入年:")
	fmt.Scanln(&year)
	if year < 1990 {
		fmt.Println("你输入的年份错误,请重新输入!")
		return
	}
	fmt.Println("请输入月:")
	fmt.Scanln(&month)
	if month < 1 || month > 12 {
		fmt.Println("你输入的月份错误,请重新输入!")
		return
	}
	fmt.Println("请输入日:")
	fmt.Scanln(&day)
	//日判断
	if day < 1 || day > 31 {
		fmt.Println("你输入的日期错误,请重新输入!")
		return
	}
	// 2月份比较特殊,闰年(能被4整除,并且不能被100整除;或者能被400整除)28天,平年29天
	if month == 2 {
		if (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 {
			if day > 28 {
				fmt.Println("你输入的日期错误,请重新输入!")
				return
			}
		} else {
			if day > 29 {
				fmt.Println("你输入的日期错误,请重新输入!")
				return
			}
		}
	}

	//计算1990年1月1日到输入的年月日之间共有多少天
	//定义一个变量,保存从1990年1月1日到输入的年月日之间共有的天数
	count := 0
	//计算多少年
	for i := 1990; i < year; i++ {
		//闰年366天,平年365
		if (i % 4 == 0 && i % 100 != 0) || i % 400 == 0 {
			count += 366
		} else {
			count += 365
		}
	}
	//计算月份
	for j := 1; j < month; j++ {
		switch month {
		case 1, 3, 5, 7, 8, 10, 12:
			count += 31
		case 4, 6, 9, 11:
			count += 30
		case 2:	// 2月份比较特殊,需要判断闰年还是平年
			if  (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 {
				count += 29
			} else {
				count += 28
			}	
		}
	}
	//计算总的天数
	count += day

	fmt.Println(count)
	//计算打鱼还是晒网:
	//总的天数除以5,得出余数:
	//	如果余数是1,2,3,则输出“今日打鱼”
	//	如果余数是4,5,则输出“今日晒网”

	result := count % 5
	switch result {
	case 1, 2, 3:
		fmt.Println("今日打鱼")
	case 4, 0:
		fmt.Println("今日晒网")

	}
}

func main() {
    fishONet()
}

上一节:[go学习笔记.第六章.练习] 循环打印输入年月日,(使用continue实现);随机猜数游戏;输出100以内的所有素数;输出小写的a-z以及大写的A-Z,使用for循环

下一节:[go学习笔记.第六章.函数.练习] 编写一个函数:输出小写的a-z以及大写的A-Z,使用for循环 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值