输入年份如2013,显示2013年的日历。

思路:

1.查找每个月1号是星期几(这里利用了1990年1月1号是星期一)

  计算年份如2013年1月1号到1990年1月1号有Days天,Day%7得到星期索引WeekDay

2.每个月日历打印六行内容,每行七个日期,不是日历内容打印空格

#include <stdio.h>

#define BOOL int
#define TRUE 1
#define FALSE 0 int GetWeekDay(int year, int month, int day); /* 获取某一年,某一月,某一天是星期几 */
void PrintCalendar(int year); /* 打印第year年的日历 */
BOOL IsLeap(int year); /* 判断是否为闰年 */ int main()
{
int year;
// char* week[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; /* 字符指针数组 */ // int WeekDay = GetWeekDay(2000, 1, 1); // printf("今天是星期:%s\n", week[WeekDay]); printf("请输入要查询的年份:\n"); scanf("%d", &year); PrintCalendar(year); return ;
}
/*-------------------------------------------------------------------------
功能:获取year年,month月,day天是星期几 这里利用了1900年1月1号是星期一
输入:年份year,月份month日期day
输出:星期索引
---------------------------------------------------------------------------*/
int GetWeekDay(int year, int month, int day)
{
int count, Week_Index,i;
int Day[] = {, , , , , , , , , , , , }; /* 每月的天数 */
int MonthAdd[] = {, , , , , , , , , , , }; /* 每月前所有月份的天数之和 */ count = MonthAdd[month - ]; /* 月份month前面所有月份的天数 */
count = count + (year - ) * ;
count = count + day; /* 与1900年1月1号相差多少天 */
if(month > && IsLeap(year)) /* 月份month超过2月份 且是闰年 */
count ++;
for(i = ; i < year; i ++)
{
if(IsLeap(i)) /* 如果是闰年 */
{
count ++;
}
} Week_Index = count % ; return Week_Index;
}
/*------------------------
功能:打印year年的日历
输入:year年份
输出:year年的日历
--------------------------*/
void PrintCalendar(int year)
{
int i, j, k;
int WeekDay;
int Day[] = {, , , , , , , , , , , , };
int MonthDays; for(i = ; i < ; i ++) /* 依次打印每个月份的日历 */
{
int temp = ;
MonthDays = Day[i];
if(IsLeap(year) && i == ) /* 闰年第二个月为29天 */
MonthDays = ;
WeekDay = GetWeekDay(year, i, ); /* 获取每个月1号 星期索引 */
printf("%d月\n", i);
printf("日\t一\t二\t三\t四\t五\t六\n");
for(j = ; j <= ; j ++) /* 每个月日历打印六行 */
{
if(WeekDay != )
{
printf("\t");
WeekDay --;
if(j % == )
printf("\n");
continue;
}
if(MonthDays > ) /* 每个月的日历 */
{
printf("%d\t", temp);
temp ++;
if(j % == )
printf("\n");
MonthDays --;
}
else
printf("\t");
}
printf("\n");
}
}
/*--------------------------
功能:判断year是否为闰年
输入:年份year
输出:闰年TRUE平年FALSE
---------------------------*/
BOOL IsLeap(int year)
{
BOOL result;
if(((year % == ) && (year % == )) || ((year % != ) && (year % == ))) /* 闰年 */
{
result = TRUE;
}
else
result = FALSE; return result;
}

c语言编写的日历的更多相关文章

  1. c语言的简易日历

    用c语言编写的简易日历,代码如下: #include <stdio.h> int main(int argc, const char * argv[]) { // insert code ...

  2. 基于php基础语言编写的小程序之计算器

    基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...

  3. 如何用C语言编写病毒‘

    怎样用C语言编写病毒在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现.[Abstract] This paper introduce the charateristic ...

  4. 选择使用c语言编写的phalcon框架

    使用这个框架,我总结了如下几点考虑 1.这个框架速度快.纯c语言编写的框架,速度都比php框架快,省去了中间环节.当然,使用它不仅仅是性能考虑.因为如果为了解决php性能问题,完全可以有很多种方式,不 ...

  5. [改善Java代码]易变业务使用脚本语言编写

    建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...

  6. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  7. 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取

    本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...

  8. C语言编写的bmp读写程序

    C语言编写的bmp读写程序 建议先把bmp的数据存储格式了解下 <span style="font-size:16px;">#include "Windows ...

  9. 使用C语言编写windows服务一般框架

    原文:使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册, ...

随机推荐

  1. 设备版本,设备号,APP版本,APP名称获取

    //获取设备id号 UIDevice *device = [UIDevice currentDevice];//创建设备对象 NSString *deviceUID = [[NSString allo ...

  2. .NET Web开发总结(五)

    7 常用服务器控件 7.1 服务器控件概述 · 服务器控件是指在服务器上执行程序的代码的组件 通常这些服务器控件会提供    给用户一定的界面,  以便用户与服务器之间快速的交互 7.2 HTML 服 ...

  3. 通过jquery 获取文本框的聚焦和失焦方法

    我还是喜欢用jquery来实现,不管页面中多少个输入框需要实现聚焦,失焦,都公有,我常用的方法是: 遍历该页面中的input框,获取输入框中的val值,当该输入框聚焦的时候跟存放的oldValue值进 ...

  4. Windows 2008 R2 X64 安装WebsitePanel(WSP虚拟主机管理面板)

                   Windows 2008 R2 X64  安装WebsitePanel(WSP2.0虚拟主机管理面板) 估计很多同学都还不知道WebsitePanel是什么东东吧,Web ...

  5. Vue.js学习 Item9 – 表单控件绑定

    基础用法 可以用 v-model 指令在表单控件元素上创建双向数据绑定.根据控件类型它自动选取正确的方法更新元素.尽管有点神奇,v-model 不过是语法糖,在用户输入事件中更新数据,以及特别处理一些 ...

  6. vue.js笔记

    一.v-bind 缩写 <!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> &l ...

  7. synchronized的重入

    /** * synchronized的重入 * */ public class SyncDubbo1 { public synchronized void method1(){ System.out. ...

  8. 分析MapReduce执行过程

    分析MapReduce执行过程 MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出. Reducer任务会接收Mapper任务输 ...

  9. PHPCMS建站经验分享

    在这里不对模型.模板设置.category,list,show等静态页面引入.配置文件(caches\configs\database.php 和 caches\configs\system.php) ...

  10. mac虚拟机parallels 无法启动 "Windows 7" 虚拟机

    关机前在虚拟机上安装了个游戏有点大,第二天开机就使用不了虚拟机了: 提示:mac虚拟机parallels  无法启动 "Windows 7" 虚拟机.  释放至少 241 MB 的 ...