1. 循环结构
C语言使用循环结构语句来完成需要反复执行的逻辑 提供的关键字:
for
while
do - while
1.1 1.1 for 循环
1)语法格式:
for(表达式1; 表达式2; 表达式3){
语句1;
语句2;
…
}
执行流程:
第一步,首先执行表达式1
第二步,执行表达式2
如果表达式2运算结果为真 ,那么就去执行
语句1
语句2
…
如果表达式2运算结果为假,整个for循环结束 (跳到 }后去执行)
第三步,如果表达式2运算结果为真,会执行
语句1;
语句2;
…
以上语句执行完毕后,再执行表达式3
第四步, 执行完表达式3 ,重复执行第二步内容 第三步,
直到表达式2 为假 退出for循环
2) 使用形式
形式1:
int i = 0;
for(i=0; i<5; i++)
{
printf(“i = %d \n”, i);
}
形式2:
int i = 0;
for(; i<5; i++) //for之前i中是一个合适的值 可以省略表达式1
{
printf(“i = %d \n”, i);
}
形式3:
int m = 0;
for(; m<5; ){
printf("m = %d\n", m);
m++;
}
形式4:
for(;;){ //死循环
printf("周末可以休息了...\n");
}
注意:按ctrl + c 强制退出程序
break: 关键字
退出for循环
int n = 0;
for(;;){ //死循环
printf("周末可以休息了...\n");
n++;
if(n>5){
break;
}
}
形式5:
/*形式5*/
for(m=0, n=0; m<5 && n<5; m++, n +=2){
printf("m=%d n=%d\n", m, n);
}
形式6:
for(int k=0; k<5; k++)//注意k变量的定义位置
//c89标准 不允许 gcc for.c -std=c89编译出错
//c99标准 允许 gcc for.c 默认c99编译 正常通过
{
printf("k=%d\n", k);
}
形式6代码不具有良好的可移植性
建议大家写代码时 不要使用该种形式
形式7:
for(m=0; m<5; m++)
{
if(3==m){
continue;//结束本次循环 继续开始下一次循环
}
printf("m = %d \n", m);
}
break: 打断 / 退出for循环
continue: 继续
程序错误分两大类
1)语法错误
gcc xxx.c -o xxx 报出来的错误
解决该类错误的方式:
a)只关注只解决第一个错误
b)根据第一个错误信息 提示的出错 仔细检查所在行是否有语法错误
c)如果所在行无语法错误的,往当前行以前的代码中去找错误
2)逻辑错误(BUG)
./a.out 达不到想要的效果 甚至是程序崩溃,这种错误称为逻辑错误
1.2 while循环
while,在…时候
语法格式:
while(循环控制表达式){
语句1;
语句2;
…
}
执行流程:
1)循环控制表达式
如果该表达式运算结果为真,那么就执行语句1 语句2 …
如果该表达式运算结果为假,while循环结束,跳到 } 后去执行
2)语句1 语句2 … 执行完毕后,接着执行步骤1)
特殊情况
1)while循环语句只有一条时 ,建议还是{ }
while(i++ <5)
printf("%d\n", i);
2) 死循环
for(;😉
while(1)
1.3 do while循环
语法格式:
do{
语句1;
语句2;
...
}while(循环控制表达式); //切记别把 ;丢掉
do: 执行
语义:
1)执行语句1 语句2 ...
2) 执行循环控制表达式
计算结果如果为真 ,再去执行语句1 语句2 ...
执行完毕后再去计算循环控制表达式的值
如果还为真 重复上面动作
如果为假, 循环立即结束,调整到后续代码执行
和while循环的区别在于:先执行一次循环语句,再去判断条件
do {。。。} while最少会被执行到一次
例如:
do{
printf("hello\n");
}while(0);
结果: 打印输出一次hello
2、空语句
1)语法格式: 仅仅包含了一个 ;
例如:
int a = 0;
int b = 10;
; //空语句 起到了延时的作用,因为CPU执行该空语句是需要耗费时间的
2) 应用场景: 延时
for(;😉 ;
while(1) ; //死循环 CPU全速空转
int i = 100000;
for(; i>=0; i--) ;//空循环100000次
//每次CPU都会消耗点时间 ,达到延时的效果
//不精确的延时
-
空语句误用
for(i=0; i<5; i++);
printf("%d\n", i);while(i++<10);
printf(“i=%d\n”,i);
3、循环内部常用的三个关键字
1)continue: 结束本次循环,开始下次循环
2) break:结束循环 结束所在的那层循环
3) goto:跳转到标号指定的位置去执行
了解即可 绝对多少企业禁用goto
4、关于scanf的使用
scanf(“占位符”, 变量的地址)
功能: 扫描键盘缓冲区 取出想要的按键值 把键值存储到变量对应的内存中去
1)连续输入多个数字,默认以空白符(空格 TAB 换行)分割数据项
scanf("%d%d%d", &b, &c, &d);
输入数据的形式: 1 (多个空格) 2 (TAB/回车键) 3
2)特定格式接收
scanf("%d,%d,%d", &b, &c, &d);
输入数据的形式 1,2,3