万年历(C语言版)

#include <stdio.h>
//判断输入的年份是否是闰年
int IsLeap(int  year)
{
	if((year%400==0) || ((year%4==0)&&(year%100!=0)))
		return 1;
	else
		return 0;
}
int Day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
//计算一个月的最大天数(上一个月)
int Max_day(int year,int month)
{
    if(IsLeap(year)==1)
        Day[1]=29;
    return Day[month-1];
}
//计算输入的日期是这一年的第几天
int Total_day(int year,int month,int day)
{
	int sum = 0;
	for(int i=1;i<month;i++)
		sum+=Max_day(year,i);
	sum+=day;
	return sum;
}
//由输入的日期判断当天是星期几
int Weekday(int year,int month,int day)
{
	if(month==1||month==2)
	{
		month+=12;
		year--;
	}
	int week = (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
	return week;
}
void Display_week(int year,int month,int day)
{
	int weekday = Weekday(year,month,day);
	switch(weekday)
	{
		case 0:printf("%d年%d月%d日是星期一\n",year,month,day);break;
		case 1:printf("%d年%d月%d日是星期二\n",year,month,day);break;
		case 2:printf("%d年%d月%d日是星期三\n",year,month,day);break;
		case 3:printf("%d年%d月%d日是星期四\n",year,month,day);break;
		case 4:printf("%d年%d月%d日是星期五\n",year,month,day);break;
		case 5:printf("%d年%d月%d日是星期六\n",year,month,day);break;
		case 6:printf("%d年%d月%d日是星期日\n",year,month,day);break;
	}
}
//显示当月日历
void ShowCalendar(int year,int month,int day)
{
	int i;
	printf("==================================================\n");
	printf("日	一	二	三	四	五	六\n");
	printf("==================================================\n");
	int week = Weekday(year,month,1);	//由每月1号确定打印制表符的个数
	//printf("week:%d",week);
	for(i=0;i<=week;i++)
		printf("\t");
	int max = Max_day(year,month);
	for(int j=1;j<=max;j++)
	{
		if(i%7==0)
			printf("\n");

		printf("%d\t",j);
		i++;	

	}
	printf("\n==================================================\n");

}
int main()
{
	int year,month,day;
	printf("欢迎使用万年日历v1.0!\n");
	printf("请依次输入年,月,日:");
	scanf("%d%d%d",&year,&month,&day);
	Display_week(year,month,day);
	printf("%d年%d月%d日是这一年中的第%d天\n",year,month,day,Total_day(year,month,day));
	ShowCalendar(year,month,day);
	return 0;
}

时间: 2024-10-10 15:32:26

万年历(C语言版)的相关文章

《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

先附上文档归类目录: 课本源码合辑  链接??? <数据结构>课本源码合辑 习题集全解析  链接??? <数据结构题集>习题解析合辑 博主有话说: 01.自学编程,难免思路阻塞,所以从今天起,我(StrayedKing)决定在本博客陆续更新严蔚敏,吴伟民版<数据结构-C语言版>各章节的课本源码和配套习题集答案解析,目的是为了整理数据结构中的知识点,并与网友交流意见,集思广益,共同进步.        ★注★ 左侧随笔分类下用两个栏目:<课本源码>.<习

人事管理系统 c语言版

int menu(){ printf("请按提示输入完成操作!\n"); printf("1.查询员工信息\n"); printf("2.统计员工数量\n"); printf("3.录入员工信息\n"); printf("4.删除员工信息\n"); printf("5.按id排序所有员工\n"); printf("6.打印所有员工信息\n"); printf(&quo

排序算法总结(C语言版)

1.    插入排序 1.1     直接插入排序 1.2     Shell排序 2.    交换排序 2.1     冒泡排序 2.2     快速排序 3.    选择排序 3.1     直接选择排序 3.2     堆排序 4.    归并排序 4.1     二路归并排序 4.2     自然合并排序 5.    分布排序 5.1     基数排序 1.插入排序 1.1      直接插入排序 将已排好序的部分num[0]~num[i]后的一个元素num[i+1]插入到之前已排好序的

51系列小型操作系统精髓 简单实现8 C语言版待改进

使用keil4  ,代码Code Optimization:0   运行OK 可运行8个任务 Program Size: data=21.0 xdata=0 code=401  (包括2个示例变量,未优化) 任务从中断处切换,在定时时间到后从定时中断中切换回来. 待改进地方 1.手动优化汇编程序 2. 重入问题 3.参数进函数和时中断的保护问题 #include "STC12C5A.H" #define TIMER_RELOAD()  {TL0=0x00;TH0=0xC4;}//使能T

51系列小型操作系统精髓 简单实现11 C语言版优化后说明(有图)

/* CRTOS 实时可剥夺型内核 1.任务不用预加载,不用预定义.任务调用时加载,可删除(退出死循环即可) 2.单位轮转查询时间由晶振和定时器初始化决定.在这里为10ms 3.定时时间为[ time*单位轮转查询时间 ] ,其中time为 rtos_wait(time)中time. 4.可运行多个任务[自定义] 5.任务从rtos_wait()处切换,在定时时间到后从定时中断中切换回来,任务执行后,回到中断,再从中断回到主程序. */ #include "STC12C5A.H" #d

51系列小型操作系统精髓 简单实现7 C语言版待改进

#include "STC12C5A.H" #define TIMER_RELOAD()  {TL0=0x00;TH0=0xC4;}//使能T/C  初始10ms #define MAX_TASKS 2 //任务槽最大个数. unsigned char idata task_stack[MAX_TASKS][2];//任务堆栈.  PC指针为16位,需2个字节task_stack[][0]L  task_stack[][1]H. unsigned char idata task_tim

2048小游戏(C语言版)

1 #include <climits> 2 #include <cstdio> 3 #include <cstring> 4 #include <stack> 5 #include <string> 6 #include <map> 7 #include <vector> 8 #include <cmath> 9 10 11 /* 12 玩法说明:编译运行后,输入一个整数n,表示自己想玩的游戏中是n*n的表格

基于BP神经网络的简单字符识别算法自小结(C语言版)

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:[email protected] 写在前面的闲话: 自我感觉自己应该不是一个很擅长学习算法的人,过去的一个月时间里因为需要去接触了BP神经网络.在此之前一直都认为算法界的神经网络.蚁群算法.鲁棒控制什么的都是特别高大上的东西,自己也就听听好了,未曾去触碰与了解过.这次和BP神经网络的邂逅,让我初步掌握到,理解透彻算法的基本原理与公式,转为计算机所能识别的代码流,这应该就是所谓的数学和计

双向链表(c语言版)

为了得到一个简洁的C语言实现的双向链表,本篇参照数据结构书籍对双向链表的做了一些修改,内容有: 1.合并分离的头文件和实现文件,认识更为直观: 2.修改函数名和变量名,更贴近自身的理解: 3.删除了返回首节点.尾节点等功能更为单一的函数,留下其主干. 实现思路: 1.定义一个双向链表 2.进行初始化工作:调用initList(),构造一个空的双向链表 3.执行增删改查等操作(节点操作) *插入时注意:封装成节点 1 /*双向链表实现代码*/ 2 #include<malloc.h> 3 #in

51系列小型操作系统精髓 简单实现10 C语言版优化后发布(有图)

4个任务 /* 使用keil4 可运行8个任务 任务从rtos_wait()处切换,在定时时间到后从定时中断中切换回来. */ #include "STC12C5A.H" #define TIMER_RELOAD() {TL0=0x00;TH0=0xC4;}//使能T/C 初始10ms #define MAX_TASKS 8 //任务槽最大个数. unsigned char idata task_stack[MAX_TASKS][2];//任务堆栈. PC指针为16位,需2个字节tas