【c语言】计算一年中有多少天

 初学C,但不是初学编程,老师布置的作业有点难度(至少对于目前的授课进度)

确保了月份和天数都必须输入正确的值

高中学过vb,有点编程思想就不用从零开始学C了

希望有机会能搞搞竞赛

稍稍讲讲思路

先判断年月日是不是正常数值,计算天数时调用自定义的mon函数得出前月天数和,再加上本月的指定的日期

最后输出前判断闰年2月要不要多加一天

更详细的写在注释里

知识点

  • 全局变量
  • 数组
  • 自定义函数
  • for循环
  • if及逻辑运算
  • switch结构
#include<stdio.h>
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    //每个月的天数
int flag=2;
    //flag用来判断是否为闰年
    //flag=1表示为闰年,为0非闰年,为2表示输入了不可能存在的年月日
int mon(int x)
{
    //本函数用于计算这个月之前一共有多少天
    //感觉写在case里面会很麻烦就用了自定义函数,杨老师别扣我分Orz
	int i,z=0;
	for(i=0;i<=x-2;i++)//数组范围0-11,再计算到前一个月,所以x-2
	{
		z+=m[i];
	}
	return(z);
}
int main()
{
	int year,month,day,dd;
    //dd用于存放要输出的天数
	printf("input year\n");
	scanf("%d",&year);
	printf("input month\n");
	scanf("%d",&month);
	printf("input day\n");
	scanf("%d",&day);
    if((month>0&&month<13)&&(month==2||(month!=2&&(day>0&&day<=m[month-1]))))
    {
        //判断月份是否输入正确
        //除2月外天数是否输入正确
        if(year%4==0&&year%100!=0||year%400==0)
        {
            //闰年
            if((month==2&&(day>0&&day<30))||month!=2)
                flag=1;//2月小于等于29天
            // else
            // flag=2;
        }
	    else 
        {
            //非闰年
            if((month==2&&(day>0&&day<=28))||month!=2)
	            flag=0;//2月小于等于28天
            // else
            // flag=2;
        }
		//之前没给flag赋初值为2,赋值后应该就不用这两个else了
    }
    else
        flag=2;	
	//判断结束
	if(flag!=2)
	{
		switch(month)
		{
			case 1:dd=day;break;
			case 2:dd=mon(month)+day;break;
			case 3:dd=mon(month)+day;break;
			case 4:dd=mon(month)+day;break;
			case 5:dd=mon(month)+day;break;
			case 6:dd=mon(month)+day;break;
			case 7:dd=mon(month)+day;break;
			case 8:dd=mon(month)+day;break;
			case 9:dd=mon(month)+day;break;
			case 10:dd=mon(month)+day;break;
			case 11:dd=mon(month)+day;break;
			case 12:dd=mon(month)+day;break;
		}
		if(flag==1&&month>2)
			dd++;//闰年的2月多一天
        printf("这是%d年中的第%d天",year,dd);
        getchar();
	}
    else
        printf("没有这一天!\n");
        getchar();
	return 0;
}//getchar使exe在输出结果后不会立马关闭

感觉用do...while循环保证输入日期的正确性也可以,但判断每月天数这一步不是很好处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值