20201104-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises07

本文提供了一系列C语言编程练习,包括计算特定年份月份的天数、转换百分制成绩为等级、计算企业产值翻番等,涉及条件判断、循环及数据处理技巧。

20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises07

P702

在这里插入图片描述

/*
    自行扩展
    输入任意年【1-3000年】月【1-12月】,给出该月的天数

    分析:
        1. 2003年不是闫年,额外知识点:
            return (year % (year % 100 ? 4 : 400) ? 0 : 1);
        2. 一,三,五,七,八,十,十二月,各31天
            二为28天,如果是闫年,则29天
            四,六,九,十一朋,为各30天
        3. 输入N,直接判断匹配对应的天数即可
        4. 本题可以扩展为输入任意某年某月,输出该月的天数
*/

#include <stdio.h>

int main(void)
{
    int year;
    int month;

    printf("please input the year,month number: ");
    scanf("%d,%d",&year, &month);

    if (( year >1 && year< 3000) && (month>0 && month < 13))
    {
        // 先判断是否闫年
        if((year % (year % 100 ? 4 : 400) ? 0 : 1))
        {
            // 从技术上讲,可以首先约束到有效月数字上来
            if(month == 2 )
            {
                printf("\n%d.%d has 29 days", year, month);
            }
            else if(month == 4 || month==6||month==9||month==11)
            {
                printf("\n%d.%d has 30 days", year, month);
            }
            else
            {
                printf("\n%d.%d has 31 days", year, month);
            }
        }
        else
        {
            // 从技术上讲,可以首先约束到有效月数字上来
            if(month == 2 )
            {
                printf("\n%d.%d has 28 days", year, month);
            }
            else if(month == 4 || month==6||month==9||month==11)
            {
                printf("\n%d.%d has 30 days", year, month);
            }
            else
            {
                printf("\n%d.%d has 31 days", year, month);
            }
        }

    }
    else
    {
        printf("\nInvalid year or month input !");
    }

    return 0;
}

另一种解法

/*
    自行扩展
    输入任意年【1-3000年】月【1-12月】,给出该月的天数
    再重构一下程序,相同的部分,可以只用一次

    分析:
        1. 2003年不是闫年,额外知识点:
            return (year % (year % 100 ? 4 : 400) ? 0 : 1);
        2. 一,三,五,七,八,十,十二月,各31天
            二为28天,如果是闫年,则29天
            四,六,九,十一朋,为各30天
        3. 输入N,直接判断匹配对应的天数即可
        4. 本题可以扩展为输入任意某年某月,输出该月的天数
    学习方法:
        1. 通过思考,不断重构自己的代码,让程序更简洁
        2. 让重复的代码被重构
*/

#include <stdio.h>

int main(void)
{
   
   
    int year;
    int month;

    printf("please input the year,month number: ");
    scanf("%d,%d", &year, &month);

    if ((year > 1 && year < 3000) && (month > 0 && month < 13))
    {
   
   
        // 其他月份,正常输出
        if (month == 4 || month == 6 || month == 9 || month == 11)
        {
   
   
            printf("\n%d.%d has 30 days", year, month);
        }
        else if (month == 2) // 只有2月,才去判断是否闫年
        {
   
   
            if ((year % (year % 100 ? 4 : 400) ? 0 : 1))
            {
   
   
                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值