日曆計算器c語言源代碼,日曆c語言編程

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EHAQ的頭像EHAQ
上一篇 2024-10-04 00:18
下一篇 2024-10-04 00:18

相關推薦

  • g3log源代碼學習

    g3log是一個高性能C++日誌庫,其代碼十分精簡和可讀性強,本文將從3個方面詳細介紹g3log源代碼學習。 一、g3log源代碼整體架構 g3log的整體架構十分清晰,其中有3個…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論