C实现万年历

要求:输入年份输出这一年的日历

注意:公元1900年一月一日是星期一,这一年是平年

思路:获取输入的年份y,首先获取从公元1900年到(y-1)年

的天数,然后获得该年份的第一天是星期几,进行输出。

这次实例,我花费了很长的时间,最后发现错误的原因出在在求某一年是闰年还是平年的时候,我没有田间return语句,也就是没有返回值,真是醉了。

我感觉这次我写代码的时候一点感觉都没有。哎,真是的,一颗老鼠屎,坏了一锅粥啊。

下面是我的代码:

#include <stdio.h>

//从1900年开始计算天数
#define BEGIN 1900

/**
 * 要求:输入年份输出这一年的日历
 * 注意:公元1900年一月一日是星期一,这一年是平年
 * 思路:获取输入的年份y,首先获取从公元1900年到(y-1)年
 * 的天数,然后获得该年份的第一天是星期几,进行输出。
 *
 * @brief main
 * @return
 */

int isRun(int year);

int main(void)
{
    //获取用户输入的年数
    int year;

    //存放从公元1年到year-1年的天数
    int days = 0;

    //用于保存星期几
    char **weeks[] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};

    //二维数组,第一行用于存放闰年的月份
    //第二行用于存放平年的月份
    int runPing[2][12] = {
        {31,28,31,30,31,30,31,31,30,31,30,31},
        {31,29,31,30,31,30,31,31,30,31,30,31},
    };

    printf("Please enter the year:\n");

    scanf("%d",&year);

    int m;

    /** 计算从1900年到(year-1)的天数 **/
    for(m = BEGIN;m < year;m++){
        if(isRun(m)){
            days += 366;
        }else{
            days += 365;
        }
    }

    int which = 0;

    //判断year这一年是闰年还是平年
    if(isRun(year)){
        which = 1;
    }else{
        which = 0;
    }

    //进行输出
    for(m = 0;m < 12;m++){

        printf("MONTH:%d\n",m+1);

        //对7进行取余就能求得某一天是星期几
        int week = days % 7;

        if(week == 0){
            week = 7;  //如果余数是0,则为星期日
        }else{
            week += 1; //如果余数不是0,则余数+1,就是星期几
        }

        int i;

        //对上一个月的进行制表操作
        for(i = 0;i < 7;i++){
            printf("%s\t",weeks[i]);
        }

        printf("\n");

        for(i = 1;i<week;i++){
            printf("\t");
        }

        int n = 0;

        //输入某一个月的日期
        for(n = 0;n < runPing[which][m];n++){

            //在需要的时候进行换行操作
            if(n%7 == (7-week+1)){
                printf("\n");
            }

            printf("%d\t",n+1);
        }

        printf("\n\n");

        days += runPing[which][m];

    }

    return 0;
}

/**
 * @brief isRun 用于判断年year是否是闰年
 * @param year  被判断的那一年
 * @return
 *          0 - 表示是平年
 *          1 - 表示是闰年
 */
int isRun(int year){
    int run = 0;

    /**
     * 闰年的判断条件:
     * 1:能够被400整除
     * 2:能够被4整除,但是不能被100整除
     */
    if(((year%4==0)&&(year%100!=0)) || (year%400==0)){
        run = 1;
    }else{
        run = 0;
    }

    return run;
}

下面是我的程序的输出:

时间: 2024-12-26 01:10:24

C实现万年历的相关文章

算法,java代码实现打印万年历

万年历 以1900年1月1号星期一为时间原点 星期日 第一天 星期一 第二天 星期二 第三天 星期三 第四天 星期四 第五天 星期五 第六天 星期六 第七天 1.计算出当前日期距离原点的天数(例:2016/9/18) 2015到1900之间有多少个瑞年和平年-->count1 2016年一月到八月的总天数-->count2 本月的一号 count = count1+count2+1 2.计算出本月的一号是一周的第几天 k = count%7;(打印一号前面有多少空格) 3.计算出该月有多少天

结对项目 万年历

一.题目简介 所选项目名称:万年历. 项目需求描述,主要指应实现的主要功能. 实现了日历的查询,方便使用.界面主要是由查询输入部分和结果显示部分两部分组成. 查询输入:①一个文本域,用于输入年份. ②一个选择下拉列表框:用于选择月份. ③ 一个选择按钮:用来选择查询事件. 四.代码地址  https://github.com/huangjingyi/wannianli/blob/master/wannianli   五.结对分工过程 首先应该是结对编程可提高效率,结对编程的时候,两个人可以分开做

万年历算法的实现(C语言--gcc编译)

/** cal.c * * 现行的格里历是从儒略历演化而来的.儒略历每4年一个润年,润年366天,平年365天.* 如果从公元1年算的话,那么凡是能够被4整除的都是润年.从天文角度看,儒略历这种 * 历法是有误差的,到16世纪误差已经达到了10天.1582年,罗马教皇对儒略历进行了 * 一次校定,该年的10-5到10-14这10天被抹掉,并规定凡不能被400整除的世纪年不再 * 算为润年,校定之后的儒略历即为现行的格里历. * * 但是英国直到1752年才开始使用格里历,此时时间误差已经达到了1

万年历制作

#include<iostream>#include<iomanip> using namespace std; void printMonth(int year, int month);void printMonthTitle(int year, int month);void printMonthName(int month);void printMonthBody(int year, int month);int getStartDay(int year, int month

第一阶段测试题大题整理(冒泡排序,去重,万年历)以及改错--2017-03-26

1.冒泡排序法: 五星级重点 <script> var arr=Array(); for(var i=0;i<=5;i++){ var j=prompt("请输入第"+i+"个数"); j=parseInt(j); arr.push(j); } for(var x=0;x<arr.length;x++){ for(var y=x+1;y<arr.length;y++){ if(arr[x]<arr[y]){ var temp=ar

php万年历

上图是效果,刚学php,写个万年历玩玩- <!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>php万年历</title>    <style>        #dusk{            text-align:center;            padding-top:50px;        }        h1{

冒泡排序,去重,万年历

一.冒泡排序法 <script> var arr=Array(); for(var i=0;i<=5;i++){ var j=prompt("请输入第"+i+"个数"); j=parseInt(j); arr.push(j); } for(var x=0;x<arr.length;x++){ for(var y=x+1;y<arr.length;y++){ if(arr[x]<arr[y]){ var temp=arr[x];  

基于至简设计法实现的万年历功能

一.  功能描述 1.上板复位后从元年1月1号开始计数,为方便上板调试,将一天的时间压缩为1秒: 2.按键用于设置日历,按下按键0进入设置状态,再次按下按键0退出设置状态: 3.按键1来选择想要设置的年月日的各个位: 4.按键2在设置状态进行计数设置,每按下一次数码管显示数字加1: 5.平年365天(52周+1天),闰年366天(52周+2天).平年2月28天,闰年2月29天. 6.闰年:每400年整一闰,或每4年且不为百年的一闰.即能被400整除,或不能被100整除但能被4整除的年份为闰年.

在线万年历

在线万年历 1.概述 在计算机没有普及的年代,要查找多年前某天对应的农历日期,就不得不翻阅一本厚厚的万年历进行查询.如今,随着计算机网络的普及,只要利用任意搜索引擎搜索“在线万年历”就可以搜索出很多功能强大的万年历.本实例向大家介绍的是在线万年历的实现过程,通过本程序可以查询从1901年到2049年中任何一天的具体的农历日期.节日.星期等信息.在线万年历可以作为一个单独的程序来运行也可以嵌套在某网站中作为一个子模块来实现.例如将在线万年历系统嵌套在留言板模块中,在“备忘录”子模块中添加万年历功能

javascript版万年历

1 <!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 transitional//EN" "http://www.w3.org/tr/xhtml1/Dtd/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="