A. 如何用c語言編寫日歷程序
這個程序基本上給你寫出來了
由於操作比較機械化
所以一些重復的機械操作我(兩個switch中的省略了一些)
我是以2008年1月1日為基準的
那天是星期二
可以查找從那天開始以後的89年中的任意一天
有於 int型的取值范圍所限定的
你自己看看程序把 很簡單
#include<stdio.h>
void lab()
int xinqi()
//計算星期
xinqi(int y,int m,int d)
{
int a,b,star;
int a[12]={31,59,90,120,151,181,212,243,273,304,334,365};
switch(m)
{
case 1: a=m;
case 2: a=m+31;
case 3: a=m+59;
//後面以此類推
}
b=(y-2008)/4;
a=365*(y-2008)+b;
star=a%7+2;
switch(star)
{
case 1: printf("Mon");
case 2: printf("Tue");
//下面以此類推
}
}
//計算天數並輸出相應日期
lab(int y,int m,int d)
{
int a[12]={31,59,90,120,151,181,212,243,273,304,334,365};
int x,run,flag;
if((x-y)%4==0) run=1;
else run=0;
switch(m)
{
case 1:{ flag=a[m]; printf("Jan,%dth,%d",d,y); xinqi(y,m,d);}
case 2:{ flag=a[m]; printf("Feb,%dth,%d",d,y); xinqi(y,m,d);}
case 3:{ flag=a[m]+run; printf("Mar,%dth,%d",d,y); xinqi(y,m,d);}
//後面依次類推
}
}
}
void main()
{
int y,m,d;
printf("輸入:");
scanf("%d %d %d ",&y,&m,&d);
lab(y,m,d);
}
B. 用C語言建立一個小型日歷系統 求救呀!
基本思路就是利用time.h中的結構和變數進行日期的轉換與計算,這里涉及到一個結構變數tm和一個time_t變數(實際為長整型)。
(1)判斷是否為閏年很簡單,就是年份能被4整除而且不能被400整除的就是閏年。
(2)給出一段示範代碼
int
iYear,
iMonth,
iDay;
printf("please
input
the
year(>=1900),
the
month(1-12),
the
date(1-31):
");
scanf("%d
%d
%d",
&iYear,
&iMonth,
&iDay);
struct
tm
struct_time
=
{0};
struct_time.tm_year
=
iYear
-
1900;
struct_time.tm_mon
=
iMonth
-
1;
struct_time.tm_mday
=
iDay;
time_t
ttime;
ttime
=
mktime(&struct_time);
//轉換
struct_time
=
*localtime(&ttime);
printf("%d\n",
struct_time.tm_wday);//輸出星期幾,0為周日
printf("%s\n",
asctime(&struct_time));//以字元串形式輸出日期
理解了之後,(3)和(4)也就輕而易舉了。
C. C語言的簡單日歷代碼,求大神幫忙!!
#include<stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <windows.h>
int year , month , day ;
int day_of_month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
//char wek[7]={'周日','周一','周二','周三','周四','周五','周六'};
int current_year,current_month,current_day;
/************************************通用關鍵函數**************************************************/
void cls_screen()
{
printf("請按任意鍵返回!\n");
getchar();
getchar();
system("cls");
}
void get_current_time() //獲取當前時間
{
time_t timep;
struct tm *p;
time(&timep);
p = gmtime(&timep);
current_year=1900+p->tm_year;
current_month=1+p->tm_mon;
current_day=p->tm_mday;
}
int judgement (int y)
{
if (y % 400 == 0 || (y % 100 !=0 && y %4 ==0))
return 1 ;
else return 0 ;
}
int show_week (int year , int month , int day)
{
/*
公式:w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7
*/
int w ,k; //記錄周幾
int year_last=year %100,c=year/100 , m = month;
if (month==1 )
{
year_last-=1 ;
m=13 ;
}
else if (month==2)
{
year_last-=1;
m=14;
}
w = (year_last + year_last/4 + c/4 - 2*c +26*(m+1)/10+day-1); // abs 絕對值
if (w<0)
{
k=(w%7+7)%7;
}
else k=w%7;
return k ;
}
/************************************第一部分**************************************************/
void print_year (int year)
{
int i , k ,x ,first_week;
printf ("請輸入想要查詢的年月(格式如2012):");
scanf ("%d",&year);
printf("=======================%d年===========================\n",year);
printf("\n");
if (judgement(year))
{
day_of_month[1]=29;
}
else day_of_month[1]=28;
for (i=1 ; i <13 ; i++)
{
first_week = show_week(year,i,1);
printf("=====================%d月日歷如下========================\n",i);
printf ("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for (x=1;x<=first_week;x++)
{
printf("\t");
if (x%7==0) printf ("\n");
}
for (k=1;k<=day_of_month[i-1];k++)
{
printf("%d\t",k);
if (x%7==0) printf ("\n");
x++;
}
printf("\n");
printf("\n");
printf("\n");
}
}
/************************************第二部分**************************************************/
void print_year_month ()
{
int k ,x ,first_week;
printf ("請輸入想要查詢的年月(格式如2012 12):");
do
{
scanf ("%d %d",&year,&month);
if (month<1||month>12)
{
printf("您輸入的月份有誤哦~請輸入正確的月份\n");
printf ("請輸入想要查詢的年月(格式如2012 12):");
}
}while(1>month||month>12);
printf("=====================%d年%d月======================\n",year,month);
if (judgement(year))
{
day_of_month[1]=29;
}
else day_of_month[1]=28;
first_week = show_week(year,month,1);
printf ("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for (x=1;x<=first_week;x++)
{
printf("\t");
if (x%7==0) printf ("\n");
}
for (k=1;k<=day_of_month[month-1];k++)
{
printf("%d\t",k);
if (x%7==0) printf ("\n");
x++;
}
printf("\n");
}
/************************************第三部分**************************************************/
int year_before_sumdays (int year,int month, int day)
{
int days=0 ,i,judgement1;
int temp_day=0 ,sum_days; //
//printf ("%d,%d\n",current_year,current_month);
judgement1=judgement(year);
/*===================比當前少=====================*/
if (year < current_year )
{
for (i = year+1;i < current_year ;i++)
{
if (judgement(i))
{
days=days+356;
}
else days+=355;
}
for (i = month+1;i<=12;i++)
{
days=days+day_of_month[i-1];
}
days = days + day_of_month[month-1]-day; //指定日子距離當年結束還有多少天
//printf("去年還有%d\n",days);
for (i = 0;i < current_month-1;i++ )
{
if (judgement1)
{
day_of_month[1]=29;
}
temp_day = temp_day + day_of_month[i];
}
//當前日子是這一年的多少天
temp_day = temp_day + current_day;
//printf("今天是第%d天\n",temp_day);
sum_days=temp_day + days ;
}
/*===================比當前多=====================*/
if (year > current_year )
{
for (i =current_year+1;i < current_year ;i++)
{
if (judgement(i))
{
days=days+356;
}
else days+=355;
}
for (i = current_month+1;i<=12;i++)
{
days=days+day_of_month[i-1];
}
days = days + day_of_month[month-1]-current_day; //指定日子距離當年結束還有多少天
//printf("去年還有%d\n",days);
for (i = 0;i <month-1;i++ )
{
if (judgement1)
{
day_of_month[1]=29;
}
temp_day = temp_day + day_of_month[i];
}
//當前日子是這一年的多少天
temp_day = temp_day + day;
//printf("今天是第%d天\n",temp_day);
sum_days=temp_day + days ;
}
/*===================比當前一樣=====================*/
if (year == current_year )
{
if(month <current_month)
{
for (i=month+1;i<current_month;i++)
{
if (judgement1)
{
day_of_month[1]=29;
}
days = days + day_of_month[i];
}
sum_days = days + current_day + day_of_month[month-1] - day ;
}
if (month>current_month)
{
for (i=current_month+1;i<month;i++)
{
if (judgement1)
{
day_of_month[1]=29;
}
days = days + day_of_month[i];
}
sum_days = days + day + day_of_month[month-1] - current_day ;
printf("%d\n",days);
}
if (month==current_month)
{
sum_days= abs(day-current_day);
}
}
return sum_days ;
}
void print(int year,int month,int day)
{
int week;
printf ("請輸入想要查詢的年月(格式如2012 12 12 ):");
do
{
scanf ("%d %d %d",&year,&month,&day);
if (judgement(year))
{
day_of_month[1]=29;
}
printf("\n");
if (day<=0 || day >day_of_month[month-1])
printf ("%d月沒有%d,請重新輸入(格式如2012 12 12 ):",month,day);
}while(day<=0 || day >day_of_month[month-1]);
week=show_week (year,month ,day);
printf("\n");
switch(month)//判斷查找天是否陽歷節日先由月份判斷是否有節日的月份再由日判斷是否為節日
{
case 1:switch(day)
{
case 1:printf("元旦") ;break;
default:printf("不是陽歷節日");
}break;
case 2:switch(day)
{
case 14:printf("情人節(Valentines Day)");break;
default:printf("不是陽歷節日");
}break;
case 3:switch(day)
{
case 8:printf("婦女節¨(Women's Day)");break;
case 12:printf("植樹節(Arbor Day)");break;
default:printf("不是陽歷節日");
}break;
case 4:switch(day)
{
case 1:printf("愚人節(April Fools Day)");break;
case 5:printf("清明節(Tomb-sweeping Day)");break;
default:printf("不是陽歷節日");
}break;
case 5:switch(day)
{
case 1:printf("勞動節(Labor Day)");break;
case 4:printf("中國青年節(Chinese Youth Day)");
default:printf("不是陽歷節日");
}break;
case 6:switch(day)
{
case 1:printf("兒童節(Children's Day)");break;
default:printf("不是陽歷節日");
}break;
case 8:switch(day)
{
case 1:printf("建軍節(the Army's Day)");break;
default:printf("不是陽歷節日");
}break;
case 9:switch(day)
{
case 10:printf("教師節(Teacher's Day)");break;
default:printf("不是陽歷節日");
}break;
case 10:switch(day)
{
case 1:printf("國慶節(National Day)");break;
case 31:printf("萬聖節(Helloween Day)");break;
default:printf("不是陽歷節日");
}break;
case 12:switch(day)
{
case 25 :printf("聖誕節(Christmas Day)");break;
default:printf("不是陽歷節日");
}break;
}
printf("\n");
printf("%d年%d月%d號是:",year,month,day);
switch(week)//判斷所查找天是星期幾
{
case 0:printf("Sunday");break;
case 1:printf("Monday");break;
case 2:printf("Tuesday");break;
case 3:printf("Wednesday");;break;
case 4:printf("Thursday");break;
case 5:printf("Friday");break;
case 6:printf("Saturday");break;
}
printf("\n");
printf("距離今天有%d天\n",year_before_sumdays ( year, month, day));
printf("\n");
}
/********************************************************************************************/
void main ()
{
int choice,year,month,day,flag=1;
char c , k;
for(;1;)//顯示程序菜單,為永真,每次查找完回到程序菜單ì
{
printf("===================================菜單選項===================================\n");
printf("請選擇:\n");
printf("* * * * * * * * 1.查找某一年的年歷 * * * * * * * *\n");
printf("* * * * * * * * 2.查找某一月的月歷 * * * * * * * *\n");
printf("* * * * * * * * 3.查找某一天 * * * * * * * *\n");
printf("* * * * * * * * 0.退出 * * * * * * * *\n");
printf("=========================================================
D. c語言簡單的日歷程序
邊界情況比較多,都考慮過了
#include<stdio.h>
void main()
{
int year,month,day,sum,Month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d%d%d",&year,&month,&day);
if(!(year%4!=0||year%100==0 && year%400 !=0))
Month[2]=29;
sum=(month-1)*30+day;
if(sum<=1)
{
year--;
month=12;
day+=31;
}
else if(day<=1)
month--,day+=Month[month];
day-=1;
printf("前一天:%d-%d-%d\n",year,month,day);
day+=2;
if(day>Month[month])
day-=Month[month],month++;
if(month>12)
month=1,year++;
printf("後一天:%d-%d-%d\n",year,month,day);
}
E. 用c語言設計一個簡單的萬年歷怎麼寫代碼
#include"stdio.h"#include"stdlib.h"main(){intYear,Month;//年、月intFirstDay_Year,FirstDay_Month;//某年的第一天是星期幾,某年某月的第一天是星期幾(范圍是0~6,其中0代表星期日)intIsLeapYear;//是否為閏年,0表示不是閏年,1表示是閏年inti,d,y;//臨時變數charYN;//YesNo,程序是否要繼續intDays[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("請輸入年份:");//提示輸入年份(0~9999)scanf("%d",&Year);//把輸入的年份賦值給變數Yearprintf("請輸入月份:");//提示輸入月份(1~12)scanf("%d",&Month);//把輸入的月份賦值給變數Monthy=Year;FirstDay_Year=5*(y/4)+(y%4)-(y/100)+(y/400);//蔡勒公式(計算某年的第一天是星期幾)IsLeapYear=(y%4==4&&y%100!=100||y%400==0)?1:0;//判斷是否為閏年Days[2]=(IsLeapYear==1)?29:28;//閏年二月29天,非閏年二月28天for(i=1,d=0;i
F. C語言編寫日歷
#include <stdio.h>
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void print_calendar(int y);
void main()
{
int y;
printf("Calendar system :\n");
printf("Please input a year between 1600 & 2500:");
while(scanf("%d",&y)!=EOF)//輸入年份
{
if (y<1600 || y>2500)
{
printf("Invalid input. Please try again!\n");
printf("Please input a year between 1600 & 2500:");
continue;
}
print_calendar(y);
}
}
void print_calendar(int y) //列印日歷
{
int i,sum,days,k,m;
char monthname[12][20] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
if((0==y%4&&y%100!=0)||0==y%400 ) //閏年判斷
month[2]=29;
for(m=1;m<13;m++)
{
days = 0;
for (i=1;i<m;i++) //計算m月1號是第幾天
days+=month[i];
days++;
sum=y-1+(y-1)/4-(y-1)/100+(y-1)/400+days;
k=sum%7; //k是星期幾,k=0星期日
printf("%s %d\n",monthname[m-1],y);
printf(" S M Tu W Th F S\n");
printf("%*d",3*(k+1)-1,1);//先輸出3*(k+1)-1個空格,在輸出1
k++;
for(i=2;i<=month[m];i++)
{
if(k == 7)
{
printf("\n");
k=0;
}
if (k == 0)
printf("%2d",i);
else
printf("%3d",i);
k++;
}
printf("\n\n");
}
}
G. 用C語言怎麼編寫萬年歷
C語言編寫萬年歷的源代碼如下:
#include <stdio.h>
int week(int y,int m,int d);
int main()
{
char wk[7][3] = {{"天"},{"一"},{"二"},{"三"},{"四"},{"五"},{"六"}};
int year, month, day, w;
scanf("%d %d %d", &year, &month, &day);
w = week(year, month, day);
printf("%d年%d月%d日 星期%s", year, month, day, wk[w]);
}
int week(int y,int m,int d)
{
static int r[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};
int c,w;
y %= 400;
if ((y==0||y%4==0&&y%100!=0)&&m<3)
c = 5;
else
c = 6;
w = (y+y/4-y/100+r[m]+d+c)%7;
return w;
}
(7)c語言做簡易版日歷擴展閱讀
電子時鍾C語言版的源代碼如下:
#include<stdio.h>
#include<time.h>
#include<string.h>
int main()
{
char str[50];
time_t t;
struct tm *nt;
while(1)
{
system("cls");//清屏函數
t=time(NULL);
nt=localtime(&t);
strftime(str,50,"%Y-%m-%d %H:%M:%S 「,nt);
printf("現在時刻:%s ",str);
}
getch();
return 0;
}
H. C語言程序編寫日歷
/*你好,這個問題我來回答,希望能被採納:*//*函數功能輸出year的日歷*/#include<stdio.h>void
main(){int
a,b,c,d,e,f,i,j,k,n,m,year;printf("input
the
year:\n");
scanf("%d",&year);
//輸入數據的初始化;b=year;c=year%4;d=year/4;e=d*1461+c*365;f=e%7;j=f;
//初始化Year年的第一天的星期;m=j;printf("***%d年的日歷***\n",year);for(a=1;a<=12;a++)
//函數的主要部分,主要實現日歷的列印部分
{
if(a==1||a==3||a==5||a==7||a==8||a==10||a==12)k=31;
else
if(a==4||a==6||a==9||a==11)k=30;
else
if((year%4==0&&year%100!=0)||(year%400==0))k=29;
else
k=28;
printf("%d月份\n
STAT
SUN
MON
TUE
WED
THUR
FRI\n",a);
m=j;
if(m<=5)m=m+1;
else
m=m-6;
for(n=1;n<=m;n++)printf("
");
for(i=1;i<=k;i++,j++)
{if(j==7)j=0;
if(i<10)printf("
%d",i);
else
printf("
%d",i);
if(j==5)printf("\n");
}
printf("\n\n\n");
}}
I. 如何用c語言做個日歷表
1、功能要求 :
1)輸入任一年將顯示出該年的所有月份日期,對應的星期
2)注意閏年情況
其顯示格式要求如下:
1)份:中文英文都可以,
2)下一行顯示星期,從周日到周六,中英文都可以
3)下一行開始顯示日期從1號開始,並按其是周幾實際情況與上面的星期數垂直對齊
2、常式:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
intIsLeapYear(int);//聲明頭文件和函數
voidmain()
{
inti;
intday;
intyear;
inttemp;
inttemp_i;
longintYear_days=0;
intYear_Start=1;
intPer_Year_Days;
intmonth_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};//每個月的天數,最後一個是閏年2月
printf("Pleaseentertheyear:");
scanf("%d",&year);//輸入年份
while(Year_Start<year)//計算從公元1年1月1日到你所查詢年份前一年的天數,是為了以後確定這一年的第一天是星期幾
{
if(IsLeapYear(Year_Start))//確定一年的天數,閏年為366天,一般為365天
Per_Year_Days=366;
else
Per_Year_Days=365;
Year_days=Year_days+Per_Year_Days;
Year_Start++;
}
for(temp=1;temp<=12;temp++)//循環輸出每個月的日歷
{
switch(temp)
{
case1:
printf("January(%d) ",year);//如January(2008)
break;
case2:
printf("February(%d) ",year);
break;
case3:
printf("March(%d) ",year);
break;
case4:
printf("April(%d) ",year);
break;
case5:
printf("May(%d) ",year);
break;
case6:
printf("June(%d) ",year);
break;
case7:
printf("July(%d) ",year);
break;
case8:
printf("August(%d) ",year);
break;
case9:
printf("September(%d) ",year);
break;
case10:
printf("October(%d) ",year);
break;
case11:
printf("November(%d) ",year);
break;
case12:
printf("December(%d) ",year);
break;
}
i=Year_days%7;//計算這個月第一天是星期幾
printf("MonTueWedThuFriSatSun ");
if(i!=0)
for(temp_i=0;temp_i<i;temp_i++)//第一天不是星期一,在前面補空格,本來的空格少了,我加了兩個
printf("");
day=1;
if(IsLeapYear(year)&&temp==2)//閏年的2月
while(day<=month_day[12])
{
if(day>1)
if(Year_days%7==0)//如果不是1號且昨天是星期天,輸入回車,換行
printf(" ");
if(day>=10)//如果大於或等於10號則輸出日期並加2個空格,小於10號輸出日期並加3個空格
printf("%d",day);//開始沒想到這幾行是幹嘛用的,只要一個輸出就好嘛,後來才想到是用來調整格式的
else//只是他並沒有調整好,我做了下修改,現在很整齊了
printf("%d",day);
Year_days++;
day++;
}
else//不是閏年2月的
while(day<=month_day[temp-1])//輸出,同上
{
if(day>1)
if(Year_days%7==0)
printf(" ");
if(day>=10)//理由同上
printf("%d",day);
else
printf("%d",day);
Year_days++;
day++;
}
printf(" ");
if(getch()=='q')//輸入q退出程序
exit(0);
}
getch();
}
intIsLeapYear(intyear)//判斷是否為閏年
{
if((year%4==0)&&(year%100!=0)||//年份能被4整除且不能被100整除或者能被400整除的為閏年
(year%400==0))
return1;
else
return0;
}
J. 用c語言編寫簡易月歷的設計與實現
# include <stdio.h># include <math.h>void printmonth(int m);void printhead(int m);int daysofmonth(int m);int firstday(int y);int year,weekday;
void main(){ int i; printf("請輸入年份:"); scanf("%d",& year); weekday=firstday(year); printf("\n\n"); printf(" %d年\n",year); for(i=1;i<=12;i++) { printmonth(i); printf("\n"); } printf("\n\n");}void printmonth(int m) //列印每月日歷{ int i,days; printhead(m); days=daysofmonth(m); for(i=1;i<=days;i++) { printf("%5d",i); weekday=(weekday+1)%7; if (weekday==0) printf("\n "); }}void printhead(int m) //列印每月的日歷頭(判定起始位置){ int i; printf("\n%d月 日 一 二 三 四 五 六\n",m); printf(" "); for(i=0;i<weekday;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 (((year%4==0 && year%100!=0)||year%400==0)) return 29; else return 28; default: return 0; }}int firstday(int y) //判斷某年元旦是星期幾{ double s ; s=floor(year-1+(year-1)/4.0-(year-1)/100.0+(year-1)/400.0+1); return (int)s%7;}