【示例①】用函数计算平方值。
#include <stdio.h>
int SQ(int y){
return ((y)*(y));
}
int main(){
int i=1;
while(i<=5){
printf("%d^2 = %d\n", (i-1), SQ(i++));
}
return 0;
}
运行结果:
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25
【示例②】用宏计算平方值。
#include <stdio.h>
#define SQ(y) ((y)*(y))
int main(){
int i=1;
while(i<=5){
printf("%d^2 = %d\n", i, SQ(i++));
}
return 0;
}
在 VS2010 和 C-Free 5.0 下的运行结果:
3^2 = 1
5^2 = 9
7^2 = 25
在示例①中,先把实参 i 传递给形参 y,然后再自增 1,这样每循环一次 i 的值增加 1,所以最终要循环 5 次。
在示例②中,宏调用只是简单的字符串替换,SQ(i++) 会被替换为 ((i++)*(i++)),这样每循环一次 i 的值增加 2,所以最终只循环 3 次。
搞不懂为什么 示利一 种i每次循环都加1,那第一次循环得出的结果i=0了吗
还有i=6时,明明条件是i<=5 i=6怎么又循环了一遍
示利二中的i=1呢,为什么每循环一次i+2??
求大神啊
示例1i从1开始,每次循环加一,为什么会得出i=0呢,它只是最后循环结束返回0而已
i=6的时候并没有循环输出啊?你是指示例2为什么5后面还会输出7是吧,因为输出7的那次循环时i在开始时是5,符合while条件,然后运行完宏乘法后再加2,i从5加到7,所以是7^2=15
正如你所说,SQ(i++)会被替换成((i++)*(i++)),这样*两侧的括号内i都会自增1,所以每次循环i增加2
满意还请采纳
printf("%d^2 = %d\n", (i-1), SQ(i++));这的i不是要-1吗?
第二个我懂了
示例一:int SQ(int y){
return ((y)*(y));
} 这个的i不用+2吗?
请大神解答
电脑上不知道怎么追答,写到回复里去了,你看回复吧