用c语言编写某天距元旦的天数
时间: 2023-10-22 22:04:53 浏览: 154
可以使用C语言中的time.h头文件中的函数来实现:
```c
#include <stdio.h>
#include <time.h>
int main() {
time_t now;
struct tm new_year;
double seconds;
// 获取当前时间
time(&now);
// 设置元旦日期
new_year = *localtime(&now);
new_year.tm_mon = 0;
new_year.tm_mday = 1;
new_year.tm_hour = 0;
new_year.tm_min = 0;
new_year.tm_sec = 0;
// 计算与元旦相差的秒数
seconds = difftime(mktime(&new_year), now);
// 将秒数转换为天数并输出
printf("距离元旦还有 %.0f 天\n", seconds / 86400);
return 0;
}
```
该程序首先获取当前时间,然后设置元旦的日期,计算当前时间与元旦相差的秒数,最后将秒数转换为天数并输出。注意,86400是一天中的秒数。
相关问题
请你尝试用C语言编写一个程序: 输入三个整数表示年、月、日,计算从该年的元旦算起到当日是第几天。 如输入 2019-1-1,输出1 【输入输出样例】 输入1: 2019-01-01 输出1: 1 输入2: 2019-3-6 输出2: 65 注意,要考虑闰年2月29天。
```c
#include <stdio.h>
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int main() {
int year, month, day;
int daysOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
int i, sum = 0;
scanf("%d-%d-%d", &year, &month, &day);
for (i = 1; i < month; i++) {
sum += daysOfMonth[i];
}
sum += day;
if (isLeapYear(year) && month > 2) { // 是闰年且月份大于2月
sum++;
}
printf("%d\n", sum);
return 0;
}
```
用c语言编写: (1) 输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。 (2) 输入年月,输出该月的日历。 (3) 输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
好的,我会尽力回答你的问题。
首先,让我们来看看第一个问题:如何在 C 语言中编写一个程序,输入一个年份,然后输出该年的日历。以下是一个简单的示例程序,可以帮助你入门:
```c
#include <stdio.h>
// 判断是否为闰年
int is_leap_year(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
// 计算某个月有多少天
int days_in_month(int year, int month) {
int days[12] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
// 输出日历
void print_calendar(int year) {
int first_day = 1; // 假设该年的第一天是星期一
for (int month = 1; month <= 12; month++) {
printf("%d 年 %d 月\n", year, month);
printf("一 二 三 四 五 六 日\n");
for (int i = 1; i < first_day; i++) {
printf(" ");
}
for (int day = 1; day <= days_in_month(year, month); day++) {
printf("%3d", day);
if ((first_day + day - 1) % 7 == 0) {
printf("\n");
}
}
printf("\n");
first_day = (first_day + days_in_month(year, month)) % 7 + 1;
}
}
int main() {
int year;
printf("请输入年份(1940-2040):");
scanf("%d", &year);
if (year < 1940 || year > 2040) {
printf("输入的年份不合法!\n");
return 1;
}
print_calendar(year);
return 0;
}
```
这个程序的实现思路是:
1. 定义一个 `is_leap_year` 函数,用于判断一个年份是否为闰年。闰年的定义是:能够被 4 整除但不能被 100 整除的年份,或者能够被 400 整除的年份。
2. 定义一个 `days_in_month` 函数,用于计算某个月有多少天。根据公历的规定,每个月的天数不同,二月份的天数还要根据是否为闰年来判断。
3. 定义一个 `print_calendar` 函数,用于输出一个年份的日历。该函数通过调用 `days_in_month` 函数来获取每个月的天数,然后根据每个月的第一天是星期几来输出日历。
4. 在 `main` 函数中,首先获取用户输入的年份,并进行合法性检查。然后调用 `print_calendar` 函数,输出该年的日历。
接下来,让我们来看看第二个问题:如何在 C 语言中编写一个程序,输入年月,然后输出该月的日历。这个问题比第一个问题要简单一些,只需要稍微修改一下上面的程序即可。
```c
#include <stdio.h>
// 判断是否为闰年
int is_leap_year(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
// 计算某个月有多少天
int days_in_month(int year, int month) {
int days[12] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
// 输出日历
void print_calendar(int year, int month) {
printf("%d 年 %d 月\n", year, month);
printf("一 二 三 四 五 六 日\n");
int first_day = 1; // 假设该年的第一天是星期一
for (int i = 1; i < first_day; i++) {
printf(" ");
}
for (int day = 1; day <= days_in_month(year, month); day++) {
printf("%3d", day);
if ((first_day + day - 1) % 7 == 0) {
printf("\n");
}
}
printf("\n");
}
int main() {
int year, month;
printf("请输入年份(1940-2040):");
scanf("%d", &year);
if (year < 1940 || year > 2040) {
printf("输入的年份不合法!\n");
return 1;
}
printf("请输入月份(1-12):");
scanf("%d", &month);
if (month < 1 || month > 12) {
printf("输入的月份不合法!\n");
return 1;
}
print_calendar(year, month);
return 0;
}
```
这个程序的改动比较简单,只需要去掉 `print_calendar` 函数中的循环,然后在 `main` 函数中获取用户输入的年份和月份,调用 `print_calendar` 函数输出该月的日历即可。
最后,让我们来看看第三个问题:如何在 C 语言中编写一个程序,输入年月日,然后输出距今天还有多少天,星期几,是否是公历节日。这个问题稍微有些复杂,需要用到一些库函数和数据表来实现。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// 判断是否为闰年
int is_leap_year(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
// 计算某个月有多少天
int days_in_month(int year, int month) {
int days[12] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
// 计算某个日期是星期几
int day_of_week(int year, int month, int day) {
struct tm date = {0};
date.tm_year = year - 1900;
date.tm_mon = month - 1;
date.tm_mday = day;
mktime(&date);
return date.tm_wday;
}
// 判断某个日期是否为公历节日
int is_holiday(int month, int day) {
const char *holidays[] = {
"元旦", "情人节", "妇女节", "植树节", "愚人节", "劳动节", "青年节", "儿童节",
"建党节", "建军节", "教师节", "国庆节", "万圣节", "光棍节", "双十一", "感恩节", "圣诞节"
};
const int holiday_dates[] = {
101, 214, 38, 312, 401, 501, 504, 601, 701, 801, 910, 1001, 1031, 1111, 1111, 1122, 1225
};
int num_holidays = sizeof(holidays) / sizeof(holidays[0]);
for (int i = 0; i < num_holidays; i++) {
if (month * 100 + day == holiday_dates[i]) {
printf("是公历节日:%s\n", holidays[i]);
return 1;
}
}
return 0;
}
int main() {
int year, month, day;
printf("请输入日期(格式为YYYY-MM-DD):");
char date_str[11];
scanf("%s", date_str);
if (strlen(date_str) != 10 || date_str[4] != '-' || date_str[7] != '-') {
printf("输入的日期格式不正确!\n");
return 1;
}
year = atoi(date_str);
month = atoi(date_str + 5);
day = atoi(date_str + 8);
if (year < 1940 || year > 2040 || month < 1 || month > 12 || day < 1 || day > days_in_month(year, month)) {
printf("输入的日期不合法!\n");
return 1;
}
time_t now = time(NULL);
struct tm *local = localtime(&now);
int year_now = local->tm_year + 1900;
int month_now = local->tm_mon + 1;
int day_now = local->tm_mday;
int days = 0;
if (year < year_now || (year == year_now && (month < month_now || (month == month_now && day < day_now)))) {
printf("输入的日期已经过去了!\n");
} else {
while (year != year_now || month != month_now || day != day_now) {
day++;
days++;
if (day > days_in_month(year, month)) {
day = 1;
month++;
if (month > 12) {
month = 1;
year++;
}
}
}
printf("距今天还有 %d 天,星期 %d\n", days, day_of_week(year_now, month_now, day_now));
is_holiday(month, day);
}
return 0;
}
```
这个程序的实现思路是:
1. 定义一个 `is_leap_year` 函数和一个 `days_in_month` 函数,分别用于判断一个年份是否为闰年和计算某个月有多少天。这两个函数的实现与前面的程序相同,不再赘述。
2. 定义一个 `day_of_week` 函数,用于计算某个日期是星期几。该函数使用了 C 语言标准库中的 `mktime` 函数,将日期转换为秒数,然后再将秒数转换为 `struct tm` 结构体,最后获取 `tm_wday` 字段即可得到星期几。
3. 定义一个 `is_holiday` 函数,用于判断某个日期是否为公历节日。该函数使用了一个字符串数组和一个整型数组,分别表示公历节日的名称和日期。在循环中遍历这两个数组,如果找到了与输入日期相同的节日日期,则输出节日名称。
4. 在 `main` 函数中,首先获取用户输入的日期,并进行合法性检查。然后获取当前日期,并计算距今天还有多少天,以及该日期是星期几。如果输入的日期已经过去了,则输出提示信息;否则,循环计算日期直到与当前日期相同,期间调用 `is_holiday` 函数来判断是否为公历节日。
以上就是我给出的 C 语言示例程序,希望能够对你有所帮助。如果你还有其他问题,可以继续提问。
阅读全文