while
入口条件循环
int main(void) {
int a = 0;
while (a <= 5) {
printf("%d\n", a);
a++;
}
return 0;
}
结果
0
1
2
3
4
5
条件的意义
真:非0;
假:0;
int main(void) {
int a = 0;
while (a <= 5) {
printf("%d\n", a <= 5);
a++;
}
printf("%d\n", a <= 5);
return 0;
}

&& || !
真&&真=真
假&&真=假
真&&假=假
假&&假=假
真||真=真
真||假=真
假||真=真
假||假=假
!真=假
!假=真
注意点:
- &&优先级>||
- && 遇到0就不再判断了
- ||遇到1就不再判断了
int main(void) {
int a = 0, b = 2;
(a = 2 > 1) || (b ++);
printf("%d\n%d", a,b); //a:1,b:2
return 0;
}
循环控制变量的三要素
循环控制变量就是while里面的表达式。
1.循环控制变量必须要有初始值;
2.真==非0,假==0;true和false
3.循环控制变量的值要有规律的变化。
死循环
条件一直为true或者非0
#include <stdio.h>
#include <float.h>
#include <stdlib.h>
#include <stdbool.h>
int main(void) {
int a = 0;
while (true) { //这里这个true是stdbool里面的,值=1
printf("%d\n", a); //a:1,b:2
a++;
}
return 0;
}

for
入口条件循环

int main(void) {
int a = 0;
//java的快捷键fori生成
for (int t = 0; t < 6; t++) {
printf("%d ", t); //0 1 2 3 4 5
}
printf("\n");
//i提出来
int i;
for (i = 0; i < 6; i++) {
printf("%d ", i);//0 1 2 3 4 5
}
printf("\n");
int m = 1;
//语句这样也可以 这个地方可以写其他表达式,甚至写个函数,此处只执行一次
for (printf("这个地方可以写其他表达式,甚至写个函数,此处只执行一次\n"); m < 6; m++) {
printf("%d ", m);//1 2 3 4 5
}
printf("\n");
//当j初始化之后,第一个地方可以不写
int j = 0;
for (; j < 6; j++) {
printf("%d ", j);//0 1 2 3 4 5
}
printf("\n");
//第二个啥也不写,死循环
// for (j=0; ; j++) {
// printf("---%d", i);
// }
// printf("\n");
//第三个啥也不写
for (int j = 0; j < 6;) {
printf("%d ", i);
j++;//挪到里面也行
}
printf("\n");
//可以进行多条赋值语句,直接逗号隔开
int e = 1, f = 1;
for (; e < 2, f < 4; e++, f++) {
printf("%d,%d|", e, f); //1,1|2,2|3,3|
}
//死循环,跟while(1)一样
for(;;){
}
return 0;
}
循环嵌套
int main(void) {
int a = 0;
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
count++;
}
}
printf("一共循环的次数%d\n", count);//4*3=12
return 0;
}
int main(void) {
int a = 0;
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
count++;
}
}
printf("一共循环的次数%d\n", count);//4*3=12
int i = 0;
int j = 0;
int count2 = 0;
while (i < 1) {
while (j < 3) {
count2++;
j++;
}
i++;
}
//结果是3(这样写结果就是j的循环次数,j循环完成,i=1时已经循环不到里面了
// 嵌套要把j=0放到while (j < 3)前面
printf("一共循环的次数%d\n", count2);
i = 0;
j = 0;
int count3 = 0;
while (i < 4) {
int j = 0;
while (j < 3) {
count3++;
j++;
}
i++;
}
printf("一共循环的次数%d\n", count3);//结果是4*3=12,
return 0;
}
do while
退出条件循环
int main(void) {
//do while先走代码块,再走条件
int i = 5;
do {
printf("%d", i);//打印5
i++;
} while (i < 5);
//while先走条件,再走代码块
i = 5;
while (i < 5) {
printf("%d", i); //不打印
i++;
}
return 0;
}
break 和 continue
break
- 跳出循环。
- 如果是嵌套循环,是跳出所在的循环。
*循环之外不可以写break。
int main(void) {
//do while先走代码块,再走条件
for (int i = 0; i < 6; ++i) {
printf("%d\n", i);
break;
//这行代码在break之后,所以不执行了
printf("这行代码在break之后,所以不执行了");
}
//嵌套循环
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
printf("haha %d,%d\n ", i, j);
break;
}
}
return 0;
}

continue
执行下一次循环
int main(void) {
for (int i = 0; i < 6; ++i) {
printf("前%d ",i);
continue;
printf("后\n");
}
return 0;
}
执行结果

打印奇偶数
int main(void) {
//打印偶数
for (int i = 0; i < 6; ++i) {
if (i % 2 == 0) {
printf("%d", i);
continue;
}
}
printf("\n");
//打印奇数
for (int i = 0; i < 6; ++i) {
if (i % 2 == 0) {
continue;
}
printf("%d", i);
}
return 0;
}
逗号表达式
逗号表达式,会把里面的表达式都执行一遍,然后最后的结果是最右边这个数据
int main(void) {
//逗号表达式,会把里面的表达式都执行一遍,然后最后的结果是最右边这个数据
int a = 2;
int b = (a++, 2, 3, 4);
printf("a=%d,b=%d", a,b); //运行结果是 a=3,b=4
return 0;
}
逗号表达式比赋值表达式的优先级低。
int main(void) {
//逗号表达式比赋值表达式的优先级低。
int a, b, c, d;
c = a = 1, 6, b = a; //这个地方先算c=a=1,再算6,然后b=a
d = (a = 1, 6, b = a);//这个是先算a=1,再算6,然后b=a,最后把最右边的表达式b赋值给d
printf("%d,%d",c,d);//结果虽然都是1,但是意义不一样哦
return 0;
}
逗号表达式错误的表达
int c= ,就不能用逗号表达式, 得加括号

网友评论