C/C++中的几个问题,请哪位大哥帮我看看!!!

来源:百度知道 编辑:UC知道 时间:2024/06/02 13:43:32
1、判断闰年的一个例子函数:
bool IsLeapYear(int yr) const
{return ((yr%4)==0 && (yr%1000)!=0);}

/计算上一年的天数
long int ndays;
ndays=(yr-1)*365+(yr-1)/4-(yr-1)/1000;

上面的判断闰年的公式对不对?就是这一句{return ((yr%4)==0 && (yr%1000)!=0);},如果对,他的计算原理或者说依据是什么?

2、依赖计算顺序和没有定义的表达式:

int m,n;
m=2;
n=3;
m=++n-(n-m);
n=(n*m-n--)+m;

这两个表达式的问题在那里?求详细说明,谢谢

1.判断闰年的公式应该是1楼的
return (((yr%4)==0 && (yr%100)!=0))||yr%400==0);
意思是
1.如果年数能直接被400整除,它是闰年,如2000;
2.如果年数不能被400整除,它能被4整除但不能被100整除,它是闰年,如1996;而1900能被4整除但是也能被100整除,所以它不是闰年
2.对于n=3;
若n++,则表达式的值是3,n值是4;
若++n,则表达式的值是4,n值是4。
所以m=++n-(n-m); m=4-(4-2)=2;
然后n变成了4,m变成了2;
n=(n*m-n--)+m; n=(4*2-4)+2=6;
然后n变成了3,m还是2.

上面的判断闰年的公式不对
return (((yr%4)==0 && (yr%100)!=0))||yr%400==0);

问题一:
我经常跟你差不多的方法做得,也没感觉有啥不对.
问题二:m=2,++n是加一后运算,也就是++n=4,此时n=4
n=5,n--是先运算后减一,就是说n--=3,然后n=2,但是在这个表达式中,乘法的优先级比n--高,所以先计算惩罚,也就是n=(2*3-3)+2=5

ExboCooope 说的才是判断闰年的公式