| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:[求助] 一个C++程序
只看楼主 加入收藏
yuziguang
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-5-16
收藏
 问题点数:0 回复次数:10 
[求助] 一个C++程序
在线的C++编程高手我想求助的问题是:
任意输入一个年,月,日,然后输出这个日期是这一年的第几天.
搜索更多相关主题的帖子: 编程高手 在线的 
2007-05-16 11:04
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
首先要判断日期的合法性了(注意2月,和大月小月),这个不难。

再,记录下每月的第一天是该年的第几天(都一样,不过,闰年有1天的差别)

输入一个日期,根据年判断是否多一天,少一天;根据月份选择记录点,再加上日就是这一年的第几天。



程序嘛,自己动手了

Fight  to win  or  die...
2007-05-16 11:12
yuziguang
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-5-16
收藏
得分:0 

这位大哥,首先谢谢你的及时回复.
你讲的那些我们的老师也跟我们讲过,但我是C++的初学者,以前从未接触过任何计算机语言.真的惭愧,程序我是实在编写不出,还望指教.
不慎感激!

2007-05-16 13:02
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

好久没练练基础了,写了个,你自己看看吧!

[CODE]#include<iostream>
using namespace std;
struct date{
int year;
int month;
int day;
};
bool isLeapYear(const date &d){
if (d.year % 100 == 0){
if (d.year % 400 != 0)
return false;
}
else{
if (d.year % 4 != 0)
return false;
}
return true;
}

bool isValid(const date &d){
if (d.year < 1 || d.month < 1 || d.month > 12 || d.day < 1)
return false;
switch (d.month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if (d.day > 31)
return false;
break;
case 4: case 6: case 9 : case 11:
if (d.day > 30)
return false;
break;
case 2:
if (isLeapYear(d)){
if (d.day > 29)
return false;
}
else{
if (d.day > 28)
return false;
}
break;
}
return true;
}
int countDay(const date &d){
int record[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
if (d.month <= 2)
return record[d.month-1]+d.day;
else{
if (isLeapYear(d))
return record[d.month-1]+1+d.day;
else
return record[d.month-1]+d.day;
}
}


int main(){
int year,month,day;
cin >> year >> month >> day;
date d = {year,month,day};
if (!isValid(d)){
cout << "invalid" << endl;
system("pause");
return 0;
}
cout << countDay(d) << endl;
system("pause");
}[/CODE]



Fight  to win  or  die...
2007-05-16 13:27
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 


#include <iostream>
#include <numeric>
using namespace std;

const int arr[2][12+1]={
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}
};

inline int isleapyear(int y)
{
return (y%4==0 && y%100!=0 || y%400==0);
}

int main()
{
int y,m,d;
scanf(\"%d %d %d\",&y,&m,&d);
printf(\"%d\n\",accumulate(arr[isleapyear(y)],arr[isleapyear(y)]+m-1,d));
}

2007-05-16 13:53
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 

比较简单~~~
代码:

#include<iostream>
using namespace std;

void main()
{
int year,month,day;
int days=0,day1;
int x=0,i;

cout<<"请输入一个日期"<<endl;

cin>>year>>month>>day;

for(i=1;i<=month-1;i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day1=31;break;
case 4:
case 6:
case 9:
case 11:day1=30;break;
case 2:if((year%4==0&&year%100!=0)||(year%400==0)) day1=29; //判断二月为大月或小月
else day1=28;
}
days=days+day1;

}
days=days+day;

cout<<"这是一年中的第"<<days<<"天!\n";
}


每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-16 15:17
yuziguang
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-5-16
收藏
得分:0 
真的非常感谢各位高手的回复  谢谢!
2007-05-16 18:30
neverDie
Rank: 1
等 级:新手上路
威 望:1
帖 子:123
专家分:0
注 册:2007-5-5
收藏
得分:0 
恩,恩,

后面两个怎么没判断有效性呢?

2007-05-17 10:45
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 
这里只是给出大概思路而已~~~

而至于判断输入有效性的话就自己去想吧(也不会太难)~~

还不懂的话发帖问一下就好啦!


每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-17 17:43
baggio1985
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-5-17
收藏
得分:0 
QUOTE:
以下是引用aipb2007在2007-5-16 13:27:11的发言:

好久没练练基础了,写了个,你自己看看吧!

[CODE]#include<iostream>
using namespace std;
struct date{
    int year;
    int month;
    int day;
};
bool isLeapYear(const date &d){
    if (d.year % 100 == 0){
        if (d.year % 400 != 0)
            return false;
    }
    else{
        if (d.year % 4 != 0)
            return false;
    }
    return true;
}
    
bool isValid(const date &d){
    if (d.year < 1 || d.month < 1 || d.month > 12 || d.day < 1)
        return false;
    switch (d.month){
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            if (d.day > 31)
                return false;
            break;
        case 4: case 6: case 9 : case 11:
            if (d.day > 30)
                return false;
            break;
        case 2:
            if (isLeapYear(d)){
                if (d.day > 29)
                    return false;
            }
            else{
                if (d.day > 28)
                    return false;
            }
            break;
    }
    return true;
}
int countDay(const date &d){
    int record[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
    if (d.month <= 2)
        return record[d.month-1]+d.day;
    else{
        if (isLeapYear(d))
            return record[d.month-1]+1+d.day;
        else
            return record[d.month-1]+d.day;
    }
}
    
            
int main(){
    int year,month,day;
    cin >> year >> month >> day;
    date d = {year,month,day};
    if (!isValid(d)){
        cout << "invalid" << endl;
        system("pause");
        return 0;
    }
    cout << countDay(d) << endl;
    system("pause");
}[/CODE]

创建了struct  这种程序还没用过 都是直接上数组

2007-05-17 20:44
快速回复:[求助] 一个C++程序
数据加载中...
 
   



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

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