| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1549 人关注过本帖
标题:判断日期是否合法,然后计算日期是星期几
只看楼主 加入收藏
王艾文
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-5-13
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
判断日期是否合法,然后计算日期是星期几
再次给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。

输入:

    年 月 日

输出:

    0~6。
    星期日用 0 表示,星期一用 1 表示,星期二用 2 表示......星期六用 6 表示。
以下是我写的代码,但是却有一个用例显示错误,啊,有点崩溃啊,大神帮帮我。[code]#include<stdio.h>
int main()
{
    int  y,m,d,W,n=0,s=1;
    scanf("%d%d%d",&y,&m,&d);
    if (y<=1900)
       {
           printf("year is error.\n");
           s=0;
       }
    else{
        switch(m)
        {
            case 1:n=31;break;
            case 2:n=28;break;
            case 3:n=31;break;
            case 4:n=30;break;
            case 5:n=31;break;
            case 6:n=30;break;
            case 7:n=31;break;
            case 8:n=31;break;
            case 9:n=30;break;
            case 10:n=31;break;
            case 11:n=30;break;
            case 12:n=31;break;
            default:{printf("month is error.\n");
                     s=0;}
        }

    if(m=2)
    if((y%4==0&&y%100!=0)||(y%400==0))
        n=29;
    if(s==1&&d>n)
    {
        printf("day is error.\n");
        s=0;
    }}
   if(s==1){ if(m==1||m==2) {
        m+=12;
        y--;
    }
    W=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;
    W+=7;
    W%=7;
      printf("%d\n",W);
      return 0;
}}[code]
图片附件: 游客没有浏览图片的权限,请 登录注册



搜索更多相关主题的帖子: break 计算 case 合法 日期 
2020-05-13 02:41
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:10 
d=0时呢
2020-05-13 07:02
星泪成寒
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:77
专家分:549
注 册:2013-5-19
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <string.h>

//闰年判断
int is_leap_year(int year)
{
    return ((year % 4 == 0) && (year % 400 != 0));
}

//日期检查
int check_date(int year, int month, int day)
{
    static int months[] = {0,31,28,31,30,31,30,31,30,30,30,30,31};
    int tmp = 0;
    
    //基本判读
    if ((year <= 0) || (month <= 0) || (month > 12) || (day <= 0) || (day > 31)) {
        return -1;
    }
    
    tmp = months[month];
    if (28 == tmp) {//闰年2月加一天
        tmp += is_leap_year(year);
    }
    if (day > tmp) {
        return -1;
    }
    
    return 0;
}

//星期计算(0表示星期天)算法:基姆拉尔森计算公式
int get_weekday(int year, int month, int day)
{
    if ((1 == month) || (2 == month)) {
        month += 12;    /* 13/14月 */
        year -= 1;        /* 上一年 */
    }
    
    return (day + 2 * month + 3 * (month + 1)/5 + year + year/4 - year/100 + year/400 + 1) % 7;
}

int main(void)
{
    int year, month, day;
    
    scanf("%d %d %d", &year, &month, &day);
    
    if (check_date(year, month, day) != 0) {
        printf("Error Input\n");
        return 0;
    }
    
    printf("%d\n", get_weekday(year, month, day));
    return 0;
    
}

2020-05-13 16:31
快速回复:判断日期是否合法,然后计算日期是星期几
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045861 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved