c语言中怎么看值循环几次

【示例①】用函数计算平方值。
#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吗?

    请大神解答

追答

电脑上不知道怎么追答,写到回复里去了,你看回复吧

温馨提示:答案为网友推荐,仅供参考
相似回答