C语言实现日期转换问题(要求考虑闰年的问题)
按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题): /* 函数功能: 对给定的某年某月某日,计算它是这一年的第几天 函数参数: 整型变量year、month、day,分别代表年、月、日 函数返回值:这一年的第几天 */ int DayofYear(int year, int month, int day); /* 函数功能: 对给定的某一年的第几天,计算它是这一年的第几月第几日 函数入口参数:整型变量year,存储年 整型变量yearDay,存储这一年的第几天 函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量 整型指针pDay,指向存储第几日的整型变量 函数返回值: 无 */ void MonthDay(int year, int yearDay, int *pMonth, int *pDay); 输出如下菜单,用switch语句实现根据用户输入的选择执行相应的操作。 1. year/month/day -> yearDay 2. yearDay -> year/month/day 3. Exit Please enter your choice: 输入提示信息: "Please enter year, month, day:" "Please enter year, yearDay:" 输入格式: "%d,%d,%d" "%d,%d" 输出提示信息和格式: "yearDay = %d\n" "month = %d, day = %d\n"

1 #include <stdio.h> 2 #include <stdlib.h> 3 int DayofYear(int year, int month, int day); 4 void MonthDay(int year, int yearDay, int *pMonth, int *pDay); 5 void Menu(void); 6 int dayTab[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; 7 int main() 8 { 9 int year, month, day, yearDay; 10 char c; 11 Menu(); /* 调用Menu函数显示一个固定式菜单 */ 12 c = getchar(); /* 输入选择 */ 13 switch (c) /* 判断选择的是何种操作 */ 14 { 15 case '1': 16 printf("Please enter year, month, day:"); 17 scanf("%d,%d,%d", &year, &month, &day); 18 yearDay = DayofYear(year, month, day); 19 printf("yearDay = %d\n", yearDay); 20 break; 21 case '2': 22 printf("Please enter year, yearDay:"); 23 scanf("%d,%d", &year, &yearDay); 24 MonthDay(year, yearDay, &month, &day); 25 printf("month = %d,day = %d\n", month, day); 26 break; 27 case '3': 28 exit(0); /* 退出程序的运行 */ 29 default: 30 printf("Input error!"); 31 } 32 return 0; 33 } 34 /* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */ 35 int DayofYear(int year, int month, int day) 36 { 37 int i, leap; 38 /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算; 39 否则leap值为0,用第0行dayTab[0][i]计算 */ 40 leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); 41 for (i = 1; i < month; i++) 42 { 43 day = day + dayTab[leap][i]; 44 } 45 return day; /* 返回计算出的day的值 */ 46 } 47 /* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */ 48 void MonthDay(int year, int yearDay, int *pMonth, int *pDay) 49 { 50 int i, leap; 51 leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); 52 for (i = 1; yearDay > dayTab[leap][i]; i++) 53 { 54 yearDay = yearDay - dayTab[leap][i]; 55 } 56 *pMonth = i; /* 将计算出的月份值赋值给pMonth所指向的变量 */ 57 *pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量 */ 58 } 59 /* 函数功能:显示菜单 */ 60 void Menu(void) 61 { 62 printf("1. year/month/day -> yearDay\n"); 63 printf("2. yearDay -> year/month/day\n"); 64 printf("3. Exit\n"); 65 printf("Please enter your choice:"); 66 }

1 #include<stdio.h> 2 int DayofYear(int year, int month, int day); 3 void MonthDay(int year, int yearDay, int *pMonth, int *pDay); 4 main() 5 { 6 int n,year, yearDay, month, day,Month, Day; 7 do 8 { 9 printf("1. year/month/day -> yearDay\n"); 10 printf("2. yearDay -> year/month/day\n"); 11 printf("3. Exit\n"); 12 printf("Please enter your choice:"); 13 scanf("%d", &n); 14 switch (n) 15 { 16 case 1: 17 { 18 yearDay = DayofYear(year, month, day); 19 printf("yearDay = %d\n", yearDay); 20 break; 21 } 22 case 2: 23 { 24 MonthDay(year, yearDay, &Month, &Day); 25 break; 26 } 27 } 28 }while(n!=3); 29 } 30 int DayofYear(int year, int month, int day) 31 { 32 int yearDay = 0, i; 33 int days[12]; 34 printf("Please enter year, month, day:"); 35 scanf("%d,%d,%d", &year, &month, &day); 36 if ((year % 4 == 0&&year%100!=0)||(year%100==0&&year%400==0)) 37 { 38 days[0]=31; 39 days[1]=29; 40 days[2]=31; 41 days[3]=30; 42 days[4]=31; 43 days[5]=30; 44 days[6]=31; 45 days[7]=31; 46 days[8]=30; 47 days[9]=31; 48 days[10]=30; 49 days[11]=31; 50 } 51 else 52 { 53 days[0]=31; 54 days[1]=28; 55 days[2]=31; 56 days[3]=30; 57 days[4]=31; 58 days[5]=30; 59 days[6]=31; 60 days[7]=31; 61 days[8]=30; 62 days[9]=31; 63 days[10]=30; 64 days[11]=31; 65 } 66 for (i = 0; i < month - 1; i++) 67 { 68 yearDay += days[i]; 69 } 70 yearDay += day; 71 return yearDay; 72 } 73 void MonthDay(int year, int yearDay, int *pMonth, int *pDay) 74 { 75 int month = 0, day; 76 int days[12]; 77 printf("Please enter year, yearDay:"); 78 scanf("%d,%d", &year, &yearDay); 79 if ((year % 4 == 0&&year%100!=0)||(year%100==0&&year%400==0)) 80 { 81 days[0]=31; 82 days[1]=29; 83 days[2]=31; 84 days[3]=30; 85 days[4]=31; 86 days[5]=30; 87 days[6]=31; 88 days[7]=31; 89 days[8]=30; 90 days[9]=31; 91 days[10]=30; 92 days[11]=31; 93 } 94 else 95 { 96 days[0]=31; 97 days[1]=28; 98 days[2]=31; 99 days[3]=30; 100 days[4]=31; 101 days[5]=30; 102 days[6]=31; 103 days[7]=31; 104 days[8]=30; 105 days[9]=31; 106 days[10]=30; 107 days[11]=31; 108 } 109 do 110 { 111 yearDay -= days[month]; 112 month++; 113 } 114 while (yearDay >= days[month]); 115 day = yearDay; 116 printf("month = %d, day = %d\n", month+1, day); 117 }
分类:
C语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具