#include <stdio.h>
int getDaysByMonth(int m,int d,char flag){
int c;
if(flag=='r'){//閏年?
if(m==2){//2月是29天
return (31+d);
}else if(m>2){
c=0;
m=m-1;
for(;m>0;m--){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
c+=31;
}else if(m==2){
c+=29;
}else{
c+=30;
}}
return c+d;
}else{
return d;
}
}else{//平年?
if(m==2){//2月是28天
return (31+d);
}else if(m>2){
c=0;
m=m-1;
for(;m>0;m--){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
c+=31;
}else if(m==2){
c+=28;
}else{
c+=30;
}}
return c+d;
}else{
return d;
}}}
void main(){
int y,m,d,count=1;
printf("請輸入年月日(例如2017-01-01):");
scanf("%d-%d-%d",&y,&m,&d);
while(? ((((y%4==0 && y%100!=0)||(y%400==0)) && (m==2)) && d>29) || (y%400!=0?
&& y%4!=0 && m==2 && d>28) ||? ((m==1 || m==3 || m==5 || m==7 || m==8 || m==10 ||?
m==12)&&d>31) || ((m==4 || m==6 || m==9 || m==11)&& d>30)){
printf("請輸入年月日(例如2017-01-01):");
scanf("%d-%d-%d",&y,&m,&d);}
//先判斷是否為閏年
if((y%4==0 && y%100!=0)||(y%400==0)){//閏年?
count=getDaysByMonth(m,d,'r');
}else{//平年?
count=getDaysByMonth(m,d,'n');}?
printf("%d-%02d-%02d是今年的第%d天\n",y,m,d,count);
putchar('\n');
}
擴展資料:
在壹個表達式中條件比較多的時候,會使用不同運算符連接起來,根據優先級不同壹定要適當使用小括號。
在壹個表達式中可能包含多個有不同運算符連接起來的、具有不同數據類型的數據對象;由於表達式有多種運算,不同的結合順序可能得出不同結果甚至出現錯誤運算錯誤,因為當表達式中含多種運算時,必須按壹定順序進行結合,才能保證運算的合理性和結果的正確性、唯壹性。
優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。表達式的結合次序取決於表達式中各種運算符的優先級。優先級高的運算符先結合,優先級低的運算符後結合,同壹行中的運算符的優先級相同。
參考資料:
百度百科-運算符優先級