问题: while与do-while的转换
while语句
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
while (n--)
printf("%d ",a++*2);
}
do-while语句
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
do printf("%d ",a++*2);
while (--n);
}
(为什么转换后,n--变成了--n)
解答:
自增运算符 ++ 使操作数的值增 1,其操作数必须为可变左值。++ 可以置于操作数前面,也可以放在后面。例如:
++n ;
n++ ;
这两个语句产生的结果都是使 n 增 1,可以说没什么区别。使用以下语句得到的效果也是一样的:
n = n + 1 ;
尽管上面两个语句中,++ 前置和后置没有区别。但是,++ 前置和后置其实是有区别的。例如:
int n = 1, post, pre;
post = n++;
pre = ++n;
对于 post = n++; 这个语句,post 得到 n 自增前的值,因为 n++ 的值为 1。也就是说,这个语句执行完后,post 的值是 1,而 n 的值变成 2。而 pre = ++n; 这个语句,pre 得到 n 自增后的值,因为 ++n 的值为 3。也就是说,这个语句执行完后,pre 的值是 3,n 的值也是 3。
总之,无论前置还是后值,++ 都会使其操作数的值增 1。不同的是,++ 前置时,自增表达式(如 ++n)的值等于其操作数自增后的值;++ 后置时,自增表达式(如 n++)的值等于其操作数自增前的值。例如:
int n = 5, post = 1, pre = 1;
pre = ++n + pre; // 运算结束后 pre 为 7,n 为 6
n = 5;
post = n++ + post; // 运算结束后 post 为 6,n 为 6
上例中,++n 的值等于 n 自增后的值,即 6,所以 pre 最后得到的值为 7。n++ 的值等于 n 自增前的值,即 5,所以 post 最后得到的值为 6。
----------------------
搞清楚了么 这样的话
设n=3
while(n--)
{
}
2 1 [0]
do
{
}while(--n)
2 1 [0]
版权及免责声明
1、欢迎转载本网原创文章,转载敬请注明出处:侨谊留学(www.goesnet.org);
2、本网转载媒体稿件旨在传播更多有益信息,并不代表同意该观点,本网不承担稿件侵权行为的连带责任;
3、在本网博客/论坛发表言论者,文责自负。