| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 403 人关注过本帖
标题:针对上次程序的修正break推出循环问题
只看楼主 加入收藏
段璐恒
Rank: 2
等 级:论坛游民
帖 子:29
专家分:22
注 册:2011-3-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
针对上次程序的修正break推出循环问题
经过在下仔细分析,在上次break问题中我的见解是有误的。现在把刚改好的程序拿出来让大家看看顺便也加深一下对break和continue的用法的理解。
一下是以个查询某个日期是当年的第几天以及当年是否是闰年的小程序,仅供大家参考!多多指教
#include<iostream.h>
void sfsrn(int y,int m,int d)
{
    int c;
    if((y%4==0 && y%100!=0) || y%400==0)
    {
        if(m==2&&d>29)
        {
            cout<<"*****"<<"输入的日期有误"<<"*****"<<endl;
        }
        else
        {
            switch (m)
            {
                case 1: c=d;break;
                case 2: c=31+d;break;
                case 3: c=60+d;break;
                case 4: c=91+d;break;
                case 5: c=121+d;break;
                case 6: c=152+d;break;
                case 7: c=182+d;break;
                case 8: c=213+d;break;
                case 9: c=244+d;break;
                case 10: c=274+d;break;
                case 11: c=305+d;break;
                case 12: c=335+d;break;
            }
            cout<<"今年是闰年"<<endl;
            cout<<"今天是第"<<c<<"天"<<endl;
        }
    }
    else
    {
        if(m==2&&d>28)
        {
            cout<<"*****"<<"输入的日期有误"<<"*****"<<endl;
        }
        else
        {
            switch (m)
            {
                case 1: c=d;break;
                case 2: c=31+d;break;
                case 3: c=59+d;break;
                case 4: c=90+d;break;
                case 5: c=120+d;break;
                case 6: c=151+d;break;
                case 7: c=181+d;break;
                case 8: c=212+d;break;
                case 9: c=243+d;break;
                case 10: c=273+d;break;
                case 11: c=304+d;break;
                case 12: c=334+d;break;
            }
            cout<<"今年是平年"<<endl;
            cout<<"今天是第"<<c<<"天"<<endl;
        }
    }
}
void main()
{
    cout<<"想要终止本程序请输入 0 0 0"<<endl;
    cout<<"请输入想要查询的日期"<<endl;
    int y,m,d;
while(1)
{
    cout<<"请输入日期:";
    cin>>y>>m>>d;
    if(y==0&&m==0&&d==0)
        break;
    if(y==0||m>12||d<1||d>31||m==4&&d>30||m==6&&d>30||m==9&&d>30||m==11&&d>30)
    {
        cout<<"输入的日期有误"<<endl;
        continue;
    }
    else
    {
   
        sfsrn(y,m,d);
    }
}
}
搜索更多相关主题的帖子: 分析 continue include 
2011-11-22 23:26
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:20 
我觉得这样有点多,可以这样,只用一个switch,在最后再判断是否闰年,是闰年则说是闰年,在判断如月份大于2,则天数+1,否则就不做更改。还有我没学过c++,也不会调试,这个是凭感觉改的,请lz试试看,不行的话,改了哪些地方,还请说一下,谢谢。
程序代码:
#include<iostream.h>
void sfsrn(int y,int m,int d)
{
    int c;
    if(m==2&&d>29)
    {
            cout<<"*****"<<"输入的日期有误"<<"*****"<<endl;
    }
    else if(((y%4==0 && y%100!=0) || y%400==0)&&(m==2&&d>28))
    {
        cout<<"*****"<<"输入的日期有误"<<"*****"<<endl;
    }
    switch (m)
    {
        case 1: c=d;break;
        case 2: c=31+d;break;
        case 3: c=59+d;break;
        case 4: c=90+d;break;
        case 5: c=120+d;break;
        case 6: c=151+d;break;
        case 7: c=181+d;break;
        case 8: c=212+d;break;
        case 9: c=243+d;break;
        case 10: c=273+d;break;
        case 11: c=304+d;break;
        case 12: c=334+d;break;
    }
    if((y%4==0 && y%100!=0) || y%400==0)        
    { 
        cout<<"今年是闰年"<<endl;
        if(m>2)
            c++;
        cout<<"今天是第"<<c<<""<<endl; 
    }  
    else
    {
        cout<<"今年是平年"<<endl;
        cout<<"今天是第"<<c<<""<<endl;
    }
}


[ 本帖最后由 luchar 于 2011-11-23 00:02 编辑 ]
2011-11-22 23:57
段璐恒
Rank: 2
等 级:论坛游民
帖 子:29
专家分:22
注 册:2011-3-20
收藏
得分:0 
说的好!虽然现在还没试但一定可以。我回去试试,

勤奋刻苦
2011-11-23 11:50
段璐恒
Rank: 2
等 级:论坛游民
帖 子:29
专家分:22
注 册:2011-3-20
收藏
得分:0 
回来试了一下,的确可以,不过你的程序少了一个主函数。主函数需要做的还是挺多的。
你子函数中第一个if(m==2&&d>29)其中29应该改为28平年二月只有28天。我把我改过的程序在贴出原来看看。
#include<iostream.h>
void sfsrn(int y,int m,int d)
{
    int c;
        switch (m)
            {
                case 1: c=d;break;
                case 2: c=31+d;break;
                case 3: c=59+d;break;
                case 4: c=90+d;break;
                case 5: c=120+d;break;
                case 6: c=151+d;break;
                case 7: c=181+d;break;
                case 8: c=212+d;break;
                case 9: c=243+d;break;
                case 10: c=273+d;break;
                case 11: c=304+d;break;
                case 12: c=334+d;break;
            }
        if((y%4==0&&y%100!=0)||(y%400==0))
        {
            cout<<"今年是闰年"<<endl;
            if(m>2)
            {
                cout<<"今天是第"<<c+1<<"天"<<endl;
            }
            else
            {
                cout<<"今天是第"<<c<<"天"<<endl;
            }
        }
        else
        {
            cout<<"今年是平年"<<endl;
            cout<<"今天是第"<<c<<"天"<<endl;
        }

}
void main()
{
    cout<<"想要终止本程序请输入 0 0 0"<<endl;
    int y,m,d;
while(1)
{
    cout<<"请输入要查询的日期:";
    cin>>y>>m>>d;
    if(y==0||m==0||d==0)
    {
        break;
    }
    if(m>12||d<1||d>31||m==4&&d>30||m==6&&d>30||m==9&&d>30||m==11&&d>30)
    {
        cout<<"输入的日期有误"<<endl;
        continue;
    }
    else if(y%4==0&&y%100!=0||y%400==0)
    {
        if(m==2&&d>29)
        {
            cout<<"输入的日期有误"<<endl;
            continue;
        }
        else
        {
            sfsrn(y,m,d);
            continue;
        }

    }
    else if(m==2&&d>28)
    {
        cout<<"输入的日期有误"<<endl;
        continue;
    }
    else
    {
   
        sfsrn(y,m,d);
    }
}
}


勤奋刻苦
2011-11-23 13:17
快速回复:针对上次程序的修正break推出循环问题
数据加载中...
 
   



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

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