标题:万年历求修改!!
只看楼主
格雷迪
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:24
专家分:1
注 册:2011-2-21
结帖率:33.33%
 问题点数:0 回复次数:10 
万年历求修改!!
/**************************************/
程序实现的是输入一个年份,输出该年的日历。

本程序存在的问题:开头第一行日期总是无法控制宽度,对位不齐,后面都对的很齐。遗憾无法上传图片,请大虾帮帮运行改改。谢谢了!


#include<iostream>
#include<iomanip>
using namespace std;
int year,weekday;
int firstday(int y)
{
  double s;
  s=year-1+(year-1)/4.0-(year-1)/100.0+(year-1)/400.0+1;
  return (s/7);
}
int month(int m)
{
  switch(m)
  {
     case 1:
     case 3:
     case 5:
     case 7:
     case 8:
     case 10:
     case 12:return 31;
     case 4:
     case 6:
     case 9:
     case 11:return 30;
     case 2:
         if((year%4==0 && year%100!=0)||(year%400==0))
                return 29;
         else
                return 28;
     default:return 0;
  }
}
void printhead(int m)
{
  int i;
  cout<<m<<"月"<<"\n"<<"  日  一  二  三  四  五  六  "<<"\n";
  for(i=1;i<=weekday;i++)
      cout<<"  ";
}
void printmonth(int m)
{
   int i,days;
   printhead(m);
   days=month(m);
   for(i=1;i<=days;i++)
   {
      cout<<"  "<<setw(2)<<i;
      weekday=(weekday+1)%7;
      if(weekday==0)
          cout<<"\n";
   }
}
void main()
{
  int i;
  cout<<"请输入年份:";
  cin>>year;
  weekday=firstday(year);
  cout<<year<<"年"<<"\n";
  for(i=1;i<=12;i++)
  {
    printmonth(i);
    cout<<"\n";
  }
  cout<<"\n";
}
搜索更多相关主题的帖子: 万年历 double include return 
2012-03-30 16:46
格雷迪
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:24
专家分:1
注 册:2011-2-21
得分:0 
图片上传,大虾帮忙看看!!!
2012-03-30 16:47
qwe511455842
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-10-26
得分:0 
找不到哪里的问题啊
2012-03-30 22:15
qwe511455842
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-10-26
得分:0 
#include<iostream>
#include<iomanip>
using namespace std;
int year, weekday;
int firstday(int y)
{
    double s;
    s = year - 1 + (year - 1) / 4.0 - (year - 1) / 100.0 + (year - 1) / 400.0 + 1;
    return (s / 7);
}
int month(int m)
{
    switch(m)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        return 31;
    case 4:
    case 6:
    case 9:
    case 11:
        return 30;
    case 2:
        if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
            return 29;
        else
            return 28;
    default:
        return 0;
    }
}
void printhead(int m)
{
    int i;
    cout << m << "月" << "\n" << "  日  一  二  三  四  五  六  " << "\n";
   for(i = 1; i <= weekday; i++)
       cout<<"";
}
void printmonth(int m)
{
    int i, days;
    printhead(m);
    days = month(m);
    for(i = 1; i <= days; i++)
    {
        cout << "  " << setw(2) << i;
        weekday = (weekday + 1) % 7;
        if(weekday == 0)
            cout << "\n";
    }
}
void main()
{
    int i;
    cout << "请输入年份:";
    cin >> year;
    weekday = firstday(year);
    cout << year << "年" << "\n";
    for(i = 1; i <= 12; i++)
    {
        printmonth(i);
        cout << "\n";
    }
    cout << "\n";
}
2012-03-30 22:37
格雷迪
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:24
专家分:1
注 册:2011-2-21
得分:0 
回复 4楼 qwe511455842
这第一行还是有问题啊!!
2012-04-02 13:17
dddkl007
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-4-5
得分:0 
只需要把
void printhead(int m)
{
    int i;
    cout << m << "月" << "\n" << "  日  一  二  三  四  五  六  " << "\n";
    if(m==1)
    {for(i = 1; i <= weekday; i++)
       cout<<"";
    }
    else
    {
      for(i = 1; i <= weekday; i++)
       cout<<"    ";
    }
}
添加if-else 语句就可以了
2012-04-07 16:41
格雷迪
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:24
专家分:1
注 册:2011-2-21
得分:0 
回复 6楼 dddkl007
加上这个确实解决了第一个月多出几行的问题,而且后面的也能对齐了,只是第一个月的第一行就无法对其了。问题就快要解决了,大虾加吧力,非常谢谢了!
2012-04-07 18:15
dddkl007
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-4-5
得分:0 
可以试着把第一个月分开来写代码   应该可以的
2012-04-09 22:57
nongzhaobo
Rank: 3Rank: 3
来 自:广西南宁
等 级:论坛游侠
帖 子:59
专家分:155
注 册:2012-4-8
得分:0 
来学习的...
2012-04-10 00:02
gyfabc
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2012-4-20
得分:0 
#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 19:10



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




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

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