黑马程序员--基础测试--测试题思路分析

  1.                                                                          -----------android培训java培训、java学习型技术博客、期待与您交流!------------ 
  2. 小明从200611日开始,每三天结识一个美女两天结一个帅哥,编程实现当输入200611日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)


    今天做黑马的基础测试分享下代码

    #include <stdio.h>


        //声明函数

    int getDays(int y,int m,int d);

    int runYear(int y);

    int jieShouData(int y,int m,int d);


        //定义数组用来存放闰年和非闰年每月的天数

    int pingYearM[12] = {31,28,31, 30, 31, 30,31,31, 30, 31, 30,31};

    int runYearM[12] = {31,29,31, 30, 31, 30,31,31, 30, 31, 30,31};



    int main(int argc,constchar * argv[]) {

        //定义类型的变量

        //提示用户输入并接收日期

        //判断用户输入信息是否有误,如有提示用户重新输入

       int year, month, day;

       do {

            printf("亲耐滴,请输入2006 1 1之后的日期,中间用空格隔开:\n");

            scanf("%d %d %d", &year, &month, &day);

        }while (jieShouData(year, month, day));

        

        

        //调用getDays函数,计算输入日期距离2006-1-1的总天数

       int allDays = getDays(year, month, day);

        

        

        //利用总天数计算小明某天是否结识帅哥美女

        //总天数能被2整除就结识帅哥

        //总天数能被3整除就结识美女

        //总天数如果不能被23整除,就不结识帅哥,也不结识美女

       if (allDays %3 ==0)

            printf("我靠!小明今天结识了美女!\n");

       if (allDays %2 ==0)

            printf("运气不错哦,小明今天结识帅哥!\n");

       if ((allDays %2 !=0) && (allDays %3 !=0))

            printf("不会吧?小明今天居然没有结识帅哥,也没有结识美女!\n");

       return0;

    }


        //定义函数计算输入日期距离2006-1-1的总天数

        //定义两个变量用来存储年份,月份相差的天数

        //如果是闰年,年份天数加上366不是加365

    int getDays(int y,int m,int d)

    {

       int yearDays =0, monthDays =0;

       for (int i =2006; i < y; i++) {

           if (runYear(i))

                yearDays +=366;

           else

                yearDays +=365;

        }

        //计算输入月份与11日之间相差的天数

        //如果是闰年,就累加闰年所对应月份的天数

        //如果不是闰年,就累加非闰年所对应月份的天数

       for (int j =1; j < m; j++) {

           if (runYear(y))

                monthDays += pingYearM[j-1];

           else

                monthDays += runYearM[j-1];

        }

        //计算总天数并返回

       int allDays = yearDays + monthDays +d;

       return allDays;

    }

    /*  新建一个函数用来判断是否是闰年

        1)非整百年能被4整除的为闰年

        2)整百年能被400整除的是闰年

    */

        //如果是闰年,返回1,否则返回0

    int runYear(int y)

    {

       if ( (y%4==0 && y%100!=0) || (y%400==0) )

           return1;

       else

           return0;

    }


        //新建一个函数用来判断输入的日期是否合理,不合理返回1,合理返回0

        //如果年份小于2006、或月份小于1、或月份大于12、或日小于1,则日期不合理

        //如果是闰年

        //当天数大于当月所对应的最大天数,则不合理

    int  jieShouData(int y,int m,int d)

    {

       if (y<2006 || m<1 || m>12 || d<1)

            

           return1;

           if (runYear(y))

           return d > runYearM[m-1];

       else

           return d > pingYearM[m-1];

    }

      这题其实有点复杂但是理清楚思路其实还是可以做错来的,今天实在太晚了我就不多说了。还是抓经休息吧,明天又要早早起床学习了,大家晚安。

                                                                  -----------android培训java培训、java学习型技术博客、期待与您交流!------------   


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值