求解一个C++问题,需要详细的解答,谢谢! 10

题目是:C++编程:定义一个结构体变量(包括年月日),编写程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。主意闰年问题。我的答案:#include<ios... 题目是:C++编程:定义一个结构体变量(包括年月日),编写程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。主意闰年问题。

我的答案:
#include <iostream>
using namespace std;
struct Date
{int month;
int day;
int year;
};
int main()
{
Date date;
int count_day,i;
int month[12];
int month1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int month2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
bool leap;
cout <<"please enter month day and year";
cin>>date.year>>date.month>>date.day;
if ((date.year%4==0 && date.year%100!=0) || (date.year%400==0))
{
leap=true;
month[12]=month1[12];
}
else
{
leap=false;
month[12]=month2[12];
}
for(i=0;i<date.month;i++)
count_day=count_day+month[i];
cout<<"该日是本年第"<<count_day<<"天"<<endl;
return 0;
}、
可是却有问题,执行出来答案很奇怪,求解!!!!!!!
展开
 我来答
White_MouseYBZ
2013-12-06 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6597万
展开全部
自己比较着看吧。
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
int year,month,day,i,k,m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
cout << "Type Year, Month & Day\n";
while(1){
cin >> year >> month >> day;
if(year>0){
if(!(year%100) || !(year%4) && year%100) m[1]++;
if(month>0 && month<13 && day>0 && day <=m[month-1])
break;
}
cout << "Error! redo...\n";
}
for(k=i=0,month--;i<month;i++)
k+=m[i];
cout << year << "年" << month+1 << "月" << day << "日是该年的第" << k+day << "天.\n";
}
空雪梦见
2013-12-06 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1194万
展开全部
#include <iostream>
#include <algorithm>
using namespace std;
struct Date
{
int month;
int day;
int year;
};
int main()
{
Date date;
int count_day = 0, i;
int month[12];
int month1[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int month2[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
bool leap;
cout << "please enter month day and year";
cin >> date.year >> date.month >> date.day;
if ((date.year % 4 == 0 && date.year % 100 != 0) || (date.year % 400 == 0))
{
leap = true;
copy_n(month1, 12, month);
}
else
{
leap = false;
copy_n(month2, 12, month);
}
for (i = 1; i < date.month; i++)
count_day = count_day + month[i - 1];
count_day = count_day + date.day;
cout << "该日是本年第" << count_day << "天" << endl;
return 0;
}

1、整个数组之间的赋值不能直接用一个等号这样完成。可以使用algorithm头文件里的copy_n从一个数组复制到另一个数组

2、count_day没有初始化为0

3、count_day没有加上日期的天数

4、month的第i个元素并不代表第i个月的天数,因为下标从0开始的。i-1才是该月份天数

5、因为没有第0月,所以i要从1开始

6、闰年判断方式有没有错我没检查。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CY__0724
2013-12-06 · 超过23用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:50.8万
展开全部
#include <iostream>
using namespace std;
struct Date
{int month;
int day;
int year;
};
int main()
{
Date date;
int count_day,i;
int month[12];
int month1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int month2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
bool leap;
cout <<"please enter month day and year\n";
cin>>date.year>>date.month>>date.day;
count_day=date.day; //起始天数
if ((date.year%4==0 && date.year%100!=0) || (date.year%400==0))
{
leap=true;
for(i=0;i<12;i++) //数组赋值
month[i]=month1[i];
}
else
{
leap=false;
for(i=0;i<12;i++) //数组赋值
month[i]=month2[i];
}
for(i=0;i<date.month-1;i++) //此处i从0开始变到。。。。
count_day=count_day+month[i];
cout<<"该日是本年第"<<count_day<<"天"<<endl;
return 0;
}
追问
请问为何要“for(i=0;i<12;i++)      //数组赋值    ”?
追答
我不好给你说,在这个程序中,数组要逐个元素赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式