1.for循环
int main()
{
//for(初始化部分;条件判断部分;调整部分)
//建议for循环采用前闭后开的写法 (i=n;i<m;i++) 循环m-n次 、、不是绝对这么写
int i = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i < 10; i++) //循环10次,代码可读性强
{
printf("%d ", arr[i]);
}
return 0;
}
for循环判断部分省略会死循环,初始化部分可省略,但不推荐
2.do…while()循环
/*do
循环语句;//至少循环一次
while (表达式);*/
int i = 1;
do
{
i++;
if (i == 5)
continue;
printf("%d ", i);
}
while (i <= 10);
3.while()
1,2,3,4,5…10的阶乘和
双循环
int i = 0, n = 0, j = 1;
int ret = 1;
int sum = 0;
for (j = 1;j <= 10; j++)
{
for (i = 1;i <= j; i++)
{
ret = ret * i;
}
sum = sum + ret;
ret = 1;//必须重置ret
}
printf("%d", sum);
优化版
int ret = 1;
int sum = 0;
for (j = 1;j <= 10; j++)
{
ret = ret * j;
sum = sum + ret;
}
printf("%d", sum);
有序数组中查找某个数–二分法 时间复杂度log2(n)
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7; //需要找的元素k
scanf("%d", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz-1;
while (left <= right)
{
int mid = (left + right) / 2; //需知道(9+0)/2=4
if (arr[mid] < k)
{
left = mid + 1; /arr在左,小就加
}
else if (arr[mid] > k)
{
right = mid + 1;
}
else
{
printf("ok");
break;
}
}
if (left > right)
{
printf("no");
}
演示多个字符从两端移动向中间汇聚
//需要补上
#include<windows.h>
#include<stdlib.h>
char arr1[] = "welcome to NY !!!";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1)-1;
//int right = sizeof(arr1) / sizeof(arr1[1])-2;
//用sizeof由于字符串末尾/0的存在,需要-2
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls"); //system是一个库函数,可以执行系统命令
left++;
right--;
}
printf("%s\n", arr2);
模拟输入密码,错三次退出程序
//假设密码字符串abcdef
int i = 0;
char pass[20] = {0};
for (i = 0; i < 3; i++)
{
printf("password:");
scanf("%s", pass); //数组名本来就是地址,不需要取地址
if (strcmp(pass, "abcdef") == 0)
//比较字符串相等不能使用==,使用库函数strcmp ,string compare
//返回值为0表示相等
{
printf("sucsess");
break;
}
else
printf("wrong\n");
}
if (i == 3)
{
printf("fail");
}