用C语言,输入一个月份,输出这个月份的天数,不包括闰月
时间: 2023-05-17 11:03:35 浏览: 71
可以使用 switch 语句来实现:
```c
#include <stdio.h>
int main() {
int month;
printf("请输入一个月份:");
scanf("%d", &month);
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("%d月有31天\n", month);
break;
case 4:
case 6:
case 9:
case 11:
printf("%d月有30天\n", month);
break;
case 2:
printf("%d月有28天\n", month);
break;
default:
printf("输入的月份不合法\n");
break;
}
return 0;
}
```
输入一个月份,程序会输出这个月份的天数,不包括闰月。
相关问题
c语言输入两个日期输出天数 包含闰年闰月
以下是一个可以输入两个日期并输出它们之间的天数的C语言程序,考虑闰年和闰月的情况:
```
#include <stdio.h>
int main()
{
int year1, month1, day1;
int year2, month2, day2;
int days1, days2, days;
printf("请输入第一个日期(年 月 日):");
scanf("%d %d %d", &year1, &month1, &day1);
printf("请输入第二个日期(年 月 日):");
scanf("%d %d %d", &year2, &month2, &day2);
// 计算第一个日期距离公元元年的天数
days1 = (year1 - 1) * 365 + (year1 - 1) / 4 - (year1 - 1) / 100 + (year1 - 1) / 400; // 公元元年是闰年,所以要减去1
for (int i = 1; i < month1; i++)
{
switch (i)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days1 += 31;
break;
case 4: case 6: case 9: case 11:
days1 += 30;
break;
case 2:
if (year1 % 4 == 0 && year1 % 100 != 0 || year1 % 400 == 0) // 闰年
days1 += 29;
else
days1 += 28;
break;
}
}
days1 += day1;
// 计算第二个日期距离公元元年的天数
days2 = (year2 - 1) * 365 + (year2 - 1) / 4 - (year2 - 1) / 100 + (year2 - 1) / 400; // 公元元年是闰年,所以要减去1
for (int i = 1; i < month2; i++)
{
switch (i)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days2 += 31;
break;
case 4: case 6: case 9: case 11:
days2 += 30;
break;
case 2:
if (year2 % 4 == 0 && year2 % 100 != 0 || year2 % 400 == 0) // 闰年
days2 += 29;
else
days2 += 28;
break;
}
}
days2 += day2;
// 计算两个日期之间的天数
days = days2 - days1;
printf("两个日期之间相差 %d 天。\n", days);
return 0;
}
```
在程序中,我们先输入了两个日期,然后分别计算它们距离公元元年的天数,最后计算它们之间的天数。在计算距离公元元年的天数时,我们需要考虑闰年和闰月的情况。具体来说:
- 一个年份是闰年的条件是:它可以被4整除但不能被100整除,或者它可以被400整除。
- 一个月是否是闰月需要根据所在年份来判断,因此在按月计算天数时需要先判断所在年份是否是闰年,如果是,则2月有29天,否则有28天。
需要注意的是,这个程序并没有对输入的日期进行有效性检查,如果输入的日期不合法(比如2月30日),则程序的行为是未定义的。
你可以写一个输入阴历生日输出阳历生日的程序吗要求用c语言
当然可以写一个输入阴历生日输出阳历生日的程序,以下是一个简单的C语言实现:
```
#include <stdio.h>
int lunar_month_days[13] = {0, 29, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29};
int solar_month_days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int lunar_to_solar(int lunar_year, int lunar_month, int lunar_day) {
int i, leap_month, offset, solar_year, solar_month, solar_day;
// 先计算阴历日期到公历格林威治时间的偏移天数
offset = 0;
for (i = 1; i < lunar_year; i++) {
offset += 365;
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
offset += 1;
}
}
leap_month = ((lunar_year % 4 == 0 && lunar_year % 100 != 0) || lunar_year % 400 == 0) ? 8 : 0;
for (i = 1; i < lunar_month; i++) {
offset += lunar_month_days[i];
if (i == leap_month) {
offset += 1;
}
}
offset += lunar_day - 1;
// 再计算出对应的公历日期
solar_year = 1900;
while (offset >= (365 + ((solar_year % 4 == 0 && solar_year % 100 != 0) || solar_year % 400 == 0))) {
offset -= (365 + ((solar_year % 4 == 0 && solar_year % 100 != 0) || solar_year % 400 == 0));
solar_year++;
}
leap_month = ((solar_year % 4 == 0 && solar_year % 100 != 0) || solar_year % 400 == 0) ? 1 : 2;
solar_month = 1;
while (offset >= solar_month_days[solar_month] + ((solar_month == leap_month) ? 1 : 0)) {
offset -= solar_month_days[solar_month] + ((solar_month == leap_month) ? 1 : 0);
solar_month++;
}
solar_day = offset + 1;
return (solar_year * 10000 + solar_month * 100 + solar_day);
}
int main() {
int lunar_year, lunar_month, lunar_day, solar_date;
printf("请输入阴历生日(以年月日顺序输入, 如1988 2 7): ");
scanf("%d %d %d", &lunar_year, &lunar_month, &lunar_day);
solar_date = lunar_to_solar(lunar_year, lunar_month, lunar_day);
printf("阳历生日为: %d\n", solar_date);
return 0;
}
```
该程序的原理是通过累加公历格林威治时间与阴历日期之间的天数来计算出对应的公历日期。程序中使用到了两个数组`lunar_month_days`和`solar_month_days`,分别存储阴历和阳历每个月对应的天数。程序还要考虑到闰月的情况,以及闰年的特殊情况。