C语言怎么打印输出某一年的日历
C语言怎么打印输出某一年的日历
本篇内容主要讲解“C语言怎么打印输出某一年的日历”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么打印输出某一年的日历”吧!
输入一个年份(1970以后的),以 2*6 的格式打印当年的日历。
主要思路:遍历日期,根据日期标记每一行应该打印的内容,存放到一个数组中,然后遍历数组,根据数组的内容逐行打印。代码如下:
//打印日历#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>charmonth[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"};//计算某日期是当年的第几天intday_in_year(inty,intm,intd){intr_day=0;intm_days[]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数m_days[1]+=y%400==0||y%4==0&&y%100!=0;for(inti=0;i<m-1;++i){r_day+=m_days[i];}r_day+=d;returnr_day;}//计算某日是星期几intgetWeek(inty,intm,intd){//先计算出来距离1970年1月1日周四有多少天intdays=0;//当日距离1970.1.1的天数intres;//存放结果,周几if(y==1970){days=day_in_year(y,m,d);}else{for(inti=1970;i<y;++i){days=days+365+(i%400==0||i%4==0&&i%100!=0);}days+=(day_in_year(y,m,d)-1);//因为算的是距离多少天,所以需要减一}//然后计算当日是周几res=(days+4)%7;returnres;}//打印日历voiddisplayCalendar(inty){intm_days[]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数m_days[1]=28+(y%400==0||y%4==0&&y%100!=0);intweek_l;//左边月份的第一天是周几intweek_r;//右边月份的第一天是周几for(intm=0;m<6;++m){//m控制月份,比实际月份小1//打印日历的表头printf("%-12s%-12s\n",month[m],month[m+6]);printf("------------------------------------------------------\n");printf("SunMonTueWedThuFriSatSunMonTueWedThuFriSat\n");week_l=getWeek(y,m+1,1);//求出左边月份的第一天是星期几week_r=getWeek(y,m+7,1);//求出右边列月份的第一天是星期几intdate_l=1;intdate_r=1;while(date_l<=week_l+m_days[m]||date_r<=week_r+m_days[m+6]){//在范围内,打印inttag[15]={0};//用来标记应该打印什么,整数表示打印日期,-1表示打印空格tag[7]=-1;//左右界线for(intp=0;p<7;++p,++date_l,++date_r){//p为tag的指针//根据指针p给tag赋值if(date_l<=week_l+m_days[m]){if(date_l<week_l){//指针还没有到左边月份的第一天,应该打印空格tag[p]=-1;}else{//记录应该打印的日期tag[p]=date_l-week_l;}}else{//该打印的日期标记完了,其他的用空格补上tag[p]=-1;}//标记右边的情况,逻辑与左边的一样if(date_r<=week_r+m_days[m+6]){if(date_r<week_r){tag[p+8]=-1;}else{tag[p+8]=date_r-week_r;}}else{tag[p+8]=-1;}}//一行一行打印for(inti=0;i<15;++i){if(tag[i]==-1||tag[i]==0){//没有日期要打印,打印四个空格printf("");}else{//有日期打印,打印日期printf("%-4d",tag[i]);}}printf("\n");}printf("\n");}}intmain(){intyear;//输入年份,打印该年的日历scanf("%d",&year);displayCalendar(year);return0;}
运行效果如下:
到此,相信大家对“C语言怎么打印输出某一年的日历”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!