C语言 万年历 三种版本

本文介绍了使用C语言编写的万年历程序的三个不同版本。第一版通过计算确定日期对应的星期几,关注输出对齐。第二版增加了判断闰年、求月份天数、求日期在年内位置等函数。第三版改进了部分函数,用数组实现求月份天数,并调整了求日期在年内位置的算法。
摘要由CSDN通过智能技术生成

C语言 万年历

万年历

一、第1版:

制作一个万年历(阳历版)。程序从键盘读入年份和月份,然后输出该年该月的月历。
【实现提示】:
本问题的关键是确定所求月份的第一天是星期几。如我们想确定2009年12月1日是星期几,我们可以采用下面的方法:
(1) 求出2009年12月1日是当年的第几天,存在c里面。
(2) s=year-1+(year-1)/4-(year-1)/100+(year-1)/400 + c;
(3) num=s%7; 则num表示该天星期几,0表示星期天,1表示星期一,……

在这里插入图片描述

另外:本问题另一个关键是如何按照上面的格式来输出。输出的时候先输出第一行,再输出第二行,……。这里的问题是如何在输出的时候进行对齐。

二、第2版:

要求:将第1版的万年历程序进行改写,定义如下函数:

  1. 判断某一年是否为闰年:int isLeapYear (int year)
  2. 求某个月有多少天:int monthDays (int year, int month)
  3. 求某一天是该年的第几天:int dayNumber (int year, int month, int day)
  4. 求某一天是星期几:int week(int year, int month, int day)

三、第3版:

要求:将之前的万年历程序v2版进行改写,对如下函数进行调整:

  1. 判断某一年是否为闰年(不变)
  2. 求某个月有多少天(去掉,用数组实现)
  3. 求某一天是该年的第几天(改写,用数组实现)
  4. 求某一天是星期几(不变)

在这里插入图片描述

第一版参考程序

#include <stdio.h>

int main()
{
   
	int year, month, days, c=0, s, num, i, j;
	
	while(scanf("%d%d", &year, &month))
	{
   
		switch(month)  //累加前month-1个月
		{
   
		case 1: c = 0; days = 31; break;
		case 2: c = 31; days = 28; break; 
		case 3: c = 31+28; days = 31; break;
		case 4: c = 31+28+31; days = 30; break;
		case 5: c = 31+28+31+30; days = 31; break;
		case 6: c = 31+28+31+30+31; days = 30; break;
		case 7: c = 31+28+31+30+31+30; days = 31; break;
		case 8: c = 31+28+31+30+31+30+31; days = 31; break;
		case 9: c = 31+28+31+30+31+30+31+31; days = 30; break;
		case 10: c = 31+28+31+30+31+30+31+31+30; days = 31; break;
		case 11: c = 31+28+31+30+31+30+31+31+30+31; days = 30; break;
		case 12: c = 31+28+31
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值