精华内容
下载资源
问答
  • c语言输出一个月的日历

    万次阅读 2014-10-31 18:35:36
    输出一个月的ril

            输出一个月的日历,我们只需要知道这个月的第一天是星期几,然后输出这个月的1号好最后一天,最后一天要判断是31,30天,如果是2月还要通过是否是闰年判断是28还是29天。但是实际上最重要的是要算出这个月的一号是星期几,不然就无法找到输出的点。

    我们可以通过这个公式计算出一个日期是星期几,其中YEAR表示年份,DAYS表示这个日期是这一年的第几天。如果要计算2014-2-12是星期几,那么YEAR就是2014,DAYS就是43,计算出TEMP后,再用7对TEMP求余数,求出的值就是星期几,值的范围是[0-6],分别表示星期天,星期一,星期二,到星期六。

    TEMP = [YEAR  - 1]  +  [(YEAR - 1) / 4]  -  [(YEAR - 1) / 100] + [(YEAR - 1) / 400] + DAYS 
    WEEKDAY = TEMP % 7
    
    然后就可以同过一下代码输出一个月的日历:

    #include <stdio.h>
    #include <string.h>
    
    bool isLeapYear(int);
    int getWeekDay(int, int, int);
    
    int main(int argc, char const *argv[])
    {
    	int year;
    	int month;
    
    	printf("输入日期(yyyy-mm):");
    	scanf("%d-%d-%d", &year, &month);//输入年和月
    
    	printf("     %d年%d月\n", year, month);//输出日历日历标题
    	printf("日 一 二 三 四 五 六\n");//输出星期
    
    	//本函数获取某个日期是星期几,这里获取每月的1号是星期几,返回是是[0-7]对应(星期天-星期六)
    	int week = getWeekDay(year, month, 1);
    
    	int i;
    	for (i = 0; i < week; i++)//每月第一周前几天用空格填充
    		printf("   ");
    
    	int endDayOfMonth;//每个月的最后一天
    	if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
    		endDayOfMonth = 31;
    	else if (month == 2)
    	{
    		if (isLeapYear(year))
    			endDayOfMonth = 29;
    		else 
    			endDayOfMonth = 28;
    	}
    	else 
    		endDayOfMonth = 30;
    
    	int dayOfMonth = 1;
    	//从一号循环到本月末
    	while (dayOfMonth <= endDayOfMonth)
    	{
    		printf("%2d ", dayOfMonth);
    		dayOfMonth++;
    		//每输出完星期六的日期后就换行(对应周数起点是从week开始的,所以要在天数上加上week)
    		if ((dayOfMonth + week- 1) % 7 == 0)
    			printf("\n");
    	}
    	printf("\n");
    	return 0;
    }
    
    //判断闰年
    bool isLeapYear(int y) 
    {
    	if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
    		return true;
    	return false;
    }
    
    //获取某天是星期几返回值(0-7)
    int getWeekDay(int y, int m, int d)
    {
    	//计算星期几的固定公式,Y是年D是这个日期在本年的天数
    	//W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D 
    	int days = d;
    	int i;
    	for (i = 1; i < m; i++) 
    	{
    		if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
    			days += 31;
    		else if (i == 2)
    		{
    			if (isLeapYear(y)) 
    				days += 29;
    			else 
    				days += 28;
    		}
    		else 
    			days += 30; 
    	}
    
    	int temp = y - 1 + (int)((y - 1) / 4) - (int)((y - 1) / 100) + (int)((y - 1) / 400) + days;
    	return temp % 7;
    } 

    输出效果如下:

    展开全文
  • c语言输出一个月的月历

    千次阅读 多人点赞 2018-02-11 15:16:33
    细节的实现 (1)首先需要打印年月和月历的周一到周日(2)判断每个月的1号是周几,这样利用固定的算法就可以依次求出 2、3、4、、、等是星期几(3)其中还需要判断在什么时候进行换行处理。以及判断 是否是润年。...

    一.基本思路

    1.日历的大致形状

                                         

    2.细节的实现

           (1)首先需要打印年月和月历的周一到周日
    (2)判断每个月的1号是周几,这样利用固定的算法就可以依次求出
    2、3、4、、、等是星期几
    (3)其中还需要判断在什么时候进行换行处理。以及判断 是否是润年

    二.代码实现

    1.标题的输入和输出这个可以很简答就写出来

    2.判断每个月的1号是周几

    其中有一个固定的公式:
    temp=(y-1)+ (y-1)/ 4 - (y-1)/100+(y-1)/400+days
    week = temp%7

    注释:y代表年数;days表示这一年的第几天;

    例如2014年1月1号,
    temp = 2014-1 + (2014-1)/ 4 - (2014-1) / 100 + (y-1) / 400 + 1
    week = temp%7
    计算出来就是周三

    3.现在又出来一个问题,已知年月日如何计算days呢?

    (1)判断是否是润年

    (year % 4 == 0 && year % 100 !=0 ) || ( year % 400 == 0);若为真则是闰年

    2)从1到12月份,每个月的天数是知道的

    可以将其写入到一个数组中,然后利用switch选择相应的case。
    m[11] = {31,28,31,30,31,30,31,31,30,31,30,31}
    switch month {
    case 1:
    days = ;
    break;
    case 2:
    判断是否是闰年
    for循环
                              ................


    4.接下来输出其他日子

    (1)1号位置的确定

    利用for循环,输出空格

    (2)换行问题

    再次利用for循环,如果(week+日数-1 % 7) == 0,为换行判断条件。

    (3)日数递增的临界条件

    即每个月的最后一天是多少。



    代码如下:

           

    #include<stdio.h>
    
    #define bool int//自定义bool类型
    #define true 1
    #define false 0
    
    bool IsLeap(int year);
    int GetWeek(int year,int month);
    void main()
    {
        int y,m,week,i;
        printf("输入yyyy-mm:");
        scanf("%d%d",&y,&m);
        printf("      %d年%d月\n",y,m);
        printf("=====================\n");
        printf(" 一 二 三 四 五 六 日\n");
        week = GetWeek(y,m);
        if(week == 0)
            week = 7;									//若week == 0,将其视作7,以便留下足够的空格
    
        for (i = 1;i < week; i++)
        {
            printf("   ");								//三个字符为一个单位,保证第一行与周数对应
        }
        int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//以数组方式统计每个月的天数
        if (IsLeap(y) == true)							//若为闰年,将2月份的天数修改为29
            month[1] = 29;
        for(i=1;i<=month[m-1];i++)						//利用for循环,依次输出日数,并且若加上通过计算week+i-1%7来判断是否该换行
        {
            printf("%3d",i);
            if((i+week-1) % 7 == 0)						
                printf("\n");
        }
    	printf("\n=====================\n");
    }
    
    bool IsLeap(int year)
    {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))//判断是否为闰年的条件
            return true;
        else
            return false;
    }
    
    int GetWeek(int year,int month)
    {
        int m[12] = {31,28,31,30,31,30,31,31,30,31,30,31};			//以数组记录每个月的天数
        int day=0,week,i;
        switch (month)
        {
            case 1:
                day = 1;
                break;
            case 2:
                day = m[0] + 1;
                break;
            case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
                if (IsLeap(year) == true)
                    m[1] = 29;
                for (i=0;i<month-1;i++)
                {
                    day = day + m[i];
                }
                day = day + 1;
                break;
    
        }
        week = ((year-1) + (year-1)/4 - (year-1)/100 + (year-1)/400 + day) % 7;
        return week;
    }
    


    展开全文
  • c语言编写一个简单的日历

    千次阅读 2020-04-15 16:25:52
    c语言编写一个程序,但用户输入参数的时候,显示相应的信息,例如:输入年月日的时候,系统会输出是星期几,若输入月份的时候,输入的是该月的信息。 闰年的判断方法 闰年是人们为了弥补历法的天数和地球时间...

    问题描述

    用c语言编写一个程序,但用户输入参数的时候,显示相应的信息,例如:输入年月日的时候,系统会输出是星期几,若输入月份的时候,输入的是该月的信息。

    闰年的判断方法

    闰年是人们为了弥补历法的天数和地球时间公转周期的时间差而设定的,弥补时间差的年份为闰年,闰年一共有336天,在二月的时候多加一天,即29天。判断闰年发方法一般遵循4年一闰,100年不闰,400百年再闰。在万年历实用工具中,采用c语言语句的判断方法如下:

     if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))

    如果if语句中的条件为真表明是闰年,然后执行后面的相应语句。

    程序代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /*
    *csdn学院
    *目的:让代码见证成长(作为一个初学的菜鸟,如
    *大家有发现错误,欢迎指正!)
    *运行软件:CodeBlocks
    *作者:小臣小仁
    *完成日期:2020年4月15日
    */
    
    void convret(int *data,char *time);//转换模块
    int weekD_value(int *data);//计算星期差模块
    void displayData(int *data,int week);//日期显示模块
    int main()
    {
        int week;//周
        char time[15];//记录时间
        int data[3]={0};//分别存储年、月、日
        printf("输入格式为:年/月/日或年.月.日\n");
        printf("请输入日期:");
        scanf("%s",time);
        convret(data,time);//将输入的日期字符转换为整型
        week=weekD_value(data);//计算星期模块
        displayData(data,week);//显示模块
        return 0;
    }
    void convret(int *data,char *time)
    {
        int year=0,month=0,day=0;
        int d,i;
        if(time=='\0')
        {
            printf("\n请输入正确的日期!\n");
            exit(0);
        }
        i=0,d=-1;
        while(time[i])/*变量传入的参数日期,计算出年月日*/
        {
            if((time[i]=='/'||time[i]=='.')&&d==-1)//年转到月
            {
                d=0;
                i++;
                continue;
            }
            if((time[i]=='/'||time[i]=='.')&&d==0)//月转到日
            {
                d=1;
                i++;
                continue;
            }
            if(d==-1)//计算年份
                year=year*10+(time[i]-'0');
            if(d==0)//计算月
                month=month*10+(time[i]-'0');
            if(d==1)//计算天数
                day=day*10+(time[i]-'0');
            i++;
        }
        if(month<1||month>12)/*如果月份输入错误*/
        {
            printf("请输入正确的日期");
            exit(0);
        }
        data[0]=year;
        data[1]=month;
        data[2]=day;
    }
    int weekD_value(int *data)
    {
        int dy,dm,m2;//三种不同的星期差
        int d;
        int week;
        if(data[0]==2000)
        {
            dy=0;/*年引起的星期差为0个*/
            m2=1;/*2月份引起的星期差为1个*/
            goto la_100;;//跳转
        }
        if(data[0]>2000)
            d = (data[0] - 1-2000)/4-(data[0]-1-2000)/100+(data[0] - 1 - 2000)/400+1;
        else
            d = (data[0] - 2000)/4 - (data[0]-2000)/100 + (data[0]-2000)/400;
        dy = (data[0]-2000)+d;/***该年1月一号到2000年一月一号的“星期差”***/
        if((data[0]%40&&data[0]%100!=0)||(data[0]%100==0&&data[0]%400==0))
            m2=1;
        else
            m2=0;
        la_100:
        /***该月以前所引起的“星期差”***/
        switch(data[1])
        {
        case 1:
            dm=0;
            data[1]=31;
            break;
        case 2:
            dm=3;
            data[1] = d == 1?29:28;
            break;
        case 3:
            dm=3+m2;
            data[1] =30;
            break;
        case 4:
            dm=6+m2;
            data[1] = 30;
            break;
        case 5:
            dm = 1+m2;
            data[1] = 31;
            break;
        case 6:
            dm= 4+m2;
            data[1]= 30;
            break;
        case 7:
            dm = 6+m2;
            data[1]= 31;
            break;
        case 8:
            dm= 2+m2;
            data[1] = 31;
            break;
        case 9:
            dm=5+m2;
            data[1] = 30;
            break;
        case 10:
            dm = 5+m2;
            data[1] = 31;
            break;
        case 11:
            dm = 3+m2;
            data[1] = 30;
            break;
        case 12:
            dm = 5+m2;
            data[1] = 31;
            break;
        }
        if (data[2]<0||data[2]>data[1])
        {
    	   printf ("\n ERROR! the entered DAY is invalid\n");
    	   exit (0);
       }
       week = (dy + dm + data[2]-1+6)%7;//星期几
       if(week<0)
    	   week+=7;
       return week;
    }
    void displayData(int *data,int week)
    {
        int i;
        char WEEK[9];
        if(data[2] > 0)
        {
            switch(week)
            {
            case 0:
                strcpy(WEEK,"星期日");
                break;
            case 1:
                strcpy(WEEK,"星期一");
                break;
            case 2:
                strcpy(WEEK,"星期二");
                break;
            case 3:
                strcpy(WEEK,"星期三");
                break;
            case 4:
                strcpy(WEEK,"星期四");
                break;
            case 5:
                strcpy(WEEK,"星期五");
                break;
            case 6:
                strcpy(WEEK,"星期六");
                break;
            }
            printf ("\n 今天是:%s  \( %d )\n",WEEK,week);
        }
        else
        {
            ++week;
            week%=7;
            printf("\n日历如下:");
            printf("\n************************************\n");
            printf("   日   一   二   三   四   五   六\n");
            for(i=0;i<week;i++)
            {
                printf("     ");
            }
            for(i=1;i<=data[1];i++)
            {
                printf("%5d",i);
                week++;
                if(week%7 == 0&&i!=data[1])
                    printf("\n");
            }
            printf("\n************************************\n");
        }
    }
    

    输出结果

    当输入参数“2020.4.15”时候,命令行显示效果如下:

    当输入参数“2020.4”的时候,命令行显示效果如下:

    心得体会

    在编写程序的时候,需要了解万年历的功能和计算星期差,计算星期几,这可以作为c语言初学者练手的小程序,当然程序中多多少少有错误,望指正!

     

    展开全文
  • 就是先输出一个按照1-12月按顺序排列的日历(我们设定每个月都是7行) 然后存入一个记事本a里 然后再读取a中的日历 比如一月的第一行日历是 空 空 空 1 2 3 4 然后读取二月的第一行 读取三月的第一行 再按顺序从新...
  • 本文实例为大家分享了C语言实现按显示的日历,供大家参考,具体内容如下 首先显示一下我们最后要出来的效果图: 大概就是这样子。那么我们先来说说基本的思路:首先计算出当前年的第天是星期几,再根据当...
  • 2.输入年月,输出月的日历。 3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 最终完善版代码: 代码如下: #include #include #include #include <math.h> #include int year , month ...
  • 教学日历表是学校组织每学期课程教学的具体计划表,运用日历表并输出。...③输出的日历表中周六、周日及节假日(五节、 国庆节等)用不同的字体突出标识:每月的天直接输出月份名称(如: 6月)不用输出某月1日字样。
  • 随机给你一个格式为-连接了年、、日日期字符串(其中数字都是没有前导零,也就是说7不会被写成07)。你将需要判断这个日期在我们公历体系内是否真实存在。如果存在则输出YES,否则输出NO。 #define _CRT_...

    随机给你一个格式为-连接了年、月、日的日期字符串(其中的数字都是没有前导零的,也就是说7不会被写成07)。你将需要判断这个日期在我们的公历体系内是否真实存在。如果存在则输出YES,否则输出NO。

    #define _CRT_SECURE_NO_DEPRECATE
    
    #include<stdio.h>
    
    int main()
    {
    	int year, mon, day;
    	//输入年月日
    	scanf("%d-%d-%d", &year, &mon, &day);
    	//如果年份在1-3000,月份在1,3-12之间
    	if (  (mon <= 12 && mon > 2 || mon==1 ) && year > 0 && year <= 3000){
    		//如果在有31号的月份
    		if (mon == 1 ||  mon == 3 || mon == 5 || mon== 7 || mon == 8 || mon == 10 || mon == 12){
    			if (day <= 31 && day > 0) 
    				printf("YES");
    			else 
    				printf("NO");
    		}
    		//在只有30号的月份
    		else if(mon == 4 || mon == 6 || mon == 9 || mon == 11){
    			if (0 < day && day <= 30)
    				printf("YES");
    			else
    				printf("NO");
    		}
    		
    	}
    	//如果为二月
    	else if (mon == 2) {
    		//判断如果是闰年
    		if ((year % 100 != 0 && year % 4 == 0) || year % 400 == 0) {
    			if (0 < day && day <= 29)
    				printf("YES");
    			else
    				printf("NO");
    		}
    		else {
    			if (0 < day && day <= 28)
    				printf("YES");
    			else
    				printf("NO");
    		}
    	}
    	else {
    		printf("NO");
    	}
    }
    
    展开全文
  • C语言:实现按显示的日历

    千次阅读 2018-05-13 20:07:48
    首先显示一下我们最后要出来效果图: 大概就是这个样子。那么我们先来说说基本思路:首先计算出当前年第一天...我们需要定义一个基准年,再定义出基准年第一天是星期几。最后计算出当前年与基准年之间...
  • C语言实现日历输出

    2017-06-16 21:45:00
    这个还是挺实用的。。。。 头文件: #ifndef MAIN_H #define MAIN_H #include "stdio.h" ...//获取某一个月的最大天数 int monthday(int,int ); //判断闰年 ,是返回1,不是返回0 int isleapyea...
  • 该程序简单地输入一个年份(1901年之后的年份),随后程序输出该年份十二个月的日历。 #include #define Mon 1 #define Tues 2 #define Wed 3 #define Thur 4 #define Fri 5 #define Sat 6 #define Sun 0 #define ...
  • C语言日历小程序

    2014-03-02 09:46:03
    很简陋的一个C语言实现万年历,基本功能还是有,能计算是否是闰年,输入日期是周几,并能输出本月日历
  • 题目要求:2007年11日为星期一,编写一个函数,输出2007年任意月份的日历 这道题我是个人的做法,有个别地方可能有些绕。 #include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; int main() { int month,...
  • 该程序简单地输入一个年份(1901年之后的年份),随后程序输出该年份十二个月的日历。#include#define Mon 1#define Tues 2#define Wed 3#define Thur 4#define Fri 5#define Sat 6#define Sun 0#define January_days ...
  • C语言日历显示程序

    2020-06-25 10:10:55
    (2)输入年和月,输出月的日历。 (3)输入年、月和日,输出星期几,跟今天差多少天。 #include <stdio.h> #include <time.h> int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; char mon...
  • 4.switch语句初始化今年每个月的天数(注意是否闰年对二月单独处理) 5 .for循环查询月份和当月的日期 6.计算星期几 7. 输出月日 8.switch 输出星期几 #include <iostream> #include <stdio.h> #incl
  • 一个多功能日历系统,具有当前日期和时间显示功能、闰年判断功能、星期判断功能、查询年历和月历功能和查询节日功能等。实现如下具体功能: (1)系统以菜单方式工作: (2)当前日期显示功能:以中、英文形式分别...
  • 1、用户从终端输入一个长度为8位字符串 2、字符串内容为某年某某日数值 3、程序通过计算输出当年当月日历 4、程序设计原理及思路 允许 百度 5、希望诸位充分理解题意写出没有BUG代码 6、程序中 不能 预设...
  • 2.可以将每个月的天数存入一个数组中,但是不需要将一个月的每一天存入数组中。 常见问题: 1.如何控制某个月1日的打印位置? 答:先由程序计算出来该月份的1日是星期几,然后控制在打印“1”之前打印相应个数的空格...
  • 1. 编写一个函数,输入年份,判断是否为闰年; 2. 编写一个函数,输入年份,判断当年元旦所...4. 调用【实验一】中1、2的两个函数,打印年历,要求输入年份(1900以后),输出个月的月历构成年历。即每天对应的星期。
  • 2.输入年月,输出月的日历。 3.输入年月日,输出距今天还有多少天,星期几,是否公历节 代码实现: 1.计算今天是星期几 int CaculateWeekDay(int y,int m, int d) { if(m==1||m==2) { m+=12; y--; } int ...
  • 匿名用户 1级 2013-11-04 回答 #include long int f(int year,int month) { if(month) return year-1; else return year; } long int g(int month) { if(month) return month+13;... } 这是我们当初作业,不知合适不
  • 输入一个整数年比如2019和一个整数比如2,输出当月日历 (注意闰年情况) #include<stdio.h> #include<stdlib.h> int main() { int year,month; int W;//基姆拉尔森计算公式计算出星期几 int day...
  • 本代码主要实现使用C语言编写简单的万年历,实现功能:用户输入任意一个年月日,输出该年月日对应周几,同时显示出该月的日历
  • 源码十分简练,既可实现输出任意一个月的日历,又可输出任意一年十二个月的日历。
  • 输入一个年月号,输出月的日历,显示每一天是周几!
  • (1)任意输入一个日期(年月日),程序可输出本年12个月的日历(按日历形式,要有星期,可以不输出相应的农历日子) (2)同时程序自动会对该输入的日期(如2010年6月1日)自动生成一个(名为20100601.txt)文本...
  • 使用C语言打印月历

    万次阅读 多人点赞 2016-01-16 16:39:51
    打印一年的日历有许多不同的实现,我这里提一个可以实现的方法。首先需要确定该年是闰年还是平年,闰年的二是29天,全年是366天;平年二是28天,全年365天。还需要确定该年的每一天是星期几。从0001年11日是...
  • 1949 年国庆节(10 1 日)是星期六。 今年(2012)国庆节是星期一。 那么,从建国到现在,有几次国庆节正好...不要求写出具体是哪些年,只要一个数目! 输出:9 #include <stdio.h> int judge(int y) {...
  • C语言日期操作.cpp

    2019-12-31 09:48:55
    显示公历的万年历,输入的年份在1800-2100年之间。功能要求如下: (1)输入一个年份,输出是在屏幕上显示...(2)输入年、月,输出月的日历。 (3)输入年月日,输出距今天还有多少天,星期几,是否是为公历节日。

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

c语言输出一个月的日历

c语言 订阅