想输出两个设定的日期之间的所有日期,用c++或者c语言都可以,十分感谢

假定设置的日期为2009-09-12到2010-02-19(可以分别用3个变量表示年、月、日,最好是跨年度的),想把期间的所有天数依次输出出来。我的思路是最外面年循环,里面月循环,最里面天数循环,天数循环一次后加1,同时要判断是否达到月份的要求(一个月份的天数),感觉很多逻辑判断比较乱,请高人指点。非常感谢
需要判断是不是闰年,那个我想用数组赋值的方法应该不算很难实现。就是逻辑判断输出这块感觉比较麻烦啊。考虑的关系太多了

#include <iostream>
using namespace std;

//定义一个时间
struct date
{
int year;
int month;
int day;
friend date operator++(date &x);
friend bool operator<=(date &x, date &y);
};

//判断是否为闰年
bool isleap_year(int y)
{
if ((y % 400 == 0) || ((y % 100 != 0) && (y % 4 == 0)))
return true;

return false;
}

//计算这年的这个月一共有多少天
int days_month(int y, int m)
{
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

if (isleap_year(y))
days[1] = 29;

return days[m - 1];
}

date operator++(date &x)
{
int days;

days = days_month(x.year, x.month);

if (x.day < days)
x.day++;
else
{
if (x.month == 12)
{
x.day = 1;
x.month = 1;
x.year++;
}
else
{
x.day = 1;
x.month++;
}
}

return x;
}

bool operator<=(date &x, date &y)
{
if (x.year < y.year)
return true;
if ((x.year == y.year) && (x.month < y.month))
return true;
if ((x.year == y.year) && (x.month == y.month)&&(x.day <= y.day))
return true;
return false;
}

int main ()
{
date start, end;
char ignore;
cout << "Input the start date(for example:2009-1-1):\n";
cin >> start.year >>ignore >>start.month >> ignore >> start.day;
cout << "Input the end date(for example:2009-1-1):\n";
cin >> end.year >> ignore >> end.month >> ignore >> end.day;

cout << "\nDays between the start date and end end date:\n";
while (start <= end)
{
cout << start.year << "-" << start.month << "-" << start.day << endl;
++start;
}

cout << endl;

return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-11
还有个你没想到: 每隔四年要润一天的 在这个大循环外还要加个判断 是否为闰年 我建议你先不要着手解决这个问题, 先自己做一个万年历出来,网上有很多相关资料的, 做完这个你的问题就很容易解决了。大月和小月的天数 可以用两个数组分别存放大小月 然后用参数遍历就可以很灵活的得到是大月还是小月 记得还要特别处理 2月的情况本回答被网友采纳
第2个回答  2010-12-11
还要判断闰年。
第3个回答  2010-12-11
int is_leap_year(int year)
{
int leap;
if (year%4==0&&year%100!=0||year%400==0) leap=1;
else leap=0;
return leap;
}

int len_of_month(int year,int month)
{
int month_days;
if (month==2)
if (is_leap_year(year)) month_days=29;
else month_days=28;
else if (month==4||month==6||month==9||month==11) month_days=30;
else month_days=31;
return month_days;
}

int len_of_days(int year,int month,int date)
{
int total_days,n;
for(n=1,total_days=0;n<month;n++)
{ total_days+=len_of_month(year,n);
total_days+=date;
return total_days;}

#include<stdio.h>
void main()
{
int year,month,date,days,n;
printf("please input year,month,date:");
scanf("%d,%d,%d",&year,&month,&date);
days=len_of_days(year,month,date);
printf("%d%d%d is the %d in %d\n",year,month,date,days,year);
}
}
第4个回答  2010-12-11
思路正确。

想输出两个设定的日期之间的所有日期,用c++或者c语言都可以,十分...
include <iostream> using namespace std;\/\/定义一个时间 struct date { int year;int month;int day;friend date operator++(date &x);friend bool operator<=(date &x, date &y);};\/\/判断是否为闰年 bool isleap_year(int y){ if ((y % 400 == 0) || ((y % 100 != 0) && ...

用c语言编写计算两个日期之间的天数
void main(){ tm t1={0},t2={0};t1.tm_year = 1999-1900;t1.tm_mon = 2-1;t1.tm_mday = 3;t2.tm_year = 2015-1900;t2.tm_mon = 5-1;t2.tm_mday = 4;time_t a1 = mktime(&t1);time_t a2 = mktime(&t2);printf("相差%d天", (a2-a1)\/86400);} ps:看不懂...

给定年月日 怎样用C语言编程计算2个日期之间的时间天数
日期一:年 y1,月 m1,日 d1;日期一:年 y2,月 m2,日 d2;\/ int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2){ int s1,s2; \/* 计算两个日期从年初到该日期的天数 *\/ int count; \/* 计算两个年份之间的差值 *\/ int sum=0; \/* *\/ int t,t1,t2;if(y1==y2...

C++ 计算两个日期之间的天数
return d1 > d2 ? d1 - d2 : d2 - d1;\/\/年月都不相同

用c语言编程,输入今天日期y(年),m(月),d(日),输出明天的日期_百度知 ...
printf("请输入年月日,中间用空格隔开!\\n");scanf("%d %d %d",&year,&month,&day);if(year%400==0 || (year%4==0 && year%100!=0)) maxdays[1]=29;\/\/闰年二月最大值是29 if(month>12 || month<1){ printf("日期不合法!\\n");return 0;} if(day>maxdays[month-1]){ p...

用c语言从键盘任意输入一个日期(年月日),输出第二天的日期(年月日...
"年月日:");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("年月日(qtoquit):");} return0;} ...

分两行输出1到100之间的奇数偶数,C语言或C++,多谢
你好,程序如下: #include<stdio.h> void main(){ int i;int a[50],b[50];int p=0,q=0;for(i=1;i<=100;i++){ if(0==i%2){ a[p]=i;p++;} else { b[q]=i;q++;} } for(i=0;i<=p-1;i++)printf("%d ",a[i]);printf("\\n");for(i=0;i<=q-1;i++)...

...用devc++编个c语言程序,输入年月日,天数n,输出n天后的年月日,谢谢...
\/**程序描述:输入年月日,天数n,输出n天后的年月日。*\/#include <stdio.h>typedef struct Date{int year;int month;int day;}Date;int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int IsLeapYear(int year);void ListDate(Date now, int diff);void main(...

...希望可以改成用C++的class类实现,而且输入输出用cout\/cin
用C++ 编写年历,功能如下: (1)输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。 (2)输入年月,输出该月的日历。 (3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 (4)某人自1990年1月1日开始,“三天打鱼两天晒网”,输入一个1990年以后的日期,输出他这一天是打...

求用c++\/c语言编写一个输入n输出1~n的所有排列(千万不是排列数哦)的...
{ int n;cout << "Input n" << endl;\/\/ 输入n cin >> n;\/\/ 这里可以自己做输入错误检测 \/\/ 给数组动态分配大小 int* a = new int[n];\/\/ 给数组赋值(要排列的数据源)for(int i = 1; i <= n; i++){ a[i - 1] = i;} do{ \/\/ 依次输出每个数 for(int i = 0; ...

相似回答
大家正在搜