do while循环
do
(循环语句);
while(表达式);
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (i == 5)
break;
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
程序运行结果是1 2 3 4,可见break的作用在do while里也是跳出本次循环,后面语句都不会执行。
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (i == 5)
continue;
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
会造成死循环,跳过printf和++,进入while条件判断。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
if (i == 5)
continue;
} while (i<=10);
return 0;
}
此时continue语句形同虚设,有无作用都一样。
补充:
可以使用
#include <limits.h>
INT_MAX
//右键转到定义可以看见整形最大值,同理可以看见long,longlong的最大值。
二分查找
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 13;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz-1;
while (left<=right)
{
//int mid = (left + right) / 2; //会造成位数错误,所以使用下面的代码来解决。
int mid = left + (right - left) / 2;
if (arr[mid] < k)
{
left = mid + 1; //左代码递增。
}
else if (arr[mid] > k)
{
right = mid - 1; //右代码递减。
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到了\n");
}
return 0;
}
多个字符从中间移动替换实现
#include <string.h> //strlen头文件。
#include <windows.h> //sleep头文件。
#include <stdlib.h> //system头文件。
int main()
{
char arr1[] = "welcome to bit!!!!!!";
char arr2[] = "####################";
int left = 0;
int right = strlen(arr1) - 1;
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000); //单位是毫秒,来让输出结果停顿。
system("cls"); //请屏,重置输出结果。
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
rand函数实现随机数
需要包含头文件<stdlib.h>。返回0到RAND_MAX9(0x7FFF,也就是32767)之间的数字。
需要生成1-100的数字的操作:
//调用rand前要使用srand。
srand((unsigned int)time(NULL)); //传一个不断发生变化的数字,比如时间戳。
//time函数包含在<time.h>头文件中。
//unsigned int是srand需要使用的类型。
//NULL是time传递的参数,此时不需要。
//需要放在主函数中,放置在函数中的值不够随机。
game函数中:
int ret = rand()%100+1; //生成1-100的数字。
goto语句
用于一次性跳出多重循环。或者跳到符号旁边。
void test()
{
n;
}
int main()
{
n:
printf("hehe\n");
printf("hehe\n");
printf("hehe\n");
goto n; //goto 语句不能跨函数跳转,n在函数中就不能跳转
return 0;
}
//一直循环输出hehe
待补充。