目录
(三)if...else if...else if ...else
一 分支语句
(一)if
- 表达式为真才会执行语句1
if(表达式)
{
语句1;
}
(二)if……else
-
如果项目的只有两种结果且不会同时出现,选择if……else
-
if……else的判断逻辑与条件运算符(?:)类似
- 需要注意if和else的配对问题 ,else总是和它前面第一个没有配对过的if配对,并且一个else只能和一个if配对
(三)if...else if...else if ...else
- 如果一个项目有多个结果且不同时出现,选择if...else if...else if ...else
- 只有前面的条件不满足才会判断后面的条件,如果前面的条件满足,后面的条件不管真假都不会执行
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else // 可省略
{
语句n;
}
(四) switch多分支结构
-
case之后的条件值只能是常量或者常量表达式,且不能重复,取值应该是确定的唯一的
switch (x) // 开关语句
{
case 1:
printf("打开了房间1的开关,进入了房间1,捡到了一个武器。\n");
break;
// 所有case之后的值都不满足,则执行default之后的语句
default:
printf("输入错误,只有5个房间,不存在房间%d。\n", x);
break; // 用于跳出switch结构和循环结构
}
char ch = 0;
ch = getchar();
switch(ch)
{
case 'w'||'W': // 这里不会输出,因为||是逻辑运算,结果为一个不等于'w'的数值,不能对应匹配
printf("向上移动");
break;
case 'w':
printf("向上移动");
break;
}
二 循环语句
-
for循环和while循环是当型循环:先判断循环条件是否满足,如果满足再执行循环体
-
do while循环是一种直到型循环:先执行一次循环体,再判断条件是否满足,如果满足继续执行循环体,不管条件满足与否,循环体至少会被执行一次
(一) for循环
- for( 初始语句; 循环条件 ; 步进条件){循环语句}
- 初始语句:只在循环开始时执行一次(可以提前初始化变量)
- 循环条件:每次循环都要执行。如果循环条件为真,进入循环体;如果为假,退出循环
- 步进条件:每次循环结束的时候 要执行的语句
- 如果循环的次数是确定的,建议选择for
int n = 1;
for (; n <= 10; n++) // 循环输出数字1~10
{
printf("%d\n", n);
}
int n = 1;
for (;;) // 是死循环
{
printf("%d\n", n++); // 如果for省略步进条件必须在循环语句中实现步进动作
if (n > 10)
{
return 0; // 必须在循环语句中实现 退出循环的条件
}
}
(二) while循环
- while没有初始化语句,用户提前初始化好
- while没有步进语句,用户必须在循环语句中写好步进语句
int i = 1; // 提前初始化
while (i <= 100) // whlie之后的条件必须要有
{
printf("%d\n", i);
i++; // 步进条件
}
-
如果循环的次数不确定,知道退出的条件,建议选择while
(三) do while 循环
int j = 1;
do
{
printf("%d\n", j);
j++;
} while (j <= 100);
(四) 循环的嵌套
/*输出一下图形:
******
******
******
******
******
******
*/
for (int i = 0; i < 6; i++) // 双重循环嵌套
{
for (int i = 0; i < 6; i++)
{
putchar('*'); // 输出一个*
}
putchar('\n');
}
/*输出一下图形:
******
******
******
******
******
******
*/
for (int i = 0; i < 6; i++)
{
for (int j = i; j>0; j--)
{
putchar(' ');
for (int k = 0; k < 6; k++)
putchar('*'); // 输出一个*
putchar('\n');
}
}
/*输出一下图形:
*
**
***
****
*****
******
*/
for (int i = 0; i < 6; i++)
{
for (int j = i; j>0; j--)
putchar(' ');
for (int k = 0; k <= i; k++)
putchar('*'); // 输出一个*
putchar('\n');
}
// 循环的嵌套,外层循环执行一次,内层循环需要整个都执行完成,才会进入下次外层循环
(五)作业
- 重复输入1~7的数值判断 星期几,注意输入0,就结束程序,如果是0或1~7以外的数,请提示“请重新输入有效数值”。
#include<stdio.h>
int main(int argc,char* argv[])
{
int num=0;
while(1)
{
printf("请输入数值:");
scanf("%d",&num);
if(num==0)
return;
else if(num<0||num>7)
printf("请重新输入有效数值!");
switch(num)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期天");
break;
}
putchar('\n');
}
}
三 跳转语句
(一) break
// break用于跳出整个循环结构或switch多分支结构(if中不能使用)
int n = 1;
for (;;)
{
printf("%d\n", n++);
if (n > 10)
break; // break跳出/结束整个循环
}
(二) continue
// continue用于跳出一次循环结构的执行
int i = 0;
do // 输出1~100之间的所有偶数
{
if (i > 100)
break;
i++;
if (i % 2 != 0)
continue; // 跳出本次循环,本次循环之后的语句不会被执行,继续下次循环
printf("%d\n", i);
} while (1);
(三) goto语句
-
在程序语言中设置一个标记,可以使用goto语句跳转到标记的位置
int i = 1;
I: // 标记
printf("%d\n", i);
i++;
if (i<=10)
goto I; // 跳转到标记I所在的位置
// goto语句会打破结构化程序的顺序执行的规则,时程序的结构混乱,如果跳转不合理可能引起死循环,所以不建议使用
// 使用goto语句跳出循环
for (int i = 0; ; i++)
{
printf("%d\n", i);
if (i > 100)
goto end;
}
end: