我们可以这样写
switch(month)
{
case 2:{
if((year%2==0 && year%100!=0)||year%400==0)//这是闰年的判断条件,百度一下就知道了
{
day=29;
}
else
{
day=28;
}
break;
}
case 4:
case 6:
case 9:
case 11:day=30;break;//这一部分是小月,利用了switch的特性,没有break就继续执行
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: day=31;break;//这一部分是大月,跟上面小月一样
}
那就在进入swith语句之前先处理一下,比如先建立两个整形数组预存储闰年和非闰年的每个月的天数,再就是判断一下闰,加上一个判断条件,分入口进入switch语句就可以了。 其实,写程序是“法无定法”,实现方式,多对吗?给你个参考程序,判断一个日期是这一年中那一天。编译环境vc++6.0#include
using namespace std;
void main()
{
int i;
int sum=0;
int year,month,day;
int rick[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int conmon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"请输入一个日期,格式:2010 10 10"<
if((year%4==0&&year%100!=0)||(year%400==0))
{
for(i=0;i
}
else
{
for(i=0;i
}
sum=sum+day;
cout<
定义一个宏来判断闰年,你也可以参看唐浩强C语言程序设计这本书里面的写法,他用的是调用一个函数。 #include
#define isLeap(x) ((x) % 4 == 0 ? (x) % 100 == 0 ? (x) % 400 == 0 ? 1 : 0 : 1 : 0)void main()
{
int y,m,day,leapday;
printf("Please enter year and month\n");
scanf("%d,%d",&y,&m);
if(isLeap(y))
{
leapday=28;
}
else
{
leapday=29;
} switch (m)
{
case 1:
day=31;
break;
case 2:
day=leapday;
break;
case 3:
day=31;
break;
case 4:
day=30;
break;
case 5:
day=31;
break;
case 6:
day=30;
break;
case 7:
day=31;
break;
case 8:
day=31;
break;
case 9:
day=30;
break;
case 10:
day=31;
break;
case 11:
day=30;
break;
case 12:
day=31;
break;
}
printf("%d年%d月是%d天",y,m,day);
}
#include
int main()
{
puts("Please enter year and month :");
int y, m;
scanf("%d %d", &y, &m);
const int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int ans = days[m];
if (m == 2 && (y % 4 == 0 && y % 100 != 0 || y % 400 == 0))
++ans;
printf("%d \t %d is %d days", y, m, ans);
}
1:bool isLeap(int year){�0�2 �0�2 return year%4==0 && �0�2y ear%100 !=0 �0�2|| year%400 ==0);}2: 弄 一个数组int month[] = {31,0,31,30,31,30,31,31,30,31,30,31}再弄个方法返回二月的�0�2 �0�2 return �0�2 isLeap?29:28;