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