简单算法练习题

分别完成以下功能:
1.计算某一年是对应年的第几天?
2.这一年一共几天?
3.计算两个日期之间的相隔天数?

此版块应该注意优先级问题,以及上述算法中的一些细节问题,将以下各个函数背下来

#include<stdio.h>
typedef struct date//定义日期的结构型
{
	int day;
	int month;
	int year;
}Date;
int main()
{
	Date d1, d2;
	int RunOrPin(Date);
	int distance(Date, Date);
	scanf("%d%d%d", &d1.year, &d1.month, &d1.day);
	scanf("%d%d%d", &d2.year, &d2.month, &d2.day);
	printf("相差%d天\n", distance(d1, d2));
	return 0;
}
int RunOrPin(int d1)//判断是闰年还是平年
{
	if (d1% 4 == 0 && d1 % 100 != 0 || d1 % 400 == 0)//运算符优先级  ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符,单目运算符结合方向从右向左,收藏有
		return 1;
	else
		return 0;
}
int caculate(Date d1)//计算某一天为一年中的第几天
{
	int month1[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };
	int days = d1.day;
	for (int i = 1; i < d1.month; i++)//累加天数
	{
		days += month1[i];
	}
	if (d1.month >= 3 && RunOrPin(d1.year))//若所求月份超过三月且当年为闰年则需要多加一天
		days++;
	return days;
}
int fun(int d1)//返回本年天数
{
	if (RunOrPin(d1))
		return 366;
	else
		return 365;
}
int distance(Date d1, Date d2)
{
	int sum = 0;
	if (d1.year != d2.year)//不在同一年
	{
		sum = fun(d1.year) - caculate(d1);//本年剩余天数
		for (int i = d1.year + 1; i < d2.year; i++)//中间相隔的年的总天数
		{
			sum += fun(i);
		}
		sum = sum + caculate(d2);//此年的当前天数
		return sum;
	}
	else//同一年
		return  caculate(d1) - caculate(d2);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值