这篇博客是对前面所学的总结,更注意对一些小细节的把握。
目录
一、while(i++)在循环中的误区
1、while(++i)是先执行i+1,再进行判断,再执行循环体;
2、while(i++)是先判断,再执行循环体,再+1
循环结束后:while(++i)执行完后,i=0; while(i++)执行完后,i=1;
例如,你觉得下面代码是无限循环还是其它呢,运行试试吧!
#include<stdio.h>
void main()
{
int i=0;
do
{
printf("%d,",i);
}while(i++);
}
二、 s*=n%10的运算顺序
将其展开
s=s*n%10 从左到右计算实际上是不对的,
同一优先级的运算符,运算次序由结合方向所决定。例如乘除都有,按从左到右顺序
简单记就是:算术运算符(+、-、*、/、% )> 关系运算符(>、<、>=、<=、==、!=) > && > || > 赋值运算符(+=、-=、*=、/=)
所以s=s*n%10是从有到左,例如下题的正确答案是6而不是7
#include<stdio.h>
int main()
{
int s=3;
int n=25;
s*=n/10;
printf("%d",s);
return 0;
}
三、case语句明晰
先看代码
#include<stdio.h>
void main()
{
int k=5,n=0;
do
{
switch(k)
{
case 1:
case 3:
n+1; k--;
break;
default:
n=0;
k--;
case 2:
case 4:
n+=2; k--;
break;
}
printf("%d",n);
}while(k>0&&n<5);
}
结果既不是235,也不是0235,而是2244
有如下注意事项:
- k值只能决定在循环从哪里进去,而不能决定在哪里出去,当k=1时,case 1为空,紧接着进入case 2,直到遇到break才跳出循环。
- 当所有的k值都无法满足,例如k=5,就无法进入case循环,走default路线,但default并不是结束的标志,程序会继续走下面的case 2,case 4直到遇见break,跳出循环。
- case 3中的n+1对n无影响与n=n+1和n++区分。
- case 2为空,跳到case 4运行
谢谢光顾🎉