网上有关“怎么用C语言编写万年历程序”话题很是火热,小编也是针对怎么用C语言编写万年历程序寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

万年历

#include "stdio.h"

#define ENTER 0x1C0D

int year, month, day;

static char *days[8] = {" ","Sunday ","Monday ","Tuesday ",

"Wednesday","Thursday ","Friday ","Saturday "};

struct TIMEDATE {

int year;

int month;

int day;

int hours;

int minutes;

int seconds;

int hsecs;

char dateline[47];

}; 来源:https://maiya369.com/zhishi/202412-39.html

static struct TIMEDATE today;

main()

{

char cmonth[3];

char cday[3];

char cyear[5];

double getdays();

double daynumb, numbnow;

int weekday, retcode, dayer, i;

dayer = datetime(&today);

clrscn();

for (i=0;i<3;++i)cmonth[i]='\0';

for (i=0;i<3;++i)cday[i]='\0';

for (i=0;i<5;++i)cyear[i]='\0';

putstr(5,8,14,"Enter date in MM DD YYYY format:");

while (retcode != ENTER)

{

retcode = bufinp(5,41,13,2,cmonth);

if (retcode != ENTER) retcode = bufinp(5,44,13,2,cday);

if (retcode != ENTER) retcode = bufinp(5,47,13,4,cyear);

}

year = atoi(&cyear);

month = atoi(&cmonth);

day = atoi(&cday);

daynumb = getdays(year, month, day);

numbnow = getdays(today.year, today.month, today.day);

weekday = weekdays(daynumb);

if (numbnow - daynumb == 0)

printf("\n\n%02d-%02d-%d is",month, day, year);

if (numbnow - daynumb > 0)

printf("\n\n%02d-%02d-%d was",month, day, year); 来源:https://maiya369.com/cshi/202412-94.html

if (numbnow - daynumb < 0)

printf("\n\n%02d-%02d-%d will be",month, day, year);

printf(" a %s\n",days[weekday]);

}

double getdays(year, month, day)

int year, month, day;

{

int y,m;

double a,b,d, daynumb;

double floor(),intg();

if (year < 0) y = year + 1;

else y = year;

m = month;

if (month < 3)

{

m = m + 12;

y = y - 1;

}

d = floor(365.25 * y) + intg(30.6001 * (m + 1)) + day - 723244.0;

if (d < -145068.0) daynumb = d;

else

{

a = floor(y / 100.0);

b = 2 - a + floor(a / 4.0);

daynumb = d + b;

}

return(daynumb); 来源:https://www.maiya369.com/cshi/202503-202.html

}

getdate(numb)

double numb;

{

double a,aa,b,c,d,e,z;

double date;

date = numb;

z = intg(date + 2444239.0);

if (date < -145078.0) a = z;

else

{

aa = floor((z - 1867216.25) / 36524.25);

a = z + 1 + aa - floor(aa/4.0);

}

b = a + 1524.0; 来源:https://maiya369.com/cshi/202503-213.html

c = intg((b - 122.1) / 365.25);

d = intg(365.25 * c);

e = intg((b - d) / 30.6001);

day = b - d - intg(30.6001 * e);

if (e > 13.5) month = e - 13.0;

else month = e - 1.0; 来源:https://maiya369.com/cshi/202503-219.html

if (month > 2) year = c - 4716.0;

else year = c - 4715.0;

if (year < 1) --year;

return;

}

int weekdays(numb)

double numb;

{

double dd;

int day;

dd = numb;

while (dd > 28000.0) dd = dd - 28000.0;

while (dd < 0) dd = dd + 28000.0;

day = dd;

day = ((day + 1) % 7) + 1; 来源:https://www.maiya369.com/cshi/202503-175.html

return(day);

}

double fract(numb)

double numb;

{

int inumb;

double fnumb;

while (numb < -32767) numb += 32767;

while (numb > 32767) numb -= 32767;

inumb = numb;

fnumb = inumb;

return(numb-fnumb);

}

double floor(numb)

double numb;

{

double fract(), intg();

double out;

out = intg(numb);

if (numb < 0 && fract(numb) != 0) out -= 1.0;

return(out);

}

double intg(numb)

double numb;

{

double fract();

return(numb - fract(numb));

}

C语言程序设计 万年历查询程序。

#include<stdio.h>

#include<windows.h>

int menu()

{

char ch;

int x;

system("cls");

printf("请选择相应的菜单:\n");

printf("***********************************\n");

printf("查询某年某月某日是星期几,输入1回车:\n");

printf("查询某年是否是闰年,输入2回车:\n");

printf("打印某年的全年日历,输入3回车:\n");

printf("退出,输入0回车:\n");

printf("***********************************\n");

scanf("%d",&x);

if(x==0)

{

printf("确认退出? Y/N ");

ch=getchar();

scanf("%c",&ch);

if(ch=='Y')

exit(0);

else

main();

}

return x;来源:https://www.maiya369.com/cshi/202503-210.html

}

int judge_week(year,mon,day)

{

int sum,i,flag=0;

if(year%400==0)

flag=1;

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

flag=1;

sum=30*(mon-1)+day;

for(i=1;i<=mon-1;i++)

{

if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)

sum+=1;

if(i==2)

{来源:https://maiya369.com/xwzx/202412-33.html

if(flag==1)

sum-=1;

if(flag==0)

sum-=2;

}

}

return sum;

}

look_week()

{

int year,mon,day,C,S,k;

char ch,week[7][3]={"日","一","二","三","四","五","六"};

system("cls");

printf("请输入要查询的年月日\nyear month day\n");

scanf("%d %d %d",&year,&mon,&day);

if(year<0 || mon<0 || mon>12 || day<0 || day>31)

{

system("cls");

printf("输入的年月日不正确,请重新输入!");

Sleep(3000);

look_week();

}来源:https://www.maiya369.com/xwzx/202412-115.html

C=judge_week(year,mon,day);

S=year-1+(year-1)/4+(year-1)/100+(year-1)/400+C+2;

if(year<=2000 && year>=1901)

S=S+2;

else if(year<=1900)

S+=4;

k=S%7;

system("cls");

printf("\n%d年%d月%d日是星期%s.\n\n",year,mon,day,week[k]);

printf("是否要继续查询? Y/N ");

getchar();

ch=getchar();

if(ch=='Y')

look_week();

else

main();

}

look_runnian()

{

int flag=0,year;

char ch;

system("cls");

printf("请输入要查询的年份: ");

scanf("%d",&year);

if(year%400==0)

flag=1;

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

flag=1;

system("cls");

if(flag==1)

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

else

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

printf("是否要继续查询? Y/N ");

getchar();

ch=getchar();

if(ch=='Y')

look_runnian();

else

main();

}

print_calendar()

{

int i,j=0,k,C,S,flag=0,m,year,mon,d[31];

char ch,week[7][3]={"日","一","二","三","四","五","六"};

system("cls");

printf("请输入要打印日历的年、月:\nyear month\n");

scanf("%d %d",&year,&mon);

C=judge_week(year,mon,1);

S=year-1+(year-1)/4+(year-1)/100+(year-1)/400+C+2;

if(year<=2000 && year>=1901)

S=S+2;

else if(year<=1900)

S+=4;来源:https://www.maiya369.com/xwzx/202412-64.html

k=S%7;

if(year%400==0)

flag=1;

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

flag=1;

if(mon==1 || mon==3 || mon==5 || mon==7 || mon==8 || mon==10 || mon==12)

m=31;

else if(mon==2)

{

if(flag==1)来源:https://maiya369.com/cshi/202503-198.html

m=29;

if(flag==0)

m=28;

}

else

m=30;

for(i=1;i<=m;i++)

d[j++]=i;

system("cls");

printf("%d年%d月的日历如下:\n\n",year,mon);

for(i=0;i<7;i++)

printf("%s\t",week[i]);

putchar(10);

for(i=0;i<k;i++)

printf("\t");

j=k;

for(i=0;i<m;i++)

{

printf("%d\t",d[i]);

j++;

if(j%7==0)

putchar(10);

}

printf("\n\n是否要继续查询? Y/N ");

getchar();

ch=getchar();

if(ch=='Y')

print_calendar();

else

main();

}

main()

{

int a;

a=menu();

switch(a)

{

case 1:look_week();break;

case 2:look_runnian();break;

case 3:print_calendar();break;

default:

{

printf("输入有误,请重新选择相应的菜单:\n");

Sleep(3000);

main();

}

}

}

//2012年12月20日杨东平写于北京交通大学

实验名称:万年历的查询及打印

内容:设计一个查询并打印万年历的程序。

步骤:

1. 画出程序流程图;

2. 编写程序;

3. 调试程序,对调试过程中出现的问题进行分析,找出错误的原因并予改正;

4. 写出通过调试并修改正确的原程序。

要求:

1. 程序运行后,首先在屏幕上显示主菜单:

1. 查询某年某月某日是星期几

2. 查询某年是否是闰年

3. 打印某年的全年日历

4. 退出

2. 在主菜单中输入1后,显示:

“请输入年月日(XXXX,XX,XX)”

 运行后输出:XXXX年XX月XX日是星期X,是否继续查询(Y/N)?

 如果输入Y,则重新显示 “请输入年月日(XXXX,XX,XX)”,否则回到主菜单。

3. 在主菜单中输入2后,显示:

“请输入要查哪一年?(XXXX)”

  运行后输出:XXXX年是(否)是闰年,是否继续查询(Y/N)?

 如果输入Y,则重新显示,“请输入要查哪一年来源:https://maiya369.com/cshi/202503-216.html?(XXXX)”,否则回到主菜单。

4. 在主菜单中输入3后,显示:

“请输入要打印的年份(XXXX)”

  运行后输出XXXX年的日历,格式为:

XXXX

X(月数)

0 1 2 3 4 5 6

S M T W T F S

x x x x x x x

x x x xx xx xx xx

xx xx xx xx xx xx xx

xx xx xx xx xx xx xx

xx xx xx

X(月数)

0 1 2 3 4 5 6

S M T W T F S

x x x x

x x x xxxx xx xx

xx xx xx xx xx xx xx

xx xx xx xx xx xx xx

xx xx xx xx xx

.

.

.

.

.

运行完后显示:“是否继续打印(Y/N)?”

如果输入Y,则重新显示,“请输入要打印的年份(XXXX)”,否则回到主菜单。

5. 在主菜单中输入4后,显示:“是否要真的退出(Y/N)?”

  如果输入Y,结束程序运行,否则重新显示主菜单。

提示:

1. 闰年计算:满足下列二者之一,是闰年:

能被4整除,但不能被100整除;

能被4整除,且能被400整除。

2.闰年的二月是29天,平年的二月是28天

3.星期几的计算:

S=X-1+(X-1)/4+(X-1)/100+(X-1)/400+C

X是年份,C是该年从元旦开始到到这一日的天数。

S/7的余数既是星期数

例1:1982年12月26日

由于1982年不是闰年(不能被4整除),所以该年的二月是28天。

C=31+28+31+30+31+30+31+31+30+31+30+26=360

(1月到11月的天数+12月的实际天数)

S=1982-1+(1982-1)/4+(1982-1)/100+(1982-1)/400+360=2821.3925

S/7=2821/7=403 余数为0,所以该日是星期天。

例2:2000年3月8日

由于2000年是闰年(能被4整除,又能被100和400整除),所以该年的二月是29天。

C=31+29+8=68 (1月到2月的天数+3月的实际天数)

S=2000-1+(2000-1)/4+(2000-1)/100+(2000-1)/400+68=2551.757

S/7=2551/7=364 余数为3,所以该日是星期三。

关于“怎么用C语言编写万年历程序”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!