`循环语句
- while语句
- do while 语句
- for语句
1.1while语句
while(表达式)
{
循环语句;
}
若表达式为真(非零),则进入循环。
打印1~10的数字
case 1
#include<stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ",i);
i++;
}
return 0;
}
打印结果
1.2
case 2
#include<stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(4==i)
break;
printf("%d ",i);
i++;
}
return 0;
}
打印结果
break在while循环中的作用:
直接终止循环
1.3
case 3
#include<stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(4==i)
continue;
printf("%d ",i);
i++;
}
return 0;
}
打印结果
#include<stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
i++;
if (4 == i)
continue;
printf("%d ", i);
}
return 0;
}
打印结果
由上述两种代码可知
continue在while循环中的作用:
只终止本次循环,不执行continue后面的语句,直接跳到while循环的判断部分
2.1 for循环
for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化,表达式2为条件判断,表达式3为调整。
表达式1,表达式2可以省略。
2.2
for循环控制变量
1.不可在for循环体内修改循环变量,以至for循环失去控制
2.控制变量的取值建议 前闭后开
2.3
表达式省略的陷阱
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for(;i<10;i++)
{
for(;j<10;j++)
{
printf("嘿嘿\n");
}
}
return 0;
}
变量j在变量i第一次循环结束后,数值就变为10。此后j一直不满足判断条件,因此只打印十次”嘿嘿“。
打印1~10的数字
int main()
{
int i = 1;
for(i = 1;i <= 10;i++)
{
printf("%d ",i);
}
return 0;
}
break和continue在for循环中的意义与while循环一致
2.4
判断条件为零
#include<stdio.h>
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
k++;
return 0;
}
3.1
do…while()循环
do
{
循环语句;
}while(表达式);
打印1~10的数字
#include<stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ",i);
i++;
}while(i<=10);
return 0;
}
3.2
#include<stdio.h>
int main()
{
int i = 1;
do
{
i++;
if (i == 5)
continue;
printf("%d ", i);
} while (i <= 10);
return 0;
}
#include<stdio.h>
int main()
{
int i = 1;
do
{
if(i==5)
continue;
printf("%d ",i);
i++;
}while(i<=10);
return 0;
}
本次打印结果为死循环
break在do…while()循环中意义与while循环一致
continue有点差异
goto语句
goto 语句标号;
控制程序无条件转移
语句标号是用标识符加冒号表示,用来表示程序的位置,常用来表示转移语句goto的转移目标
编写电脑自动关机程序
#include<stdio.h>
#include<string.h>
int main()
{
char arr[20] = { 0 };
system("shutdown -s -t 180");
again:
printf("电脑将在180秒内关机,如果输入我是猪,则取消关机\n");
scanf("%s", arr);
if (strcmp(arr, "我是猪") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
二分查找
在有序数组中查找具体的某个数字n
#include<stdio.h>
int main()
{
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
int k = 0;
scanf("%d", &k);
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
//替代int mid = (left+right)/2
//防止栈溢出
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到啦,下标为:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}