本文目錄一覽:
C語言編程日期計算
#include stdio.h
#include windows.h
/* 以公元陽曆來計算(非農曆) */
int _MONTH[]={{31},{28},{31},{30},{31},{30},{31},{31},{30},{31},{30},{31}};
int days(int *m,int *day)
{
int i,md=0;
unsigned int d;
for(i=0;i(*m-1)(i11);i++)
md=md+_MONTH[i];
d=md+(*day);
return (int)((d+365)-365);
}
void main()
{
int month,day;
RESET:
month=day=1;
printf(“月份:”);
scanf(“%d”,month);
printf(“日期:”);
scanf(“%d”,day);
while((month1||month12)||(day1||day31))
{
printf(“月份或日期有誤,請重新輸入!\n”);
fflush(stdin);
Sleep(3000);
goto RESET;
}
printf(“今天是今年的第%d天\n”,days(month,day));
}
月份與日期是用戶輸入接受來的,如果你想一運行就顯示當前日期是今年的第幾天。你可以使用time.h頭文件里的有關函數來獲取。獲取後你只需將將強制轉換為int型即可帶入實參。具體如何獲取網上有很多成熟的例子。
這個例子的實現原理與日曆實現的原理一樣:
如日曆的原理如下截圖:
C語言萬年曆代碼
#include”stdio.h”
#include”stdlib.h”
main( )
{
int Year,Month; //年、月
int FirstDay_Year,FirstDay_Month; //某年的第一天是星期幾,某年某月的第一天是星期幾(範圍是0~6,其中0代表星期日)
int IsLeapYear; //是否為閏年,0表示不是閏年,1表示是閏年
int i,d,y; //臨時變量
char YN; //Yes No,程序是否要繼續
int Days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//Days[1~12]存儲每個月有多少天,其中二月的天數是可變的(閏年29天,平年28天),這裡初始化為28天
printf(” C語言簡單萬年曆\n”); //打印標題
XunHuan: //循環標號(可以通過goto跳轉到這裡)
printf(“請輸入年份0000~9999: “); //提示輸入年份(0~9999)
scanf(“%d”,Year); //把輸入的年份賦值給變量Year
printf(“請輸入月份0~12: “); //提示輸入月份(1~12)
scanf(“%d”,Month); //把輸入的月份賦值給變量Month
y=Year;
FirstDay_Year=5*(y/4)+(y%4)-(y/100)+(y/400);//蔡勒公式(計算某年的第一天是星期幾)
IsLeapYear=(y%4==4y%100!=100||y%400==0)?1:0;
//判斷是否為閏年
Days[2]=(IsLeapYear==1)?29:28; //閏年二月29天,非閏年二月28天
for(i=1,d=0;iMonth;i++)
d=d+Days[i];
FirstDay_Month=(d+FirstDay_Year)%7; //當月的第一天是星期幾(0代表星期日)
printf(“\n****************************************************\n”);
printf(“\t\t公元 %d 年 %2d 月”,Year,Month); //打印年月
printf(“\n****************************************************\n”);
printf(” 星期日 星期一 星期二 星期三 星期四 星期五 星期六\n”);
//打印星期表頭
for(i=0;iFirstDay_Month;i++)
printf(“%7c”,’ ‘); //當某月的第一天不是星期日時打印空格佔位
for(d=1;d=Days[Month];d++) //循環,從每個月的第一天開始打印
{
printf(“%7d”,d);
if(((d+FirstDay_Month)%7)==0 dDays[Month])
printf(“\n”); //當輸出了星期六而且還未輸出所有天數時,換行
}
printf(“\n****************************************************\n”);
printf(“\n”);
printf(“是否繼續(Y/N)?\n”);
scanf(“%c”,YN);
scanf(“%c”,YN);
if(YN==’Y’ || YN==’y’)
goto XunHuan;
}
跪求C語言編寫的萬年曆原代碼,大哥們幫幫忙啊~
//————-系統庫定義——————-
#include “stdio.h”
#include “BIOS.h”
#include “dos.h”
#define X ” Sun Mon Tue Wed Thu Fri Sat”
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define PGUP 0x4900
#define PGDW 0x5100
#define ESC 0x011b
#define QUERY 0x1071
#define QUERYD 0x1051
//——————————————–
struct date dm ;//時間結構定義
int Cyear,Cmonth,Cday,Cmonnum,Lmonnum ;//全局變量
int isleap(int year)//判斷閏年
{
if(year%4==0year%100||year%400==0)
return 1 ;
else
return 0 ;
}
int getday(int year,int month,int day)//計算X年X月X日是星期幾
{
int flag,s,i ;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31} ;
int cont=0 ;
flag=isleap(year);
if(flag==1)
a[2]++;
for(i=1;imonth;i++)
{
cont=cont+a[i];
}
cont=cont+day ;
s=year+1+(year-1)/4+(year-1)/100+(year-1)/400+cont ;
return s%7 ;
}
void printspace(int n)//輸出空格
{
int i ;
for(i=0;in;i++)printf(” “);
}
void spacer()//輸出分隔符(分隔線)
{
int i ;
for(i=0;i30;i++)
{
printf(“=”);
}
printf(“\n”);
}
void keyinfo()//輸出鍵盤操作信息
{
printf(“\n——-Operation manual——-\n”);
printf(“Year:Up key and Down key\n”);
printf(“Month:Left key and Right key\n”);
printf(“Day:PageUp key and PageDown key\n”);
printf(“Query date of the calendar:Q key\n”);
printf(“Exit calendar:Esc key\n”);
}
void week()//輸出當前日期是星期幾
{
int day ;
day=getday(Cyear,Cmonth,Cday);
if(day==0)
printf(“\n%d-%d-%d is Sunday!\n”,Cyear,Cmonth,Cday);
if(day==1)
printf(“\n%d-%d-%d is Monday!\n”,Cyear,Cmonth,Cday);
if(day==2)
printf(“\n%d-%d-%d is Tuesday!\n”,Cyear,Cmonth,Cday);
if(day==3)
printf(“\n%d-%d-%d is Wednesday!\n”,Cyear,Cmonth,Cday);
if(day==4)
printf(“\n%d-%d-%d is Thursday!\n”,Cyear,Cmonth,Cday);
if(day==5)
printf(“\n%d-%d-%d is Friday!\n”,Cyear,Cmonth,Cday);
if(day==6)
printf(“\n%d-%d-%d is Saturday!\n”,Cyear,Cmonth,Cday);
}
void calendar(int year,int month,int day)//顯示日曆
{
int i,j,d,m,flag,week;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
m=0,d=0,week=0;
Cmonnum=a[month];//當前月的天數
Lmonnum=a[month-1];//上一月的天數
week=d=getday(year,month,1);//取得X年X月的1日是星期幾
flag=isleap(year);
if(flag==1)
{
a[2]++;
}
clrscr();
printf(“\n The calendar of year %d\n”,year);
spacer();
switch(month)
{
case 1 :
printf(” January 1 “);
break ;
case 2 :
printf(” February 2 “);
break ;
case 3 :
printf(” March 3 “);
break ;
case 4 :
printf(” April 4 “);
break ;
case 5 :
printf(” May 5 “);
break ;
case 6 :
printf(” June 6 “);
break ;
case 7 :
printf(” July 7 “);
break ;
case 8 :
printf(” August 8 “);
break ;
case 9 :
printf(” September 9 “);
break ;
case 10 :
printf(” October 10 “);
break ;
case 11 :
printf(” Nevember 11 “);
break ;
case 12 :
printf(” December 12″);
break ;
}
printf(“\n”);
printf(X);
printf(“\n”);
for(i=0;i6;i++)
{
if(i==0)//如果是第一個星期時,執行!
{
printspace(d*4);
for(j=0;j7-d;j++)
{
if(m==day-1)//m到達day的前一天時,輸出[%d]
{
printf(” [%d]”,++m);
}
else if(m==day week!=0)//m到達當天時的,輸出%3d
{
printf(“%3d”,++m);
}
else
{
printf(“%4d”,++m);
}
week=(week6)?week+1:0;//計算當天是星期幾
}
printf(“\n”);
}
else//不是第一個星期時,執行!
{
for(j=0;j7;j++)
{
if(ma[month])
{
if(m==day-1)//m到達day的前一天時,輸出[%d]
{
if(m9)//代表只有一位數的數字如9,8,7…..等。
printf(” [%d]”,++m);
else//代表只有兩位數的數字如10,11,12…..等。
printf(” [%d]”,++m);
}
else if(m==day week!=0)
{
printf(“%3d”,++m);
}
else
{
printf(“%4d”,++m);
}
}
week=(week6)?week+1:0;//計算當天是星期幾
}
printf(“\n”);
if(m==a[month])break ;
}
}
spacer();
if(flag==1)
printf(“\nThe year %d is leap year!\n”,year);
if(flag==0)
printf(“\nThe year %d is not leap year!\n”,year);
week();
printf(“\nThe current date is: %d-%d-%d\n”,dm.da_year,dm.da_mon,dm.da_day);
keyinfo();
}
//keyboard Operation
void key()
{
int key ;
Cyear=dm.da_year,Cmonth=dm.da_mon,Cday=dm.da_day ;
calendar(Cyear,Cmonth,Cday);
while(1)
{
key=bioskey(0);
if(key==RIGHT)
{
if(Cmonth12Cmonth=1)
{
Cmonth++;
}
else
{
Cyear++;
Cmonth=1 ;
}
}
if(key==LEFT)
{
if(Cmonth=12Cmonth1)
{
Cmonth–;
}
else
{
Cyear–;
Cmonth=12 ;
}
}
if(key==UP)
{
Cyear++;
}
if(key==DOWN)
{
Cyear–;
}
if(key==PGUP)
{
if(Cday!=1)
{
Cday–;
}
else if(Cday==1Cmonth==1)
{
Cyear–;
Cmonth=12 ;
Cday=31 ;
}
else
{
Cmonth–;
Cday=Lmonnum ;
}
}
if(key==PGDW)
{
if(Cmonnum!=Cday)
{
Cday++;
}
else if(Cmonnum==CdayCmonth==12)
{
Cyear++;
Cmonth=1 ;
Cday=1 ;
}
else
{
Cmonth++;
Cday=1 ;
}
}
if(key==QUERY||key==QUERYD)
{
printf(“Input date format(YYYY,MM,DD):”);
scanf(“%d,%d,%d”,Cyear,Cmonth,Cday);
}
if(key==ESC)break ;
calendar(Cyear,Cmonth,Cday);
}
}
void main()
{
clrscr();
getdate(dm);
key();
}
求C語言編日曆源代碼的詳細說明
/*
稍微改了下對齊格式,加了注釋
*/
/*
1、閏年的算法:
如果某年能被4整除但不能被100整除,
或者能被400整除,
則該年是閏年.
用表達式表示就是
(year
%4
==
year%100
!=
0)
||
(year%400
==
0)
2、計算某一天是星期幾:
已知1900年的1月1號為星期一,
然後就可以用某一天和1900年的1月1號相差的天數對7取余來求星期,
本題是用的公元1年的1月1號作為基準
*/
#include
stdio.h
#includeconio.h
#includestdlib.h
int
IsLeapYear(int);
//函數定義
void
main()
{
int
i;
int
day;
int
year;
int
temp;
int
temp_i;
long
int
Year_days
=
0;
int
Year_Start
=
1;
int
Per_Year_Days;
int
month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
printf(“Please
enter
the
year:
“);
scanf(“%d”,year);
//輸入年份
while(Year_Start
year)
//從公元1年開始執行while循環,
該年的一月一號為星期一
{
if(
IsLeapYear(
Year_Start
)
)
Per_Year_Days
=
366;
//如果是閏年,
則一年有366天
else
Per_Year_Days
=
365;
//如果不是閏年,
則一年有365天
Year_days
=
Year_days
+
Per_Year_Days;
//Year_days為從公元1年到輸入年份的前一年的天數的總和
Year_Start++;
}
for(
temp
=
1;
temp
=12;
temp++
)
//temp從1到12,
對應一年內12個月
{
switch(
temp
)
//用switch語句將temp和12個月對應起來
{
case
1:
printf(“
January(%d)\n”,year);
//一月
break;
case
2:
printf(“
February(%d)\n”,year);
//二月
break;
case
3:
printf(“
March(%d)\n”,year);
//三月
break;
case
4:
printf(“
April(%d)\n”,year);
//四月
break;
case
5:
printf(“
May(%d)\n”,year);
//五月
break;
case
6:
printf(“
June(%d)\n”,year);
//六月
break;
case
7:
printf(“
July(%d)\n”,year);
//七月
break;
case
8:
printf(“
August(%d)\n”,year);
//八月
break;
case
9:
printf(“
September(%d)\n”,year);
//九月
break;
case
10:
printf(“
October(%d)\n”,year);
//十月
break;
case
11:
printf(“
November(%d)\n”,year);
//十一月
break;
case
12:
printf(“
December(%d)\n”,year);
//十二月
break;
}
i
=
Year_days
%
7;
//每個星期有7天,
故用每年的天數對7取余
printf(“Mon\tTue\tWed\tThu\tFri\tSat\tSun\n”);
if(
i
!=
)
//如果餘數不為零
for(
temp_i
=
0;
temp_i
i;
temp_i++)
printf(“\t”);
//則打印空格(這裡用\t代替空格,
更加美觀),
空格數為i
day
=
1;
//初始化day為1,
為下面的while循環做準備
if(
IsLeapYear(year)
temp
==
2)
//如果輸入的年份是閏年,
並且月份為2
while(
day
=
month_day[12]
)
//day為一循環變量,
取值為1-365(閏年的話為1-366)
{
if(
day
1
)
//如果天數大於一
if(
Year_days
%
7
==
)
//如果是星期日,
則換行
printf(“\n”);
if(
day
=
10
)
printf(“%d\t”,day);
//打印天數+空格
else
printf(“%d\t”,day);
Year_days++;
day++;
}
else
//如果不滿足”輸入的年份是閏年,
並且月份為2″
while
(day
=
month_day[temp-1])
{
if(
day
1
)
if(
Year_days
%
7
==
)
printf(“\n”);
if(
day
=10
)
printf(“%d\t”,day);
else
printf(“%d\t”,day);
Year_days++;
day++;
}
printf(“\n”);
if(
getch()
==
‘q’
)
//如果輸入為q,
則退出程序
exit(0);
}
getch();
//每按一次鍵,
打印一個月份
}
int
IsLeapYear(
int
year
)
{
//判斷是否是閏年,
是則返回1,
否則返回0
if
((year
%4
==
0)
(year
%
100
!=
0)
||
(year
%
400
==
0)
)
return
1;
else
return
0;
}
原創文章,作者:EHAQ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/137883.html