A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shepqrst 中级黑马   /  2015-3-9 15:27  /  1378 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
  说实话这题做了好久,在判断日期的合法性上纠结了,究竟需不需要判断如果输入的年份是润年的话,二月份的日期是否>29,大家谁有好的判别日期合法性,给俺说说呗,下边是我的代码
#include <stdio.h>
#include <string.h>
int LeapYear (d,e,f);
int DateLegal(a,b,c);
int DateLegal(a,b,c){//定义一个函数来检测输入日期的合法性
        if(LeapYear (a,b,c)){
                if((b=2)&&(c>28))
                        printf("您所输入的年份是平年!二月只有28天\n");
                return 1;
        }
        if (a < 2006) return 1;
        if(b>12) return 1;
        if(c>31) return 1;
        else
                return 0;
}
int LeapYear (int d,int e,int f){//定义一个函数,判断xxxx年是否是闰年
        if(d%400==0||(d%4==0&&d%100!=0)) return 0;
        else
                return 1;
}

int main(){
        int sum1=0;
        int i=2006;
        int sum2=0;
        int j=1;
        int year,month,day;//定义三个参数用来存放用户输入的年-月-日       
        int sumDay;
        int PYear[12]={31,28,31,30,31,30,31,31,30,31,30,31};//定义数组存放平年的12个月份的天数
        int RYear[12]={31,29,31,30,31,30,31,31,30,31,30,31};//定义数组存放闰年的12个月份的天数
        printf("请输入2006年1月1日后的任意一天,格式按照2015-4-10形式书写:\n");
        scanf("%d-%d-%d",year,month,day);
        if (DateLegal(year,month,day)){//判别用户输入的日期是否合法
                printf("日期不合法,请重新输入\n");
                return -1;//非正常退出程序
        }
        //算出相差的年的天数的和
        for (i=2006;i<year;i++){
                if(LeapYear (year,month,day))
                        sum1+=366;
                else
                        sum1+=365;
        }
        //算出相差月的天数的和;
        for (j=1;j<month;j++){
                if (LeapYear (year,month,day)){
                        sum2+=RYear[j-1];
                }else
                        sum2+=PYear[j-1];
        }
        sumDay=sum1+sum2+day;
        //判别小明今天结识的是美女还是帅哥
        if ((sumDay%2==0)&&(sumDay%3!=0)){
                printf("小明%d-%d-%d结识了美女\n",year,month,day);
        }
        else if((sumDay%3 == 0)&&(sumDay%2!=0))
                printf("小明%d-%d-%d结识了帅哥\n",year,month,day);
        else if((sumDay%3 == 0)&&(sumDay%2 == 0))
                printf("小明%d-%d-%d既结识了美女,也结识了帅哥\n",year,month,day);
        else
                printf("小明今天谁也没结识\n");
        //程序正常退出
        return 0;
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马