• 清览题库--C语言程序设计第五版编程题解析(2)


    前言

    🍀作者简介:在校学生,为全栈方向努力拼搏的一名小学生。

    🍁个人主页:吉师职业混子的博客_CSDN博客-python学习,HTML学习领域博主

    🫒题目来源:清览题库

    🍂相应专栏:https://blog.csdn.net/m0_55400802/category_12003021.html?spm=1001.2014.3001.5482

    实在是没办法,本来打算向web方向努力,结果被学校通知所有专业都必须学习C语言,,

    谁又想做一名吃力不讨好的全栈呢。

    一、如何通过C语言判断闰年/非闰年(入门)

    想要通过程序来判断是某个年份是/不是闰年,首先我们要明白闰年的判断方式

     通过查询可知,闰年的判断方式有两种:

    1、可以被4整除

    2、可以被400整除但是不可以被100整除

    由此,可以通过使用if语句来实现代码

    1. #include
    2. int main() {
    3. int y;//定义变量y
    4. scanf_s("%d", &y);//等待从键盘上读取
    5. if (y % 400 == 0 || y % 100 != 0 && y % 4 == 0)

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

     注意看这段if语句,通过“&&”符(或者)将整个条件分成了两个部分

    第一部分是:

    y % 400 == 0 || y % 100 != 0

     即为“可以被400整除但是不可以被100整除”。“||”符意为“并且”,本段代码意思是y除以400没有余数即为整除,并且,y除以100有余数。

    第二部分是:

     y % 4 == 0

     除以4没有余数。

    完整代码如下:

    1. #include
    2. int main() {
    3. int y;
    4. scanf_s("%d", &y);
    5. if (y % 400 == 0 || y % 100 != 0 && y % 4 == 0)
    6. printf("闰年");
    7. else
    8. printf("非闰年");
    9. return 0;
    10. }

    二、三天打鱼两天晒网(困难)

    题目

    中国有句俗语叫“三天打鱼两天晒网”。某人从2000年1月1日起开始“三天打鱼两天晒网”,编写程序判断这个人在以后的某一天中是“打鱼”还是“晒网”。

    输入用例:

    2001/3/1

    输出用例:

    fishing

    分析

    本题之所以困难,是因为涉及到了闰年、2月份天数等需要额外排除的情况。先将整段代码放出来,我们将其拆分,逐段分析。

    整段代码:

    1. #include
    2. int main()
    3. {
    4. int y, m, d, days = 0;
    5. scanf("%d/%d/%d", &y, &m, &d);
    6. days = 365 * (y - 2000); /* 计算整年的天数 */
    7. for (int i = 2000; i < y; i++) /* 修正闰年的366天 */
    8. if ((i % 400 == 0) || ((i % 100 != 0) && (i % 4 == 0)))
    9. days++;
    10. for (int i = 1; i < m; i++) /* 计算整月的天数 */
    11. {
    12. switch (i)
    13. {
    14. case 1:
    15. case 3:
    16. case 5:
    17. case 7:
    18. case 8:
    19. case 10:
    20. case 12:
    21. days = days + 31; break;
    22. case 4:
    23. case 6:
    24. case 9:
    25. case 11:
    26. days = days + 30; break;
    27. case 2:
    28. days = days + 28;
    29. if ((y % 400 == 0) || ((y % 100 != 0) && (y % 4 == 0)))
    30. days++;
    31. break;
    32. }
    33. }
    34. days = days + d; /* 计算当月已经过去的天数 */
    35. if (days % 5 == 1 || days % 5 == 2 || days % 5 == 3)
    36. printf("fishing\n");
    37. else
    38. printf("sleeping\n");
    39. return(0);
    40. }

    第一段:

    int y, m, d, days = 0;
        scanf("%d/%d/%d", &y, &m, &d);
        days = 365 * (y - 2000);        

    定义y,m,d三个变量分别代表年月日,并等待从键盘读取。

    因为题目要求是在2000年及2000年之后,所以出现了(y-2000)*365并存储在days变量中

     第二段:

    for (int i = 2000; i < y; i++)        /* 修正闰年的366天 */
            if ((i % 400 == 0) || ((i % 100 != 0) && (i % 4 == 0)))
                days++;

     该段代码中的if语句,即为题目一所分析,不再过多赘述。

    days++意为如果是闰年,则加一天。

    第三段:

    for (int i = 1; i < m; i++)           /* 计算整月的天数 */
        {
            switch (i)
            {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                days = days + 31; break;
            case 4:
            case 6:
            case 9:
            case 11:
                days = days + 30; break;
            case 2:
                days = days + 28;

     此处代码是对月份天数进行规定,30天/31天/28天/29天

    第四段:

    if ((y % 400 == 0) || ((y % 100 != 0) && (y % 4 == 0)))
                    days++;
                break;
            }
        }
        days = days + d; /* 计算当月已经过去的天数 */
        if (days % 5 == 1 || days % 5 == 2 || days % 5 == 3)
            printf("fishing\n");
        else
            printf("sleeping\n");
        return(0);
    }

     按题目要求进行输出,不过多赘述。

  • 相关阅读:
    BOM Broser Object Model(浏览器对象模型)提供了独立了独立于内容与浏览器窗口进行交互的对象。
    淘宝等电商平台API接口评论,item_review-获得商品评论
    Docker数据管理
    【LLM之KG】CoK论文阅读笔记
    (十一)Jmeter调用webService接口
    世界杯winner只属于你——MESSI
    详谈负载均衡(微服务架构下的高可用挑战)
    Pads Logic 、AD转Orcad
    写不完的数学试卷-----试卷生成器(Qt含源码)
    python 引用、浅拷贝、深拷贝
  • 原文地址:https://blog.csdn.net/m0_55400802/article/details/126763050