有道C语言题,请高手解答下~~~

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:49:21
#define A 100
main()
{
int i=0,sum=0;
do{
if(i==(i/2)*2)
continue;
sum+=i;
}
while(++i<A);
printf("%d\n",sum);
}
主要就 if(i==(i/2)*2) 这句不理解 为什么i=0成立?
答案是0-100奇数和

整型数据进行除法,如果不能整除需要进行舍入操作,当i为偶数的时候(i/2)*2还是i,但当i是奇数的时候(i/2)*2就不等于i了,应该是(i-1)了(你可以自己写个简单的程序测试一下,比如int i=3;printf("%d\n", i/2);看输出是什么)

这句是排除偶数的
由于是INT整形
所以如果是奇数的话
i==(i/2)*2这句是不成立的
因为省略了小数位

i=0是初始条件,它的由来是所给的题意:计算0-100的奇数和,关键语法就是如何判断奇数,最简单的就是通过处以2看余数是0还是1,采用if语句判断,不过if(i==(i/2)*2)我没看懂,它的意思应该是i%2,这样赋值给左边的i,i就是0或1,用if执行判断,成立的换执行continue,不成立的话执行printf,语法可以编很多种,不应定非要用一种模式

i为0时,(i/2)*2结果仍然为0,当然就会成立.
if(i==(i/2)*2),是排除所有的偶数.比如当i为4时,i==(i/2)*2表达示为真,执行coutinue跳过下面的语句.不过,我认为应该将i初始化为1,这样会更合适一些.不过,初始化为0也不会影响到结果.

如果是我,更愿意写if(!(i%2)),这样还好理解一点。

因为i是int型,i是奇数i/2是有小数部分的,由于int型舍去了,所以i不等于i/2*2