C语言:使用switch实现,要求输入一个日期,输出该日期是对应今年的第几天

         这个题目需要了解switch函数的特性,在定位到对应的case语句执行完对应的case语句内容之后,因为去除了break语句,无法跳出switch选择,自动往下顺序执行,实现自动累加的目的。

#include <stdio.h>

int main()
{
    //定义变量,给初始天数和赋值为0
    int y,m,d,sumDays = 0;
    printf("请输入日期:");
    //输入年,月,日
    scanf("%d%d%d",&y,&m,&d);
    switch(m)
    {
    case(12):
        {
            //天数和为当月日期加上前个月份的天数,从一月累加至目标月份
            sumDays += 30;
        }
    case(11):
        {
            sumDays += 31;
        }
    case(10):
        {
            sumDays += 30;
        }
    case(9):
        {
            sumDays += 31;
        }
    case(8):
        {
            sumDays += 31;
        }
    case(7):
        {
            sumDays += 30;
        }
    case(6):
        {
            sumDays += 31;
        }
    case(5):
        {
            sumDays += 30;
        }
    case(4):
        {
            sumDays += 31;
        }
    //闰年放在3月判断,是因为在3月才需要加上2月份的全部天数。
    case(3):
        {
            if((y%4==0&&y%100!=0)||(y%400==0))
            {
                sumDays += 29;
            }
            else
            {
                sumDays += 28;
            }
        }
    case(2):
        {
            sumDays += 31;
        }
    case(1):
        {
            sumDays += d;
        }
    }

    printf("今天是%d年第%d天\n",y,sumDays);


    return 0;
}

C语言中,要实现一个不依赖于`<time.h>`库的日期星期计算功能,我们可以使用一些基础的数学运算和数组来存储每个星期对应的天数。这里是一个简单的示例: ```c #include <stdio.h> // 定义一个包含7个整数的数组,表示从星期一到星期日 int days[] = {0, 3, 2, -1, -2, 1, 4}; // 输入函数,获取用户输入的年月日 void input_date(int *day, int *month, int *year) { printf("请输入日期(格式:YYYY-MM-DD): "); scanf("%d-%d-%d", year, month, day); } // 计算星期几 int calculate_weekday(int day, int month, int year) { // 考虑闰年和平年的不同天数 if (is_leap_year(year)) { if (month >= 3) { day += (month + 9) / 12; } } else { if (month > 2) { day += (month + 9) / 12; } } day += year * 365; // 年份天数加上平年每一天 if (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) { // 非世纪年为闰年,或世纪年是闰年 day++; } return day % 7 + 1; // 返回0~6之间表示星期一到星期日的数字 } // 判断是否为闰年 int is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } int main() { int day, month, year; input_date(&day, &month, &year); int weekday = calculate_weekday(day, month, year); switch (weekday) { case 1: printf("今天是星期一\n"); break; case 2: printf("今天是星期二\n"); break; case 3: printf("今天是星期三\n"); break; case 4: printf("今天是星期四\n"); break; case 5: printf("今天是星期五\n"); break; case 6: printf("今天是星期六\n"); break; case 7: printf("今天是星期日\n"); break; default: printf("输入错误或未处理的情况\n"); } return 0; } ``` 在这个程序中,我们首先通过`input_date`函数获取用户的输入,然后使用`calculate_weekday`函数根据给定的日期计算出星期几。这个函数考虑了闰年的额外一天,并将结果转换成星期一至星期日的表示。 注意,虽然这个方法相对简单,但它仅适用于基本的日期判断,并且假设用户输入的是有效日期。实际应用中,可能需要更复杂的错误检查和验证。另外,此代码没有处理月份小于1或大于12的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值