#include<stdio.h>main(){int x, y, a, b, c;printf("请你输入任意一年的年份(年):\t");scanf("%d",&x);printf("请输入任意一个月份数(月):\t");scanf("%d",&y);
a = x %4, b = x %100, c = x %400;switch(y){case1:case3:case5:case7:case8:case10:case12:printf("%d年%d月的天数为(天):\t31天\n", x, y);break;case4:case6:case9:case11:printf("%d年%d月的天数为(天):\t30天\n", x, y);break;default:if(a ==0){if(b !=0)printf("%d年%d月的天数为(天):\t29天\n", x, y);elseif(b ==0&& c ==0)printf("%d年%d月的天数为(天):\t29天\n", x, y);}elseprintf("%d年%d月的天数为(天):\t28天\n", x, y);};}//优化后:#include<stdio.h>intf(x, y){if(y ==1|| y ==3|| y ==5|| y ==7|| y ==8|| y ==10|| y ==12)return(31);elseif(y ==2){if(x %4==0&& x%100!=100)return(29);if(x %100==0&& x %400==400)return(29);elsereturn(28);}elsereturn(30);}//定义函数体main(){int x, y;printf("请你输入任意一个日期(格式:年,月):\t");scanf("%d,%d",&x,&y);printf("%d年%d月有%d天\n", x, y,f(x, y));}//代码再次优化:#include<stdio.h>intNF(float x,float y);//函数声明(函数原型)intmain(){float x, y;//不定义整形是为了程序的健壮性考虑(消除安全隐患)printf("请输入要查询的年份和月份(空格间隔):");scanf("%f%f",&x,&y);if((int)(x)== x &&(int)(y)== y)//检验输入的日期是否合法{printf("%g年%g月有:%d天", x, y,NF(x, y));}elseprintf("你输入的日期至少有一个不合法!!!");}intNF(float a,float b)//定义函数(为了保证形参类型一致只能定义浮点型){int x, y;
x = a, y = b;//由于浮点数不能做求余运算所以进行数据类型转换if(y ==1|| y ==3|| y ==5|| y ==7|| y ==8|| y ==10|| y ==12)return31;elseif(y ==4|| y ==6|| y ==9|| y ==11)return30;elseif(y ==2){if((x %4==0&& x %100!=0)||(x %100==0&& x %400==0))//注:能被100整除必可被4整除return29;elsereturn28;}}