在C语言中 使用switch语句编写“显示某年某月的天数”程序:

使用switch语句编写“显示某年某月的天数”程序:【分析】:一月、三月、五月、七月、八月、十月、十二月,均为31天。四月、六月、九月、十一月,均为30天。二月,闰年为2... 使用switch语句编写“显示某年某月的天数”程序:【分析】:一月、三月、五月、七月、八月、十月、十二月,均为31天。四月、六月、九月、十一月,均为30天。二月,闰年为29天,不是闰年为28天。该题可用switch语句求解,但遇到两个矛盾需解决:如何表示一月、三月、五月、七月、八月、十月、十二月均为31天?这是第一个矛盾。闰年如何判断?这是第二个矛盾。Please enter year and month : 2002, 2<回车>2002 2 is 28 days能看到如下运行结果(“2002, 2”是用户键盘输入的,“2002 年2 月是 28 天”是程序运行后显示的): 展开
 我来答
857950459
推荐于2018-02-27 · TA获得超过142个赞
知道答主
回答量:38
采纳率:33%
帮助的人:21万
展开全部

我们可以这样写

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;//这一部分是大月,跟上面小月一样
}
匿名用户
2013-11-04
展开全部
那就在进入swith语句之前先处理一下,比如先建立两个整形数组预存储闰年和非闰年的每个月的天数,再就是判断一下闰,加上一个判断条件,分入口进入switch语句就可以了。 其实,写程序是“法无定法”,实现方式,多对吗?给你个参考程序,判断一个日期是这一年中那一天。编译环境vc++6.0#include<iostream>
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"<<endl;
cin>>year>>month>>day;
if((year%4==0&&year%100!=0)||(year%400==0))
{
for(i=0;i<month-1;i++)
sum=sum+rick[i];
}
else
{
for(i=0;i<month-1;i++)
sum=sum+conmon[i];
}
sum=sum+day;
cout<<year<<' '<<month<<' '<<day<<"是这一年中的第"<<sum<<"天"<<endl;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-04
展开全部
定义一个宏来判断闰年,你也可以参看唐浩强C语言程序设计这本书里面的写法,他用的是调用一个函数。 #include <stdio.h>
#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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-04
展开全部
#include <stdio.h>

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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-04
展开全部
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式