8.写程序实现:输入日期,比较并输出所有日期中最早的日期(规定输入错误日期算输入结束) eg:2000/12/23 2000/1/12 1<12 则日期2更早(比较最小值应初始化为最大值!)
(1)第一种做法:定义很多变量
代码如下:
//1.定义很多变量
#include<stdio.h>
#include<limits.h> //定义整数类型极限的库函数
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<myear){
tag=true;
}
else if(year==myear&&month<mmonth){ //因为初始化的最大值,所以输入的值不是小于就是等于
tag=true;
}
else if(year==myear&&month==mmonth&&day<mday){
tag=true;
}
if(tag){
myear=year;
mmonth=month;
mday=day;
}
}
printf("MinYear/MinMonth/MinDay:%d/%d/%d\n",myear,mmonth,mday);
return 0;
}
ps:需要注意的地方已在代码区用注释标记,请大家仔细看代码并自己动手敲😊
代码实现如下:
(1)第二种做法:用结构体优化代码
代码如下:
//2.结构体优化
#include<stdio.h>
#include<limits.h>
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<min.year){
tag=true;
}
else if(n.year==min.year&&n.month<min.month){
tag=true;
}
else if(n.year==min.year&&n.month==min.month&&n.day<min.day){
tag=true;
}
if(tag){
min=n; //结构体可以整体赋值(前提:结构体类型相同!)
}
}
printf("\nMinyear/Minmonth/Minday=%d/%d/%d",min.year,min.month,min.day);
return 0;
}
ps:需要注意的地方仍然已在代码区用注释标记,请大家仔细看代码并自己动手敲😊
代码实现如下:
希望看到文章结尾没有让读者失望,会继续努力再接再厉的!!