`循环语句
- 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; }