选择结构:if语句和switch语句
if语句的三种形式
1.
if(表达式)语句1;
// 单独的一个if语句
2.
if(表达式1)语句1;
else 语句2;
// if 和else组合
3.
if(表达式1)语句1;
else if(表达式2)语句2;
else if (表达式3)语句3;
....
....
....
else 语句n;
// if和else嵌套
■.
if和else默认只控制在它之后离它最近的一条语句
如果一个if或者else要控制多条语句,那么这些多条语句需要复合语句{}括起来,
整体作为一条语句来控制。
■.
else总是与在它之前第一个没有配对的if配对,并且一个else只能和一个if配对。
else不能单独存在。
___________________#
switch语句
一般形式:
switch(判断条件)
{
case 常量1:语句1;
case 常量2:语句2;
case 常量3;语句3;
......
case 常量n:语句n;
default: 语句n+1;
}
■.
switch......case 多分支结构
■.
判断switch之后括号中表达式的值,
如果等于哪个case之后的值就执行那个case之后的语句(包括default语句)。
(default语句可与case语句交换位置也就是改变他们的先后位置)
(只是可能会影响操作结果而已)
■.
case之后的条件(括号里的)只能是整型常量表达式,
不能是小数、变量,也不能造成重复。
■.
break跳转语句,
用于跳出switch结构或者循环结构
例如 case 常量3 :语句3;
break;
■.
语句可以为空
例如 case10:
case 9:printf("A\n");
break;
(“合并”,即两个case共用语句)
■.
dafault语句可以省略,不影响switch结构操作运行。
______________________________________#
循环结构
for循环
while循环
do__whlie循环
for循环
for(表达式1:表达式2:表达式3)
{
循环体
}
■.
表达式1:条件初始化
表达式2:循环继续的条件
表达式3:改变循环条件里的变量值
■.
分号必不可少,有且只有两个。
■.
for(;;)
类似这样的可以进行无数次循环的,称为死循环或无限循环
(3个表达式相互独立,可各自为空)
例如
for (int i=0;;i++)
{
printf("%d\n", i++);
}
输出0、2、4、6、8、10......................
______________________________#
while循环
while(表达式)
{
循环体
}
■.
while之后的括号里必须给定条件,不能为空。
■.
表达式非0为真,为死循环
例1
int i=0;
while(1)
{
printf("%d\n",i++);
}
例二
int i = 0;
for (;;)
{
printf("%d\n", i++);
if (i >= 10) // if判断条件执行break跳出循环
break;
}
■.
例如:给学生成绩打相应的等级
int score = 0;
int j = 0;
while (j <5) //重复判断5个同学的成绩等级
{
scanf("%d", &score);
// if (score<0 || score>100)
break;
// if (score<0 || score>100)
{
printf("请重新输入正确数据\n");
continue;
}
switch (score / 10)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
case 6:
printf("C\n");
break;
default:
printf("D\n");
}
j++;
}
__________#
do__while循环
do
{
循环体;
}while(表达式);
■.
while(表达式);
分号是结构的一部分,不可少。
■.
do__while循环:先执行循环体,在判断条件。(至少会执行一次循环体)
for循环和while循环:先判断条件,若为真则进入循环,不然不执行循环。
________________________________________________________#
循环的嵌套
循环中有循环(套娃)
执行规则:外层循环执行一轮,
内层循环需要整个循环完毕,
如此循环下去直至满足特定条件退出循环。
例如:
输出下面的图案
******
****** // 可以用for的嵌套循环结构
******
for (int i=0;i<3;i++) // 外层循环决定输出多少行
{
for(int j=0;j<6;j++) // 内层循环决定每一行输出多少个*号
{
printf("*");
}
printf("\n"); // 内层循环整个执行完毕后换行
}
_________________________________________________#
跳转语句
break语句
continue语句
goto语句
■.
break语句:
跳出并结束整个循环,循环不再继续。
(跳出一个离它最近的循环或switch结构)
只适用于switch结构和循环结构。
(若if_else条件判断结构在上述结构的循环体中,则可以在if_else循环体内加入break语句进行使用)
例如
输出一下图案:
******
******
for (int i = 0; i<3; i++)
{
for (int j = 0; j < 6;j++)
{
if (i == 1)
break; // 这里若用continue,在此循环结构中的输出效果相同
else
printf("*");
}
printf("\n");
}
■.
continue语句:
跳出本次循环,继续执行下次循环。
(即不再执行本次循环中continue语句后的语句)
只适用于循环语句
continue语句在if__else条件判断结构和switch多分支结构中也可以使用
(前提是两者都在循环结构的循环体内)
■.
goto语句:(跳转到指定的位置)
标记:
.......
goto 标记; // 执行goto语句后,会跳转到标记的指定位置
goto 标记; // 先后顺序不同,程序运行时操作效果会不同
......
标记:
■.
goto语句可以方便有效的跳出多层循环
例一
for (int i = 0;; i++)
{
printf("%d\n", i++);
if (i >= 10)goto end; // 跳出该程序所存在的一层循环
}
end:
// 输出0、2、4、6、8、10
例二
for (int i = 0; i<3; i++)
{
for (int j = 0; j < 6; j++)
{
if (i == 1)
goto end; // 跳出了两层循环
else
printf("*");
}
printf("\n");
}
end:
// 输出一行******图案
例三
int i = 0;
for (;;)
{
while (1)
{
do
{
printf("%d\n", i++);
if (i >= 10)goto end; // 可以方便有效的跳出多层死循环
} while (1);
}
}
end:
// 输出结果 0、1、2、3、4、5、6、7、8、9
■.
goto语句一般用于多层嵌套循环结构的跳出
(且谨慎使用为好)
_________________________________#