标题:万年历法的程序,有点问题~请各位指教
只看楼主
gyfabc
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2012-4-20
结帖率:50%
已结贴  问题点数:20 回复次数:3 
万年历法的程序,有点问题~请各位指教
#include<iostream>
using namespace std;
#include<iomanip>
int firstday(int year)   //计算当年第一天是星期几
{
int s, k;

s=year-1990;
k=1+(s-1)/4+1;
return (int)k;

}


void print(int s,int firstday)   //输出12个月
{
cout<<" 日 "<<"一 "<<"二 "<<"三 "<<"四 "<<"五 "<<"六 "<<endl;
for(int j=firstday;j>0;j--)
cout<<" ";

for(int i=1;i<=s;i++)
{
cout<<" "<<setw(2)<<i;
firstday=(firstday+1)%7;
if(firstday==0)
   cout<<endl;
}
cout<<endl;


}



int monthday(int n,int year)     //计算一个月有多少天
{
    if((n==1)||(n==3)||(n==5)||(n==7)||(n==8)||(n==10)||(n==12))
        return 31;
    if(n==2)
        {
        if((year%4==0&&year%100!=0)||(year%400==0))
            return 29;

           else
               return 28;
        }

    else
        return 30;



}

void main()
{
int i,year,f,m;
cout<<"year:";
cin>>year;
cout<<endl;
f=firstday(year);
for(i=1;i<=12;i++)      //控制输出12个月
    {
      cout<<"         "<<i<<"月"<<endl;

    m=monthday(i,year);
    print(m,f);

    }


}

估计是红色的地方出了问题??
搜索更多相关主题的帖子: 万年历 问题 include return 
2012-04-22 09:55
gyfabc
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2012-4-20
得分:0 
#include<iostream>
using namespace std;
#include<iomanip>
int firstday(int year)   //计算当年第一天是星期几
{
int s, k;

s=year-1990;
k=1+(s-1)/4+1;
return (int)k;

}


/*void print(int s,int firstday)   //输出12个月
{
cout<<" 日 "<<"一 "<<"二 "<<"三 "<<"四 "<<"五 "<<"六 "<<endl;
for(int j=firstday;j>0;j--)
cout<<" ";

for(int i=1;i<=s;i++)
{
cout<<" "<<setw(2)<<i;
firstday=(firstday+1)%7;
if(firstday==0)
   cout<<endl;
}
cout<<endl;


}*/



int monthday(int n,int year)     //计算一个月有多少天
{
    if((n==1)||(n==3)||(n==5)||(n==7)||(n==8)||(n==10)||(n==12))
        return 31;
    if(n==2)
        {
        if((year%4==0&&year%100!=0)||(year%400==0))
            return 29;

           else
               return 28;
        }

    else
        return 30;



}

void main()
{
int i,year,f,m;
cout<<"year:";
cin>>year;
cout<<endl;
f=firstday(year);
for(i=1;i<=12;i++)      //控制输出12个月
    {
      cout<<"         "<<i<<"月"<<endl;

cout<<" 日 "<<"一 "<<"二 "<<"三 "<<"四 "<<"五 "<<"六 "<<endl;
for(int j=f;j>0;j--)
cout<<"   ";
    m=monthday(i,year);
for(int i=1;i<=m;i++)
{
cout<<" "<<setw(2)<<i;
f=(f+1)%7;
if(f==0)
   cout<<endl;
}
cout<<endl;
}
}


修改后,但是一月份还是排列有问题。。。



2012-04-22 10:18
sfwyx
Rank: 2
等 级:论坛游民
帖 子:25
专家分:59
注 册:2011-8-18
得分:20 
int firstday(int year)   //计算当年第一天是星期几
{
int s, k;
s=year-1990;//这一句什么意思?这样只有1990年之前的年份输出正常,输入2011就会出现问题
k=1+(s-1)/4+1;
return (int)k;
}


[ 本帖最后由 sfwyx 于 2012-4-22 11:48 编辑 ]
2012-04-22 11:44
gyfabc
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2012-4-20
得分:0 
回复 3楼 sfwyx
问题解决了,是那里出现了问题。
   正确程序如下:#include<iostream>
using namespace std;
#include<iomanip>
int firstday(int year)   //计算当年第一天是星期几
{
double s;


int k=((year-1)+(year-1)/4-(year/100)+(year/400)+1);
return (int)(k%7);

}






int monthday(int n,int year)     //计算一个月有多少天
{
    if((n==1)||(n==3)||(n==5)||(n==7)||(n==8)||(n==10)||(n==12))
        return 31;
    if(n==2)
        {
        if((year%4==0&&year%100!=0)||(year%400==0))
            return 29;

           else
               return 28;
        }

    else
        return 30;



}

void main()
{
int i,year,f,m;
cout<<"year:";
cin>>year;
cout<<endl;
f=firstday(year);
for(i=1;i<=12;i++)      //控制输出12个月
    {
      cout<<"         "<<i<<"月"<<endl;

cout<<" 日 "<<"一 "<<"二 "<<"三 "<<"四 "<<"五 "<<"六 "<<endl;
for(int j=f;j>0;j--)
cout<<"   ";
    m=monthday(i,year);
for(int i=1;i<=m;i++)
{
cout<<" "<<setw(2)<<i;
f=(f+1)%7;
if(f==0)
   cout<<endl;
}
cout<<endl;
}
}
2012-04-22 11:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-366313-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.117471 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved