代码:
#include#include #include //将年、月、日三个变量设为全局变量 int year,month,day; //函数声明 void rand_date(); int calculate(); //主函数 int main() { srand((unsigned)time(NULL));//使每次生成的随机数都不一样 rand_date();//调用函数生成一个随机日期 printf("随机生成的日期为:%d年%d月%d日n",year,month,day); printf("与%d年的10月1日相差的天数为:%d天n",year,calculate());//调用函数输出最后计算得到的天数 return 0; } //随机生成一个日期 void rand_date() { srand((unsigned)time(NULL)); int status=0; year=1900+(rand()%1011);//生成一个1900-3000之间的随机数代表年份 month=1+(rand()%12);//生成一个1-12之间的数字代表月份 //每个月的天数会有略微差别,所以需要判断日和月是否匹配(尤其是二月份) do { day=1+(rand()%31);//生成一个1-31之间的数字代表日 switch(month) { //1、3、5、7、8、10、12这几个月每个月都是31天 case 1: case 3: case 5: case 7: case 8: case 10: case 12: status=1;//status=1表示生成的日期无误 break; //2月份分为28和29天两种情况 case 2: if(day>=30) { status=0;//status=0表示生成的日期有误,需要重新生成 } else if(year%4==0&&year%100!=0||year%400==0) {//闰年2月份是29天 status=1; } else if(day<29) {//平年2月份是29天 status=1; } else { status=0; } break; //4、6、9、11月每个月是30天 case 4: case 6: case 9: case 11: if(day<=30) { status=1; } else status=0; break; default: printf("日期错误!n"); status=0; break; } } while(status!=1);//当status=1时,日期无误,结束循环 } //计算与10月1日相差多少天 int calculate() { int sum_d=0;//计算得到的天数 switch(month) { case 1: sum_d=31+28+31+30+31+30+31+31+30+(1-day); if(year%4==0&&year%100!=0||year%400==0) { sum_d+=1; } break; case 2: sum_d=28+31+30+31+30+31+31+30+(1-day); //涉及到2月份的计算需要判断是否为闰年,如果是闰年,二月份为29天 if(year%4==0&&year%100!=0||year%400==0) { sum_d+=1; } break; case 3: sum_d=31+30+31+30+31+31+30+(1-day); break; case 4: sum_d=30+31+30+31+31+30+(1-day); break; case 5: sum_d=31+30+31+31+30+(1-day); break; case 6: sum_d=30+31+31+30+(1-day); break; case 7: sum_d=31+31+30+(1-day); break; case 8: sum_d=31+30+(1-day); break; case 9: sum_d=30+(1-day); break; case 10: sum_d=day-1;//10月份的日期与10月1日相差的天数 break; case 11: sum_d=31+day-1; break; case 12: sum_d=31+30+day-1; break; default: printf("日期有误...n"); } return sum_d;//返回最后计算得到的天数 }
运行截图:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)