NextDate函数问题
NextDate函数说明一种复杂的关系,即输入变量之间逻辑关系的复杂性
NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。 要求输入变量month、day和year均为整数值,并且满足下列条件:
条件1 1≤ month ≤12 否则输出,月份超出范围
条件2 1≤ day ≤31 否则输出,日期超出范围
条件3 1912≤ year ≤2050 否则输出:年份超出范围
String nextdate(int m,int d,int y)
注意返回值是字符串。
程序要求:
1)先显示“请输入日期”
2)不满足条件1,返回:“月份超出范围”;不满足条件2,返回:“日期超出范围”;不满足条件3,返回:“年份超出范围”;如果出现多个不满足,以最先出现不满足的错误返回信息。
3)条件均满足,则输出第二天的日期:格式“****年**月**日”(如果输入2050年12月31日,则正常显示2051年1月1日
Java版
1 package test01; 2 import java.util.Scanner; 3 public class Test01_nextdate { 4 public static void main(String[] args) { 5 // TODO Auto-generated method stub 6 int y=0 ,m=0,d=0; 7 System.out.println("请输入年 月 日(用空格隔开),-1退出:"); 8 Scanner scan = new Scanner(System.in); 9 while(true){ 10 y=scan.nextInt(); 11 if(y == -1)System.exit(0);;//-1退出程序 12 m=scan.nextInt(); 13 d=scan.nextInt(); 14 System.out.println(nextDate(y,m,d)); 15 } 16 } 17 public static String nextDate(int y,int m,int d)//nextDate函数 18 { 19 String newDate = "";//用来接收日期 20 boolean flag = true;//作为错误的标识 21 boolean isR = ((y%4 == 0)&&(y%100 != 0))||(y %400 == 0);//作为是否为闰年的标识 22 switch(m) 23 { 24 case 1: 25 case 3: 26 case 5: 27 case 7: 28 case 8: 29 case 10: 30 case 12: 31 if(d<31)d++; 32 else if(d==31) 33 { 34 if(m!=12) 35 { 36 m++; 37 d=1; 38 } 39 else 40 { 41 y++; 42 m=1; 43 d=1; 44 } 45 } 46 else{ 47 newDate="日期超出范围"; 48 flag=false; 49 } 50 break; 51 52 case 4: 53 case 6: 54 case 9: 55 case 11: 56 if(d<30)d++; 57 else if(d==30) 58 { 59 m++; 60 d=1; 61 } 62 else{ 63 newDate="日期超出范围"; 64 flag=false; 65 } 66 break; 67 case 2: 68 if(isR) 69 { 70 if(d<29) d++; 71 else if(d==29) 72 { 73 m++; 74 d=1; 75 } 76 else{ 77 newDate="日期超出范围"; 78 flag=false; 79 } 80 } 81 else{ 82 if(d<28) d++; 83 else if(d==28) 84 { 85 m++; 86 d=1; 87 } 88 else{ 89 newDate="日期超出范围"; 90 flag=false; 91 } 92 } 93 break; 94 95 default://如果月份不在1~12之间 96 newDate="月份超出范围"; 97 flag=false; 98 break; 99 } 100 101 if(flag) 102 { 103 if(y<1912 || y>2050) 104 { 105 newDate="年份超出范围"; 106 flag=false; 107 } 108 } 109 if(flag) 110 { 111 newDate=y+"年"+m+"月"+d+"日"; 112 } 113 else{ 114 flag=true;//还原标识 115 } 116 return newDate; 117 } 118 }
C++版
1 # include <stdio.h> 2 # include <stdlib.h> 3 void nextdate(int y, int m, int d) 4 { 5 int flag = 1; //标识是否为错误 6 int r=((y%4==0)&&(y%100!=0))||(y%400==0);//标识是否为闰年 7 switch(m) 8 { 9 case 1: 10 case 3: 11 case 5: 12 case 7: 13 case 8: 14 case 10: 15 case 12: 16 if (d<31) d++; 17 else if(d==31) 18 { 19 if(m!=12){ 20 m++; 21 d=1; 22 } 23 else{ 24 y++; 25 m=1; 26 d=1; 27 } 28 } 29 else 30 { 31 flag=0; 32 printf("日期超出范围 "); 33 } 34 break; 35 36 case 4: 37 case 6: 38 case 9: 39 case 11: 40 if(d<30)d++; 41 else if(d==30) 42 { 43 m++; 44 d=1; 45 } 46 else 47 { 48 flag=0; 49 printf("日期超出范围 "); 50 51 } 52 break; 53 54 case 2: 55 if(r==1) { 56 if(d<29)d++; 57 else if(d==29) 58 { 59 m++; 60 d=1; 61 } 62 else 63 { 64 flag=0; 65 printf("日期超出范围 "); 66 } 67 68 } 69 else{ 70 if(d<28)d++; 71 else if(d==28) 72 { 73 m++; 74 d=1; 75 } 76 else 77 { 78 flag=0; 79 printf("日期超出范围 "); 80 } 81 } 82 break; 83 default: 84 flag=0; 85 printf("月份超出范围 "); 86 break; 87 88 } 89 // if(m<1 || m>12) 90 // { 91 // flag=0; 92 // printf("月份超出范围"); 93 // } 94 if(y<1912 || y>2050){ 95 flag=0; 96 printf("年份超范围 "); 97 } 98 if(flag!=0)//如果没有错误输出nextdate 99 { 100 printf("%d,%d,%d ",y,m,d); 101 } 102 flag=1;//返回初始值 103 } 104 int main() 105 { 106 int y=0,m=0,d=0; 107 printf("请输入年,月,日:(用逗号隔开,输入-1退出): "); 108 while(scanf("%d,%d,%d",&y,&m,&d)!=EOF&& y!=-1) 109 { 110 nextdate(y,m,d); 111 printf("请继续输入(用逗号隔开,输入-1退出): "); 112 } 113 system("pause"); 114 return 0; 115 }