c萬年歷課程設計
A. 用c語言編寫萬年歷
寫萬年歷程序,您需要先了解萬年歷的特點
下面是萬年歷的特點(復制粘貼的):
1. 平年365天(52周+1天),閏年366天(52周+2天)。平年2月28天,閏年2月29天。
由於公元1月1日設為星期六,故3月1日為星期三。 ——注意這個「三」
為使演算法達到最簡,故本演算法以「星期」為計算單位。且選3月1日為基月。
2. 每400年整一閏,或每4年且不為百年的一閏。(原因:地球繞太陽一周的時間是365天5小時46秒,為了使一年的天數為整數,將一年的天數定為365天,餘下的時間積累起來,四年就是23小時15分4秒,將近一天,把這一天加在某年的二月而成29天,該年稱為閏年,其它年稱為平年。但四年加一天又多用了44分56秒,這個數積滿400年為三天。因此400年中只能有97個閏年,所以凡能被400整除,或不能被100整除但能被4整除的年份為閏年。)
所以百年%4=0閏或(年%4=0並且年<>0)閏。
3. 每 4年(3個平年+1個閏年)共208周+5天 ——注意這個「5天」
每百年共100*(208周+5天)-1天=5217周+5天 ——注意這個「5天」(整百年暫設為平年)
每400年共4*(5217周+5天)+1天(整400年閏)=20871周+0天——注意這個「0天」和「1天」(4個整百年只有一個閏年)
即400年一輪回!(原來萬年歷400年前是一家)
至於你說的日期和星期對齊,給你一點思路參考:每一行是7天,可以設定每一天佔10個字元(同時上面的星期也得占滿10個字元),假設本月第一天是星期4,那麼在輸出1之前需要先輸出10×3個字元來佔位,當輸出星期天的日期之後換行,之後的就簡單了
B. C語言數據結構課程設計 萬年歷
找到一個參考網版站權http://blog.163.com/doudou-c-r/blog/static/56905047200921103828575/
C. C語言課程設計 關於萬年歷的 急急急
好的呢,簡單的,課程之前就弄過了給你參考吧
D. 單片機課程設計萬年歷用C語言編寫的keil程序以及proteus的模擬
額,這個你都問題是什麼,這個可以做的!也可以實現,實現的方法一般有兩種1、純軟體回 採用軟體答計時;2 、採用硬體 使用硬體時鍾晶元,單片機讀取數據即可;
有不懂的 ,我們可以交流交流!
滿意的話記得贊一個,呵呵
E. c語言程序設計 萬年歷報告書
||#include <stdio.h>
void main()
{
int year,month,day,days,sum,i,n=0,a;
char c;
redo: printf("請輸入年/月/日(例如:2010/1/1):\n");
scanf("%d/%d/%d",&year,&month,&day);
if(month==1&&(day>=32||day<=0))
{
printf("輸入有誤!1月只能有31天!\n");
goto redo;
}
if(month==2)
{
if((year%400==0)||(year%4==0&&year%100!=0))
{
if(day>=30||day<=0)
{
printf("輸入有誤!%d年是閏年,二月只能有29天!\n",year);
goto redo;
}
}
else if(day>=29||day<=0)
{
printf("輸入有誤!%d年是平年,二月只能有28天!\n",year);
goto redo;
}
}
if(month==3&&(day>=32||day<=0))
{
printf("輸入有誤!3月只能有31天!\n");
goto redo;
}
if(month==4&&(day>=31||day<=0))
{
printf("輸入有誤!4月只能有30天!\n");
goto redo;
}
if(month==5&&(day>=32||day<=0))
{
printf("輸入有誤!5月只能有31天!\n");
goto redo;
}
if(month==6&&(day>=31||day<=0))
{
printf("輸入有誤!6月只能有30天!\n");
goto redo;
}
if(month==7&&(day>=32||day<=0))
{
printf("輸入有誤!7月只能有31天!\n");
goto redo;
}
if(month==8&&(day>=32||day<=0))
{
printf("輸入有誤!8月只能有31天!\n");
goto redo;
}
if(month==9&&(day>=31||day<=0))
{
printf("輸入有誤!9月只能有30天!\n");
goto redo;
}
if(month==10&&(day>=32||day<=0))
{
printf("輸入有誤!10月只能有31天!\n");
goto redo;
}
if(month==11&&(day>=31||day<=0))
{
printf("輸入有誤!11月只能有30天!\n");
goto redo;
}
if(month==12&&(day>=32||day<=0))
{
printf("輸入有誤!12月只能有31天!\n");
goto redo;
}
if(month>=1&&month<=12)
{
if(year%400==0||(year%4==0&&year%100!=0))
printf("%d年是閏年。\n",year);
else printf("%d年是平年。\n",year);
}
if(year>=1901) goto loop1;
else goto loop2;
loop1: for(i=1901;i<year;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(year-1901-n)*365+n*366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年內只能有12個月!請重新輸入!\n");goto redo;
}
a=sum+day+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a++;
if(a%7==1) printf("%d年%d月%d日是星期二。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
goto label;
loop2: for(i=1900;i>year;i--)
{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(1900-year-n)*365+n*366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=58;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年內只能有12個月!請重新輸入!\n");goto redo;
}
if(year%400==0||(year%4==0&&year%100!=0))
a=366-(day+sum)+days;
else a=365-(day+sum)+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a--;
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
if(a%7==1) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期二。\n",year,month,day);
label: printf("Do you want to continue?Y/N:");
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
n=0;
goto redo;
}
}
F. C語言課程設計-萬年歷
1.系統封面設計
內容:題目名稱(中英文)、進入(中英文)、作者:***、時間:****-**-**
2.輸入界面
內容:(1)密碼口令輸入及容錯(3次)
(2)年份的輸入及容錯(3次)
3.日歷計算設計
(1)求某月某日實行奇跡的函數(邱每月一號的星期數)。演算法:(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+c 得出S (y為年份,c為某月某日是這一年的第幾天,S為總的天數)
(2)邱某月某日至這一年第幾天的函數(求c) 閏年的演算法: y/400==0 ?或y/400==0&&y/100!=0
根據(1)(2)求出每個月的日期
4、日歷格式顯示設計
要求:每屏顯示4個月。
-------------------------------
G. 跪求~c語言課程設計 萬年歷
希望對您有所幫助,這是我在當時做的一個小課題。
#include "stdio.h" /* Required for MS-DOS use */
#define ENTER 0x1C0D /* Enter key */
int year, month, day;
static char *days[8] = {" ","Sunday ","Monday ","Tuesday ",
"Wednesday","Thursday ","Friday ","Saturday "};
struct TIMEDATE {
int year; /* year 1980..2099 */
int month; /* month 1=Jan 2=Feb, etc. */
int day; /* day of month 0..31 */
int hours; /* hour 0..23 */
int minutes; /* minute 0..59 */
int seconds; /* second 0..59 */
int hsecs; /* 1/100ths of second 0..99 */
char dateline[47]; /* date & time together */
};
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);
if (numbnow - daynumb < 0)
printf("\n\n%02d-%02d-%d will be",month, day, year);
printf(" a %s\n",days[weekday]);
} /* end MAIN */
/************************************************************
* GETDAYS - From integer values of year (YYYY), month *
* (MM) and day (DD) this subroutine returns a *
* double float number which represents the *
* number of days since Jan 1, 1980 (day 1). *
* This routine is the opposite of GETDATE. *
************************************************************/
double getdays(year, month, day)
int year, month, day;
{
int y,m;
double a,b,d, daynumb;
double floor(),intg();
/**********************************
** make correction for no year 0 **
**********************************/
if (year < 0) y = year + 1;
else y = year;
/*********************************************************
** Jan and Feb are months 13 and 14 in this calculation **
*********************************************************/
m = month;
if (month < 3)
{
m = m + 12;
y = y - 1;
}
/**************************
** calculate Julian days **
**************************/
d = floor(365.25 * y) + intg(30.6001 * (m + 1)) + day - 723244.0;
/**********************************************
** use Julian calendar if before Oct 5, 1582 **
**********************************************/
if (d < -145068.0) daynumb = d;
/*************************************
** otherwise use Gregorian calendar **
*************************************/
else
{
a = floor(y / 100.0);
b = 2 - a + floor(a / 4.0);
daynumb = d + b;
}
return(daynumb);
} /* end GETDAYS */
/********************************************************
* GETDATE - This routine takes a double float number *
* representing the number of days since Jan 1,*
* 1980 (day 1) and returns the year month and *
* day as pointer integers *
* This routine is the opposite of GETDAYS *
********************************************************/
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;
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;
if (month > 2) year = c - 4716.0;
else year = c - 4715.0;
if (year < 1) --year;
return;
} /* end GETDATE */
/********************************************************
* WEEKDAYS - This routine takes a double float number *
* representing the number of days since Jan 1,*
* 1980 (day 1) and returns the day of the week*
* where 1 = Sunday, 2 = Tuesday, etc. *
********************************************************/
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;
return(day);
}
/********************************************************
* FRACT - This routine takes a double float number *
* and returns the fractional part as a double *
* float number *
********************************************************/
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);
} /* end FRACT */
/********************************************************
* FLOOR - This routine takes a double float number *
* and returns the next smallest integer *
********************************************************/
double floor(numb)
double numb;
{
double fract(), intg();
double out;
out = intg(numb);
if (numb < 0 && fract(numb) != 0) out -= 1.0;
return(out);
} /* end FLOOR */
/********************************************************
* INTG - This routine takes a double float number *
* and returns the integer part as a double *
* float number *
********************************************************/
double intg(numb)
double numb;
{
double fract();
return(numb - fract(numb));
} /* end INTG */
H. 用c語言編一個簡易萬年歷程序,做課設!拜託各位大神
#include <stdio.h> void main() { int i,j,temp,temp_i,day,year; long int yeardays; long int sumday(int year); /*所有天數求和 ,不包括今天的 */ int leapyear(int year); /*閏年的定義*/ int month[]=;/*每月天數的判斷*/ int everyday[6][14]; printf ("please enter a year:\n"); scanf("%d",&year); yeardays=sumday(year); for(temp=1;temp<=6;temp++) { getchar(); for(i=0;i<6;i++) for(j=0;j<14;j++) everyday[i][j]=0; /*天數初始化*/ switch(temp) { case 1:printf("\t 一月 %d\t\t 二月 %d\n",year,year);break; case 2:printf("\t 三月 %d\t\t 四月 %d\n",year,year);break; case 3:printf("\t 五月 %d\t\t 六月 %d\n",year,year);break; case 4:printf("\t 七月 %d\t\t 八月 %d\n",year,year);break; case 5:printf("\t 九月 %d\t\t 十月 %d\n",year,year);break; case 6:printf("\t 十一月 %d\t\t 十二月 %d\n",year,year);break; } /*控制兩欄輸出*/ printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n"); i=0;j=0; for(temp_i=0;temp_i<(yeardays%7);temp_i++) { everyday[0][j++]=0; } day=1; while(day<=month[2*temp-1]) /*奇數輸出*/ { if(j%7==0) { j=0;i++; } everyday[i][j++]=day; day++; yeardays++; } i=0;j=7; for(temp_i=0;temp_i<(yeardays%7);temp_i++) { everyday[0][j++]=0; } day=1; if(leapyear(year)&&temp==1) while(day<=month[13]) { if(j%14==0) { j=7;i++; } everyday[i][j++]=day; day++; yeardays++; } else while(day<=month[2*temp]) /*偶數輸出*/ { if (j%14==0) { j=7;i++; } everyday[i][j++]=day; day++; yeardays++; } for (i=0;i<6;i++) { for(j=0;j<14;j++) { if(everyday[i][j]!=0) printf("%-4d",everyday[i][j]); else printf(" "); if(j==6) printf(" "); } printf("\n"); } } } int leapyear(int year) /*閏年的判斷*/ { if((year%4==0&&year%100!=0)||year%400==0) return(1); else return (0); } long int sumday(int year) /*每年天數的判斷*/ { int yearstart=1,leapsum=0; while(yearstart<year) { if(leapyear(yearstart)!=0) leapsum++; yearstart++; } return 366*leapsum+365*(year-leapsum); /*不包括今天的*/ }
I. C語言程序設計萬年歷
||||#include <stdio.h>
int leap (int year)
{if(year%4==0&&year%100!=0||year%400==0) //判斷是否是閏年
return 1;
else return 0;
}
int days_month (int month,int year) //判斷大月和小月
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //找出大月
return 31;
if(month==4||month==6||month==9||month==11) //找出小月
return 30;
if(month==2&&leap(year)==1) return 29; //判斷二月是29天還是29天
else return 28;
}
int firstday(int month,int year)
{int w;
w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1; //判斷每個月開始的第一天是星期幾
return w;
}
main()
{int i,j=1,k=1,a,b,month,year;
printf("\n input month and year:\n");
scanf("%d%d",&month,&year); //輸入月和年
b=days_month(month,year);
a=firstday (month,year);
printf(" Sun Mon Tue Wed Thu Fri Sat \n"); //輸出對應當月的日歷
if(a==7)
{for(i=1;i<=b;i++)
{printf("%4d",i);
if(i%7==0)
{printf("\n");
}
}
}
if(a!=7)
{while (j<=4*a)
{printf(" ");
j++;
}
for(i=1;i<=b;i++)
{printf("%4d",i);
if(i==7*k-a)
{printf("\n");
k++;
}
}
}
printf("\n");
}
J. 請使用C語言設計一個萬年歷和記事本,急!
我來回答了,把分給我吧!