前言
以下均使用visual Stdio 2022集成开发环境,测试环境为windows 11 ,debug版本64位操作数,内容仅供初学者参考。
目录
读前须知
以下“表达式”是用来判断循环语句何时终止,在c语言中,默认0为假,非0为真,条件语句(a == 1)为真,则这个条件语句可视作数字1,如果为假,则这个条件语句可视为0。
break:跳出循环,或者跳出switch。
continue:结束本次循环,进行下一次判断是否循环
一、循环语句
Ⅰ、while型
while(表达式){
//循环体
}
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
while (1) {
printf("我是帅哥\n");
}
return 0;
}
可以发现程序一直打印“我是帅哥” ,因为设置的表达式恒为真(非0),后面便不做解释。
while循环输入的特殊操作————<多组输入简化>
Ⅱ、do...while型
do{
//循环体
}while(表达式);
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
do {
printf("你也是帅哥\n");
}while (1);
return 0;
}
do...while型与while型的区别在于do...while是先执行一次循环体再判断终止条件,
而whiile型则是先判断终止条件。我们可以根据场合自行切换。
Ⅲ、for型
for(表达式1;表达式2;表达式3){
//循环体
}
表达式1:一般用来初始化变量,或者修改变量(表达式只生效一次)初始化的变量作用域只在循环体内生效。
表达式2:用来判断结束循环的标志(每次循环都生效,目的是判断什么时候结束循环) 。
表达式3:在一次循环结束后分配资源(每次循环都生效)执行顺序:在每一次循环体执行完之后。
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}
return 0;
}
上述代码也等价于下述代码:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { { int i = 0; while (i < 10){ printf("%d ", i); i = i + 1; } } return 0; }
while外边加上一层大括号是为了模拟 i 变量的作用域,因为在for循环中 i 的作用域只在循环体内生效。
二、分支语句
Ⅰ、if型 与 if...else型
if型:
if(){
//语句
}
if...else型:
if(表达式){
//语句
}else{
//语句
}
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a = 1;
if (a == 1) {
printf("a 等于 1");
}
else {
printf("a 不等于 1");
}
return 0;
}
如果表达式为真则执行 if 的代码块,如果为假则执行 else 的代码块。程序中 if 代码块与 else 代码块只执行一个。
注:在大括号没标清楚的时候,else总是与上一个if对应
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a = 3;
int b = 4;
if (a == 3)
if (b == 1) {
printf("哈哈");
}
else {
printf("嘻嘻");
}
return 0;
}
可以看到else明明是对齐了第一个if,然而输出并不理想。
因为else只会与前面一个有效if对应,这里的else与第二个if匹配。
但是如果给第一个if加上大括号限制if的有效范围就不会发生这种事了(就不举例子了)。
综上:
①虽然有些编译器会自动帮我们缩进代码,但是也不能光靠缩进判断语句匹配。也要结合语句上下文。
②养成写一个if 就加个大括号的好习惯!
Ⅱ 、else if型
if(表达式){
//语句
}
else if(表达式){
//语句
}
else if(表达式){
//语句
}
else if(表达式){
//语句
}...
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a = 0;
scanf("%d", &a);
if (a < 18) {
printf("小屁孩");
}
else if (a >= 18 && a < 30) {
printf("青年");
}
else if (a >= 30 && a < 60) {
printf("壮年");
}
else {
printf("老年");
}
return 0;
}
Ⅲ、switch型
switch(变量){
case 具体数值: //语句
case 具体数值: //语句
case 具体数值: //语句
case 具体数值: //语句
case 具体数值: //语句
...
default: //语句
}
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a = 0;
scanf("%d", &a);
switch (a) {
case 1: printf("第1个case"); break;
case 2: printf("第2个case"); break;
case 3: printf("第3个case"); break;
case 4: printf("第4个case"); break;
case 5: printf("第5个case"); break;
default:printf("没有对应的case");
}
return 0;
}
switch原理:在所有的case中寻找对应的数值,如果找到,则跳到对应的case继续往下执行,如果没找到,则跳到default语句往下执行。
其中break是为了跳出switch,不执行下面的语句
switch型的出现是为了简化代码,因为如果出现100条分支则elseif型代码量庞大,所以使用switch型可以让代码显得不是那么笨拙。