8.写程序实现:输入日期,比较并输出所有日期中最早的日期(规定输入错误日期算输入结束) eg:2000/12/23 2000/1/12 1<12 则日期2更早(比较最小值应初始化为最大值!)
(1)第一种做法:定义很多变量
代码如下:
//1.定义很多变量 #include#include //定义整数类型极限的库函数 bool IsLeapYear(int year){ //判断是否为闰年 if(year%400==0||(year%4==0&&year%100!=0)){ return true; } else return false; } int Get_YM_Day(int year,int month){ //数组查表法实现函数功能:查询该年该月有多少天 int arr[13]={29,31,28,31,30,31,30,31,31,30,31,30,31}; int i=0; if(month==2&&IsLeapYear(year)){ return arr[i]; } else return arr[month]; } int main(){ int year=0,month=0,day=0; int myear=INT_MAX,mmonth=12,mday=31; //求最小值则初始化为最大值,此处用库函数为年份初始化为最大值 for(;;){ bool tag=false; //避免交换值部分代码重复,切记一定要定义在for循环内!否则一旦被赋值为true,则永远是true,意味着每次都会交换 printf("Please input year/month/day:(yyyy/mmmm/dd)n"); scanf("%d/%d/%d",&year,&month,&day); if(year<1||month<1||month>12||day<1){ break; } if(day>Get_YM_Day(year,month)){ break; } if(year ps:需要注意的地方已在代码区用注释标记,请大家仔细看代码并自己动手敲
代码实现如下:
(1)第二种做法:用结构体优化代码
代码如下:
//2.结构体优化 #include#include bool IsLeapYear(int year){ if(year%400==0||(year%4==0&&year%100!=0)){ return true; } else return false; } int Get_YM_Day(int year,int month){ int arr[13]={29,31,28,31,30,31,30,31,31,30,31,30,31}; int i=0; if(month==2&&IsLeapYear(year)){ return arr[i]; } else return arr[month]; } struct Date{ int year; int month; int day; }; int main(){ struct Date n={0,0,0}; //赋初值(初始化) struct Date min={INT_MAX,12,31}; //赋初值(初始化) for(;;){ bool tag=false; printf("Please input year/month/day:(yyyy/mmmm/dd)n"); scanf("%d/%d/%d",&n.year,&n.month,&n.day); if(n.year<1||n.month<1||n.month>12||n.day<1){ printf("Input error!n"); break; } else if(n.day>Get_YM_Day(n.year,n.month)){ printf("Input error!n"); break; } if(n.year ps:需要注意的地方仍然已在代码区用注释标记,请大家仔细看代码并自己动手敲
代码实现如下:
希望看到文章结尾没有让读者失望,会继续努力再接再厉的!!



