用c语言从键盘任意输入一个日期(年月日),输出第二天的日期(年月日)。

如题所述

源程序如下:

#include "pch.h"

#define  _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;

int main()

{

 int s[2][13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31,

   0,31,29,31,30,31,30,31,31,30,31,30,31, };

 int year = 0;

 int month = 0;

 int day = 0;

 int n, i, daytemp;

 int flag = 0;

 int nyear = 0, nmonth = 0, nday = 0;

 printf("输入年月日\n");

 scanf("%d%d%d", &year, &month, &day);

 //printf("输入天数\n");

 //scanf("%d",&n);

 n = 1;

 if (year < 0 || month < 0 || month>12 || day < 1 || n < 0)

 {

  printf("输入数据错误\n");

  return 1;

 }

 daytemp = day + n;//累加天数

 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//闰年置1

  flag = 1;

 if (day > s[flag][month])

 {

  printf("输入日期与年月不符.\n");

  return 1;

 }

 if (daytemp <= s[flag][month])//当前日期加天数在本月

 {

  nyear = year;

  nmonth = month;

  nday = daytemp;

 }

 else

 {

  i = month;

  nyear = year;

  while (daytemp > s[flag][i])//循环递减,直到当前日期加天数在本月

  {

   daytemp = daytemp - s[flag][i];

   i++;

   if (i > 12)//超过一年,年累加

   {

    nyear++;

    if ((nyear % 4 == 0 && nyear % 100 != 0) || nyear % 400 == 0)

     flag = 1;

    else

     flag = 0;

    i = i - 12;

   }

  }

  nmonth = i;

  nday = daytemp;

 }

 printf("%d年%d月%d日第%d天后是:\n", year, month, day, n);

 printf("%d年%d月%d日\n", nyear, nmonth, nday);

 return 0;

}

程序运行结果如下:



扩展资料:

其他实现方式:

int monthsize(int year, int month) {

 int days;

 if (month == 2) {

  if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

   return 29;

  return 28;

 }

 switch (month) {

 case 1:

 case 3:

 case 5:

 case 7:

 case 8:

 case 10:

 case 12:days = 31; break;

 case 4:

 case 6:

 case 9:

 case 11: days = 30; break;

 }

 return days;

}

int main() 

 int year, month, day, days;

 printf("年 月 日:");

 while (scanf("%d%d%d", &year, &month, &day) == 3) {

  days = monthsize(year, month);

  if (days == day) {

   if (month == 12) {

    ++year;

    month = 1;

    day = 1;

   }

   else ++month;

  }

  else ++day;

  printf("第二天是:%d/%02d/%02d\n", year, month, day);

  printf("年 月 日(q to quit):");

 }

 return 0;

}

温馨提示:答案为网友推荐,仅供参考
相似回答