有一題題目是這樣的
寫一程式,要求輸入西元年、月、日,計算自西元1900年1月1日至所輸入之日期,共有多少天數?
請問各位大大這樣怎麼寫?
PS:用C語言
2006-07-07 14:01:02 · 2 個解答 · 發問者 Henry 1 in 電腦與網際網路 ➔ 程式設計
嗯.....各位大大,感謝大家回答,其實這題目不需要考慮閏年,而且月份以30天為一個月而已....
2006-07-08 17:09:11 · update #1
這是不是學校作業呀?
我來寫寫看好了!
2006-07-08 01:30:14 補充:
//Power by Microsoft Visual Studio 2005
//可以使用 Dev-C++ 編譯此程式
#include
#include
#include
int main(){
//START
void convertInteger(int *INTEGER,char *STRING);
int analyzeLeap(int YEAR);
int input_days(int Month,int Date);
char strStartYMD[11],strEndYMD[11];//"yyyy/mm/dd\0" 11 characters
int intStartYMD[3],intEndYMD[3],intCommonYear=0,intLeapYear=0,i,nDays=0;
printf("Days Counter\ninput format ex: 2006/7/7\n\nInput START day: ");
scanf("%s",&strStartYMD);
printf("Input END day: ");
scanf("%s",&strEndYMD);
convertInteger(intStartYMD,strStartYMD);//Get start Year, Month, Day
convertInteger(intEndYMD,strEndYMD);//Get end Year, Month, Day
if(*(intEndYMD+0)>*(intStartYMD+0)){
for(i=1;i<*(intEndYMD+0)-*(intStartYMD+0)-1;i++){
if(analyzeLeap(*(intEndYMD+0)+i)!=EOF){
intCommonYear++;
}else{
intLeapYear++;
}
}
nDays=intCommonYear*365+intLeapYear*366;
nDays+=input_days(*(intStartYMD+1),*(intStartYMD+2));
if(analyzeLeap(*(intStartYMD+0))==EOF){
nDays++;
}
nDays+=365-input_days(*(intEndYMD+1),*(intEndYMD+2))+1;
if(analyzeLeap(*(intEndYMD+0))==EOF){
nDays++;
}
printf("Days: %d\n",nDays);
}else if(*(intEndYMD+0)==*(intStartYMD+0)){
nDays=input_days(*(intStartYMD+1),*(intStartYMD+2))-input_days(*(intEndYMD+1),*(intEndYMD+2))+1;
if(analyzeLeap(*(intStartYMD+0))==EOF&&*(intStartYMD+1)<3){
nDays++;
}
printf("Days: %d\n",nDays);
}else{
printf("End Year must be greater than Start Year.\n");
}
//END
system("PAUSE");
return 0;
}//main
void convertInteger(int *INTEGER,char *STRING){
int i=0;
char *token,strSep[]="/";
token=strtok(STRING,strSep);
*INTEGER=atoi(token);
while(token!=NULL){
token=strtok(NULL,strSep);
if(token!=NULL){
*(INTEGER+(++i))=atoi(token);
}
}
}
int analyzeLeap(int YEAR){
int nAnalyze;
if((YEAR%4==0||YEAR%400==0)&&(YEAR%100!=0||YEAR%4000!=0)){
nAnalyze=EOF;//True
}else{
nAnalyze=0;//False
}
return nAnalyze;
}
int input_days(int Month,int Date){
int Month_commonYear[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,DAYS;
DAYS=(Month_commonYear[Month-1]-Date+1);
if(Month<12){
for(i=Month;i<12;i++){
DAYS+=Month_commonYear[i];
}
}
return DAYS;//return Days
}
如果上面程式碼有不懂的地方,請提出來。
俗話說:「打破砂鍋問到底」
2006-07-08 23:08:07 補充:
副程式說明:
void convertInteger(int *INTEGER,char *STRING);
輸入的字串 2006/7/7 轉換成整數
int analyzeLeap(int YEAR);
分析是否為閏年
int input_days(int Month,int Date);
算「平年」的天數,不是閏年,以 7/7 為例,從 7/7 算至 12/31 的天數,如果 1/1,算至 12/31 的天數為 365 天
2006-07-07 21:30:14 · answer #1 · answered by Big_John-tw 7 · 0⤊ 0⤋
這個題目= =" 每年的每個月天數~~~有些都沒有一定....
我之前有寫過一個題目是...計算天數的!
就是輸入幾年幾月幾日....然後是計算那一年的一月到你輸入的日期的天數~~~`
2006-07-07 22:22:50 補充:
如果你要參考~~~那我再po吧 ^^"
方法就是先判斷是否閏不閏年....
然後再用swith計算天數~~~
這是我的方法^^"
2006-07-07 18:19:36 · answer #2 · answered by ? 3 · 0⤊ 0⤋