gpt4 book ai didi

c++ - 在 C++ 中,使用循环查找任何给定日期的天数?

转载 作者:太空狗 更新时间:2023-10-29 21:20:28 26 4
gpt4 key购买 nike

是的,这是一项作业——所以请不要发布解决方案,但详细的伪代码非常有帮助!

我已经有一个 C++ 程序可以接受来自用户的日期并确定它是否是闰年。

到目前为止,这是我的闰年函数(我希望这是正确的逻辑):

bool isLeapYear (int year){
int leapYear = 0;

//leapyear = 1 when true, = 0 when false
if ((year%400 == 0) && (year%100 != 100)) {
leapYear = 1;
}
else if (year%4 == 0) {
leapYear = 1;
}
else {
leapYear = 0;
}



if (leapYear == 1) {
return 1;
}
else {
return 0;
}
}

下面是我接下来必须做的事情的解释:

You MUST use a loop that adds months one at a time to an accumulated sum. Don't use any hardcoded values Such as 152 for the first 5 months in a leap year

澄清一下,这是我的第一堂编程课,上这门 C++ 课已经快一个月了。因此,如果有人能帮我弄清楚如何执行循环语句来添加月份数,我将不胜感激?(IE:12/31/2013 在非闰年应为“365”,在闰年应为“366”)。

我知道这是错误的,但这是我目前所拥有的函数“dayNumber”,它只是将一年中的天数返回给主函数(调用 dayNumber 函数):

int dayNumber (int day, int month, int year){
//variable declarations
int sumTotal = 0;


for ( int loop = 1; loop < month; loop++) {
sumTotal = (( month-1 ) * 31);
sumTotal = sumTotal + day + 1;
if ( (loop==4) || (loop=6) || (loop=9) ||
(loop==11) ) {
sumTotal = ( sumTotal - 1 );
}
else if ( isLeapYear(year) == 1 ) {
sumTotal = (sumTotal - 2);
}
else {
sumTotal = (sumTotal - 3);
}

}


return sumTotal;
}

在我知道的几天里,我开始弄乱它以获得适当的值(value),但它有点搞砸了,哈哈。

如果有人对如何正确执行循环有任何指导,我将非常感激!:)



编辑:好吧,我想我可能已经回答了我自己的问题。

int dayNumber (int day, int month, int year){ //variable declarations int sumTotal = 0;

for ( int loop = 1; loop < month; loop++) { sumTotal = ( sumTotal + 31 );

   if ( (loop==4) || (loop==6) || (loop==9) ||
(loop==11) ) {
sumTotal = ( sumTotal - 1 );
}

} if ((month !=2) && (month > 1)) { if (isLeapYear(year) ==1) { sumTotal = ( sumTotal - 2 ); } else { sumTotal = ( sumTotal - 3); } }

else { sumTotal = sumTotal; } sumTotal = sumTotal + day;

return sumTotal; }

我肯定需要处理我的循环。我很高兴让我知道我的“=”应该是“==”!

我相信这是一个使用足够简单循环的合适代码?我将测试更多日期。到目前为止,我只测试了类(class)网站上提供的少数几个。

我不能回复我自己的帖子,我没有足够的声誉。

最佳答案

我知道一个答案已经被接受了,但是我自己写了一些时间,让我们看看它是否可以增加一些整体信息。


让我们慢慢回顾。

首先,您的 isLeapYear() 函数不完全正确。

无需深入研究算法部分,可以改进两三件事。

  1. 您返回的是 bool,而您的 return 语句返回的是 int。这本身并没有错,但是使用 truefalse 关键字可以提高可读性和一致性。

  2. 您应该立即返回结果,而不是创建、分配和返回变量。

  3. 在运算符周围添加空格:year%400 应变为 year %400


现在是您的代码。

这个条件:

if ((year%400 == 0) && (year%100 != 100))

...尤其是这部分:

(year%100 != 100)

没有按照您的期望行事。

总的来说,算法如下:

if year is not divisible by 4 then common year
else if year is not divisible by 100 then leap year
else if year is not divisible by 400 then common year
else leap year

用代码翻译:

/**/ if (year % 4 != 0)
return false;
else if (year % 100 != 0)
return true;
else if (year % 400 != 0)
return false;
else
return true;

现在让我们稍微简化一下:

/**/ if (year % 4 == 0 && year % 100 != 0)
return true;
else if (year % 400 == 0)
return true;
else
return false;

再次:

if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
else
return false;

最后,可以直接返回整个 bool 表达式:

return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;

现在您的函数是正确的,让我们尝试对您的 dayNumber 函数使用算法:

如果参数中提供的日期被认为是正确的,那么算法就很简单了:

  • 0开始sum
  • 从 1 到 month 的循环已排除
    • 如果 month 是 Frebruary,则如果 isLeapYear 返回 true,则加 29,否则加 28
    • 如果 month 是一月、三月、五月、七月、八月、十月或十二月,则加 31
    • 否则加30
  • day 添加到 sum

关于c++ - 在 C++ 中,使用循环查找任何给定日期的天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com