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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

昨天做基础题整理一下供大家参考,主要是思路问题,写的不好请大家多多指教
/*
    小明从2006年1月1日开始,每三天结识一个美女两天结识一
    个帅哥,编程实现当输入2006年1月1日之后的任意一天,输
    出小明那天是结识美女还是帅哥(注意润年问题)(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, const char * 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整除就结识美女
    //总天数如果不能被2和3整除,就不结识帅哥,也不结识美女
    if (allDays % 3 == 0)
        printf("我靠!小明今天结识了美女!\n");
    if (allDays % 2 == 0)
        printf("运气不错哦,小明今天结识帅哥!\n");
    if ((allDays % 2 != 0) && (allDays % 3 != 0))
        printf("不会吧?小明今天居然没有结识帅哥,也没有结识美女!\n");
    return 0;
}

    //定义函数计算输入日期距离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;
    }
    //计算输入月份与1月1日之间相差的天数
    //如果是闰年,就累加闰年所对应月份的天数
    //如果不是闰年,就累加非闰年所对应月份的天数
    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) )
        return 1;
    else
        return 0;
}

    //新建一个函数用来判断输入的日期是否合理,不合理返回1,合理返回0
    //如果年份小于2006、或月份小于1、或月份大于12、或日小于1,则日期不合理
    //如果是闰年
    //当天数大于当月所对应的最大天数,则不合理
int  jieShouData(int y, int m, int d)
{
    if (y<2006 || m<1 || m>12 || d<1)
        
        return 1;
        if (runYear(y))
        return d > runYearM[m-1];
    else
        return d > pingYearM[m-1];
}

评分

参与人数 1黑马币 +3 收起 理由
小北北 + 3

查看全部评分

7 个回复

倒序浏览
写的不错哦
回复 使用道具 举报

给上一个赞,棒棒哒
回复 使用道具 举报
看起来好吊,赞一个
回复 使用道具 举报
guobao717 来自手机 中级黑马 2015-11-8 00:22:02
报纸
PlatoTu 发表于 2015-11-6 23:48
看起来好吊,赞一个

呵呵好好学
回复 使用道具 举报
点招题这么屌
回复 使用道具 举报
这是测试的题目吗?同样在ios前期自学中,希望可以和楼主有进一步交流 !!
回复 使用道具 举报
66666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马