c语言年历显示函数介绍 C语言年历

C语言年历显示程序设计

#include stdio.h

成都创新互联"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!成都创新互联具备承接各种类型的成都网站建设、网站建设项目的能力。经过10年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。

#include stdlib.h

#include math.h

char* month[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nev","Dec"};

char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

int j_leapyear(int year) //定义函数检测输入年份是否为闰年

{

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

return (1);

// else if(year%4==0year%100!=0)

// return (1);

else return 0;

}

int month_day(int year,int month) //检测该年月份有多少天

{

int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};

if(j_leapyear(year)month==2)

return 29;

else return (mon_day[month-1]);

}

int j_week(int year,int month,int day) //检测该天是星期几

{

int d=0,i; //d表示该天在该年份的累计天数

int w;

/* int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31};

if(j_leapyear(year)==1)

month_day[1]=29;

for(i=0;imonth;i++)

d+=month_day[i];

d=d+day;*/

for(i=1;imonth;i++)

d+=month_day(year,i);

d+=day;

w=(year-1)+(int)(year-1)/4-(int)(year-1)/100+(int)(year-1)/400+d;//网上公式

return ((int)w%7);

}

int allyear(int year) //输出全年日历

{

int i,j,b;

printf("\n%d 日历",year);

for(i=1;i=12;i++)

{

printf("\n\n\t%s\n",month[i-1]);

// printf(" 7 1 2 3 4 5 6 \n");

printf(" S M T W T F S \n");

b=j_week(year,i,1);

for(j=1;j=month_day(year,i)+b;j++)

{

if(j=b)

printf(" ");

else if(j-b10)

printf("%2d ",j-b);

else printf("%2d ",j-b);

//else printf("%2d ",j-b);

if(j%7==0)

putchar('\n');

}

putchar('\n');

}

return 0;

}

void month_print(int year,int month) //输入一个年月,输出这个月的日历

{

int i,c,d;

c=month_day(year,month);

printf("\n\n %d年%d月日历\n",year,month);

printf(" S M T W T F S \n");

d=j_week(year,month,1);

for(i=1;i=c+d;i++)

{

if(i=d)

printf(" ");

else printf("%2d ",i-d);

if(i%7==0)

putchar('\n');

}

putchar('\n');

}

int jisuan_day(int year,int month,int day,int x,int y,int z) //输入年月日,输出距x年y月z日有多少天,星期几,以及是否是公历节日

{

int i,a,b,c=0,d=0,days=0,m=0,n=0,t;

a=year=x?year:x;

b=yearx?year:x;

if(ab)

{

for(i=b+1;ia;i++)

c+=j_leapyear(i);

}

else c=0;

if(year!=x)

d=a-b-1;

else d=0;

m=365*d+c;

if(yearx)

{

for(i=month;i=12;i++)

n+=month_day(year,i);

days=m+n+z-day;

}

else if(yearx)

{

for(i=y;i=12;i++)

n+=month_day(x,i);

for(i=1;imonth;i++)

n+=month_day(year,i);

days=m+n+day-z;

}

else

{

for(i=month=y?y:month;i(month=y?month:y);i++)

n+=month_day(x,i);

days=abs(day-z)+n; //输出距离y月z日有多少天

}

printf("这天离%d年%d月%d号有%d天\n",x,y,z,days);

t=j_week(year,month,day);

if(t==0) //输出星期几

printf("这天星期日");

else if(t==1)

printf("这天星期一");

else if(t==2)

printf("这天星期二");

else if(t==3)

printf("这天星期三");

else if(t==4)

printf("这天星期四");

else if(t==5)

printf("这天星期五");

else if(t==6)

printf("这天星期六");

putchar('\n');

if(month==1day==1)

printf("这天是元旦节");

else if(month==2day==14)

printf("这天是情人节");

else if(month==3day==8)

printf("这天是妇女节");

else if(month==3day==12)

printf("这天是植树节");

else if(month==4day==1)

printf("这天是愚人节");

else if(month==4day==4)

printf("这天是清明节");

else if(month==5day==1)

printf("这天是劳动节");

else if(month==6day==1)

printf("这天是儿童节");

else if(month==8day==1)

printf("这天是建军节");

else if(month==9day==10)

printf("这天是教师节");

else if(month==10day==1)

printf("这天是国庆节");

else if(month==12day==25)

printf("这天是圣诞节");

else printf("这天不是特殊节日");

putchar('\n');

return days;

}

void fish_or_net(int year,int month,int day) //判断是打鱼还是晒网

{

int q;

int i,a,b,c=0,d=0,days=0,m=0,n=0;

a=year=1990?year:1990;

b=year1990?year:1990;

if(ab)

{

for(i=b+1;ia;i++)

c+=j_leapyear(i);

}

else c=0;

if(year!=1990)

d=a-b-1;

else d=0;

m=365*d+c;

if(year1990)

{

for(i=month;i=12;i++)

n+=month_day(year,i);

days=m+n+1-day;

}

else if(year1990)

{

for(i=1;i=12;i++)

n+=month_day(1990,i);

for(i=1;imonth;i++)

n+=month_day(year,i);

days=m+n+day-1;

}

else

{

for(i=month=1?1:month;i(month=1?month:1);i++)

n+=month_day(1990,i);

days=abs(day-1)+n; //先确定这天离1990年1月1日有多少天

}

q=days%5+1;

if(q==1||q==2||q==3) //判断打鱼还是晒网

printf("渔人今天打鱼");

else printf("渔人今天晒网");

putchar('\n');

}

/*int main() //这部分内容用来校检

{

int j_leapyear(int year);

int month_day(int year,int month);

int j_week(int year,int month,int day);

int allyear(int year);

void month_print(int year,int month);

int jisuan_day(int year,int month,int day,int x,int y,int z);

void fish_or_net(int year,int month,int day);

int x,y,z,year,month,day;

// allyear(2015);

//month_print(2016,12);

printf("请输入今天的日期(按年,月,日输入,如2016,1,14表示2016年1月14日):");

scanf("%d,%d,%d",x,y,z);

printf("\n请随便输入一个日期,格式同上:");

scanf("%d,%d,%d",year,month,day);

jisuan_day(year,month,day,x,y,z);

// fish_or_net(x,y,z);

return 0;

} // 这部分内容是用来检测上述函数是否出错的

*/

int main()

{

int j_leapyear(int year);

int month_day(int year,int month);

int j_week(int year,int month,int day);

int allyear(int year);

void month_print(int year,int month);

int jisuan_day(int year,int month,int day,int x,int y,int z);

void fish_or_net(int year,int month,int day); //函数声明

int option,year,month,day,x,y,z;

char ny;

system("color 1f");

while (1)

{

printf("\n\n\t 欢迎来到由...编写的程序\n\n");

printf(" 请选择您需要的服务,输入编号回车结束\n");

printf(" 1.输入一个年份,输出该年的日历\n");

printf(" 2.输入年月,输出这个月的日历。\n");

printf(" 3.输入年月日,输出据今天还有多久,星期几,是否是公历节日。\n");

printf(" 4.某人自1990年1月1日开始打鱼,“三天打鱼,两天晒网”,输入一个1990年以后的日期,输出他这一天是打鱼还是晒网。\n");

printf(" 5.退出\n");

scanf("%d",option);

switch(option) //switch分支结构

{

case 1:

while(1) //while循环,后面的1是常数,表示一直到break才结束循环

{

printf("请输入一个年份:");

scanf("%d",year);

allyear(year);

printf("你想继续查询日历么?(y表示继续,n表示结束)");

scanf("%c",ny);

if(ny=='n')

break;

}

break;

case 2:

while (1)

{

printf("输入年月:");

scanf("%d,%d",year,month);

month_print(year,month);

printf("你想继续查询日历么?(y表示继续,n表示结束):");

scanf("%c",ny);

if(ny=='n')

break;

}

break;

case 3:

while (1)

{

printf("输入年月日:");

scanf("%d,%d,%d",year,month,day);

printf("请输入今天的日期:");

scanf("%d,%d,%d",x,y,z);

jisuan_day(year,month,day,x,y,z);

printf("你想继续查询么?(y表示继续,n表示结束):");

scanf("%c",ny);

if(ny=='n')

break;

}

break;

case 4:

while (1)

{

printf("输入1990年1月1日以后的一个日期:");

scanf("%d,%d,%d",year,month,day);

fish_or_net(year,month,day);

printf("你想继续查询渔人是打鱼还是晒网么?(y表示继续,n表示结束):");

scanf("%c",ny);

if(ny=='n')

break;

}

break;

case 5:

while (1)

{

printf("确认么?y表示是的,n表示不是");

scanf("%c",ny);

if(ny=='y')

exit(1); //表示退出程序

else if(ny=='n')

break;

}

break;

default:printf("对不起,暂时没有这个服务");

break;

}

}

return 0;

}

c语言年历编程

#includestdio.h

static int year;

static int weekDay;

bool isLeapYear(int y)  //判断是否是闰年

{

return(y%4==0y%100!=0||y%400==0); //闰年的条件就是年份同时能被4和100整除或

// 者能被400整除

}

long firstDayOfYear(int y)   //求出输入的那年第一天是星期几

{

long n;

n=y*365;

for(int i=1;iy;i++)

if(isLeapYear(i)) 

   n+=1;

return n%=7;

}

void printHead(int m)  //打印每个月的标题

{

if(m10)

 printf("    %d月   日   一   二   三   四   五   六\n",m);

else 

 printf("   %d月   日   一   二   三   四   五   六\n",m);

printf("       ");

for(int i=0;iweekDay;i++)  

   printf("     ");

}

int daysOfMonth(int m)  // 判断每个月有多少天

{

switch(m)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: return 31;

case 4:

case 6:

case 9:

case 11: return 30;

case 2:if(isLeapYear(year)) 

  return 29;

else 

   return 28;

}

return 0;

}

void printMonth(int m)  //打印每月的日历

{

printHead(m);

int days=daysOfMonth(m);

for(int i=1;i=days;i++)

{

if(i10) 

 printf("    %d",i);

else 

 printf("   %d",i);

weekDay=(weekDay+1)%7;

if(weekDay==0)

  {

printf("\n");

printf("       ");

}

}

}

void main()  //主程序入口,接收输入的年份,调用函数打印日历

{

int y;

printf("请输入年份:");

scanf("%d",y);

year=y;

if(year1)

{

printf("输入年份不能小于1\n");

return;

}

weekDay=(int)firstDayOfYear(year);

printf("                   %d年\n",year);

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

for(int i=1;i=12;i++)

 {

printf("\n");

printMonth(i);

printf("\n");

}

}

可以显示公元1世纪以后的所有年份的日历,第2和第3问其实都包含在第1问里,程序看懂了自然也就会了(话说为什么不能上传附件?)

C语言中有没有能显示系统日期和时间的函数?

C语言中读取系统时间的函数为time(),其函数原型为:

#include time.h

time_t time( time_t * ) ;

time_t就是long,函数返回从1970年1月1日(MFC是1899年12月31日)0时0分0秒,到现在的的秒数。可以调用ctime()函数进行时间转换输出:

char * ctime(const time_t *timer);

将日历时间转换成本地时间,按年月日格式,进行输出,如:

Wed Sep 23 08:43:03 2015

C语言还提供了将秒数转换成相应的时间结构的函数:

struct tm * gmtime(const time_t *timer); //将日历时间转化为世界标准时间(即格林尼治时间)

struct tm * localtime(const time_t * timer); //将日历时间转化为本地时间

将通过time()函数返回的值,转换成时间结构struct tm :

struct tm {

int tm_sec; /* 秒 – 取值区间为[0,59] */

int tm_min; /* 分 - 取值区间为[0,59] */

int tm_hour; /* 时 - 取值区间为[0,23] */

int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */

int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */

int tm_year; /* 年份,其值等于实际年份减去1900 */

int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */

int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */

int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/

};

编程者可以根据程序功能的情况,灵活的进行日期的读取与输出了。

例如:

#includetime.h

main()

{

time_t timep;

struct tm *p;

time (timep);

p=gmtime(timep);

printf("%d\n",p-tm_sec); /*获取当前秒*/

printf("%d\n",p-tm_min); /*获取当前分*/

printf("%d\n",8+p-tm_hour);/*获取当前时,这里获取西方的时间,刚好相差八个小时*/

printf("%d\n",p-tm_mday);/*获取当前月份日数,范围是1-31*/

printf("%d\n",1+p-tm_mon);/*获取当前月份,范围是0-11,所以要加1*/

printf("%d\n",1900+p-tm_year);/*获取当前年份,从1900开始,所以要加1900*/

printf("%d\n",p-tm_yday); /*从今年1月1日算起至今的天数,范围为0-365*/

}

C语言编写 年历显示程序

此题不是很难,我会前三个

关键是算那一年的第一天是周几

给你个基本算法,一年是365天,闰年366天

364是7的倍数,这样一年多出一天,中间多少个闰年,在加上相应的天数即可

400年多出来的天数是400+97=497也是7的倍数,那么400年一轮回,这样就算400年以内的即可

一个子函数,返回这一年的第一天是周几,很好做

int ye(int year)

{

int y=year%400;

int day=y;

int i;

for(i=0;iy;i++)

if(闰年判断)

day++;

return day%7;

}

做一个月份天数的全局数组

int mo[12]={31,28,31,30,31,30,31,31,30,31,30,31};

需要时用一个if判断闰年改变m0[1]的值是28还是29

打印子函数,有一个小技巧,就是每个月前面的空缺部分,这个1月份是ye子函数的返回值,后面的你看和前面月份是不是重合啊,吧这个记录下来在下一月份用即可

1 2

3 4

这样月份排列更好打印一些,你的那个截图有点麻烦

int pr(int year)

{

int k=ye(year);

int i,j,;

if(闰年判断)

mo[1]=29;

else

mo[1]=28;

for(i=0;i12;i++)

{

printf("周几英文的打印");

for(j=0;jk;j++)

printf("一般是四个空格,就是月份前面空缺的打印");

for(j=1;j=mo[i];j++)

{

printf("%4d",j);

k++;

if((k+j)%7==0)

printf("\n");

}

k%=7;

if(k!=0)

printf("\n");

}

}

如果像你那样,感觉需要赋值一个大一点的数组,在吧数组打印出来更好,呵呵

c语言万年历编程解释

#include stdio.h

int leap(int year ) //平闰年的判断

{

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

{

return 1;

}

return 0;

}

void show(int year,int month) //显示指定年制定月的日历

{

//定义12个月的英文字符串

const char month_str[][4]={"","Jan","Feb","Mar","Apl",

"May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};

//定义各个月的天数,二月为28天, 平年

const int month_day[]={30,31,28,31,30,31,30,31,31,30,31,30,31};

//分别定义:

int i;//该变量在后续代码中经常被使用,为计数变量

int j;//同上

int wdays;//该变量是星期数(1至7)分别代表星期(一至日)

int mdays;//记录所查询的月份的天数,注意该天数在一开始计算总天数days的时候并未被算入

int days;//记录所查询年月(从公元元年开始)的总天数,比如2008年12月的days总天数计算方式为:先计算从公元1年到2007年的总天数,再加上2008年前11个月的总天数,至此总天数days的值还不是正确的,2008年12月份的天数尚未加上,这一点在(向控制台)显示日历的过程中将逐一加上,这一处理方法也是程序实现的一个必须性要求

//从公元元年开始计算到第(year-1)年的总的天数

for(i=1,days=0;iyear;i++)

{

if(leap(i)) //闰年

{

days += 366;

}

else

{

days += 365; //平年

}

}

//再加上第year年前(month-1)个月的总天数

for(i=1;imonth;i++)

{

if(i==2 leap(year))

{

days+=29;

}

else

{

days+=month_day[i];

}

}

printf(" %s (%d)\n",month_str[month],year); //显示月(年)

printf(" Mon Tue Wed Thu Fri Sat Sun\n"); //显示日历表头

wdays = days % 7; //此即公式核心,计算星期序号,星期天为星期七

for( j = 0; j wdays; j++)

{

printf("%4c",' '); // 控制台显示格式需要 即空格打印

}

//定义mdays的值

if(month == 2 leap(year))

{

mdays=29;

}

else

{

mdays= month_day[month];

}

//其中 i 为月的号数

for(i=1;i=mdays;i++)

{

if( i 1 days % 7 == 0 ) //此即日历公式核心,它是以星期为单元计算日历,可见公元元年元旦为星期一

{

printf("\n"); //格式需要 换行

}

printf("%4d",i);

days=days+1; //此处让days(不是完整的总天数)变量逐一递增到真正的总天数

}

printf("\n---------------------------\n");

}

/*main()

{

int year,month;

printf("输入年和月份:");

scanf("%d%d",year,month);//该程序的一个明显的bug:对输入的年月数据没有进行必要的数据约束检查,比如我们总不能输入 -2009 13 吧?这样程序一下就崩溃了

show(year,month);

getchar();//暂停,让控制台显示的内容停留,键入任意键将继续

}*/

//给个新的main()

void main()

{

int year,month;

char c;

do

{

printf("\n输入年和月份:");

scanf("%d%d",year,month);

if(year1 || month1 || month 12)//这三个条件缺一不可

{

//错误信息提示

printf("年月数据输入有误,请检查!");

}

else

{

show(year,month);

}

printf("\n\n继续查询请输入y");

c=getchar();

getchar();//接收键入y以后回车确定的字符

}while(c=='y');

}

//我已经在VC上调试过,运行正常

万历表还可以做很多扩展,有兴趣可以加我交流 QQ:805966355


本文标题:c语言年历显示函数介绍 C语言年历
当前网址:http://myzitong.com/article/dodcosi.html