(一)while循环
1.while(表达式),其括号内的表达式可以为C语言中任意合法的表达式,只是一般常用关系和逻辑表达式。 while(n++) , while(1)等 都是合法的表达。
2.while(n++)和while(++n)的区别
while(n++)代表的意思是 第一步判断n是否满足循环条件,第二步是让n进行一次自加 ,第三步执行循环体中的语句。其与 for(int n = 0 ; 表达式2;n++)类似,但不同的是for是在执行完循环体后才进行n++的。
while(++n)代表的意思是 第一步执行一次++n,第二步判断,第三步执行循环体
#include<stdio.h>
int main()
{
int a=1;
while(a++<5);
printf("%d",a);//输出a的值
int b=1;
while(++b<5);
printf("%d",b);//输出b的值
return 0;
}
执行结果是 a=6 b=5
这是因为第一个while循环在a=5时跳出循环会再一次进行a++从而才停止,第二个循环在b=5的时候就会停止循环。
(二)二分查找
tip:二分查找就是在一个有序列的数组中找出一个特定的值 k。原理就是先取出数组中间的元素与k比较,如果中间值偏大那么k就在数组的左边(反之就在右边),从而缩小范围,然后再一次取出左边的中间数与k再一次比较...如此循环几次过后就能将范围缩到很小。对于数组中有几千上万个元素时,使用二分查找是快速且高效的办法。
如下:请在1到100中找出8并打印出其在数组中的位置(下标)
#include<stdio.h>
int main()
{
int arr[100] = { 0 };
int i = 0;
for (i = 0;i < 100;i++) //先在数组中输入1到100的数字
{
arr[i] = i+1;
}
int k = 8; //需要找的数
int sz = sizeof(arr)//sizeof(arr[0]); //计算出数组的元素个数并将其定义为最右边元素的下标
int left = 0; //最左边元素的下标
int right = sz - 1;//将其定义为最右边元素的下标
while (left <= right)//二分查找
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else
if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了k在该数组中的下标%d\n", mid);
break;
}
}
if (left > right)//当发生明显的错误的时候就说明k不在该数组中
{
printf("找不到k\n");
}
return 0;
}