萌新菜鸟,大佬们多多包涵
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
控制语句用来实现对程序流程的选择、循环、转向和返回等。控制语句共有9条,包括12 个关键字,可以分为以下几类。
- 选择语句:if…else 和switch(包括case 和 default)。
- 循环语句:for、while和do…while。
- 转向语句:continue、break 和goto。
- 返回语句:return。
提示:以下是本篇文章正文内容,下面案例可供参考
一、选择语句(分支语句)
if语句
- c语言中用0表示假,非0表示真。
- “if”是c语言的关键字,“表达式”可以是任意合法的c语言表达式,包括关系表达式和逻辑表达式等,并且表达式两侧的括号不能省略。
- 语句体中可以是一条语句,也可以是c语言中任意合法的复合语句。
- 表达式的类型不限于关系表达式或者逻辑表达式,它也可以是任意的数值类型(整形、实型、字符型、等)
if语句的基本形式
简单的if语句有三种基本形式,他们分别是if单分支选择语句、if双分支选择语句和if多分支选择语句。
- 单分支选择语句
//1.单分支选择语句
if(表达式)
{
//语句体
}
执行过程如下:
【步骤1】 计算圆括号中表达式的值
【步骤2】若表达式的值为真(条件成立),则执行if语句;否则(条件不成立)不执行if语句 ,而去执行if语句后的下一个语句。
例:
int main()
{
int age=0;
scanf("%d",&age);
if(age<18) //如果age小于18 则打印未成年 否则什么都不输出,执行下条语句
printf("未成年\n"); //如果后面只跟一条语句 可以不带大括号
return 0;
}
如果if条件成立(表达式为真,既表达的逻辑值为1),就执行其中的语句体。
- 双分支选择语句
//2.双分支
if(表达式)
{
//语句体1
}
else
{
//语句体2
}
//表达式如果条件成立(表达式的逻辑值为1),就执行语句体1;
//“else”也是c语言的关键字,如果条件不成立(表达式的逻辑值为0),就执行语句体2。
执行过程如下:
【步骤1】计算表达式的值
【步骤2】若表达式取值为真(非0) (条件成立),执行语句体1;否则(条件不成立)执行语句体2。
【步骤3】无论表达式的值是真还是假,在执行语句体1或语句体2后都会执行if语句后面的语句
例:
int main()
{
int age=0;
scanf("%d",&age);
if(age<18) //如果age小于18 则打印未成年 否则打印成年
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
return 0;
}
如果if条件成立,就执行其中的语句体1;否则(else),就执行其中的语句体2。
- 多分支选择语句
//3.多分支
if(表达式1)
{
//语句体1
}
else if(表达式2)
{
//语句体2
}
else
{
//语句体3
}
【步骤1】计算表达式1的值
【步骤2】如果表达式1的取值为真(条件成立),则执行语句体1;否则(条件不成立)计算表达式2的取值
【步骤3】判断表达式2的取值,如果为真(条件成立),则执行语句体2,否则(条件不成立)执行语句体3
例:
int main()
{
int age=0;
scanf("%d",&age);
if(age<18)
{
printf("未成年\n");
}
else if(age>=18&&age<30) //并且
{
printf("青年\n");
}
else if(age>=300&&age<60)
{
printf("中年\n");
}
else if(age>=60&&age<90)
{
printf("老年\n");
}
else
{
printf("寿星\n");
}
return 0;
}
if语句的嵌套
if语句的嵌套是指在if或者else子句中又包含了一个或多个if语句。内层的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。形式一般如下:
if(表达式1)
{
if(表达式2)
{
//语句1
}
else
{
//语句2
}
}
else
{
if(表达式3)
{
//语句3
}
else
{
//语句4
}
}
小结
1.不要误认为双分支选择语句是两个语句,他们同属于一个if语句。else不能作为语句单独使用,它必须与if配对使用。
2.应注意if与else的配对关系。原则是else总是与它上面最近的、未配对的if配对。
3.为了避免在if与else配对时出错,建议使用{ }来限定内嵌if语句的范围。
例如下面形式:
if(a==1)
{
if(b==2)
printf("hehe\n");
}
else //else 和最近且未配对的if配对
printf("haha\n");
这里,大括号{ }限定了内嵌if语句的范围,因此else与第一个if配对
switch语句
switch语句形式如下:
switch(表达式)
{
case 常量表达式1:
语句1;
case 常量表达式2:
语句2;
case 常量表达式n:
语句n;
default:
语句n+1;
}
- switch是C语言的关键字,switch后面用{ }括起来的部分称为switch语句体。
- 紧跟在switch后一对圆括号中的表达式可以是整型表达式或字符型表达式等。表达式两边的一对括号不能省略。
- case也是关键字,与其后面的常量表达式合称case语句标号。常量表达式的类型必须与swicth后圆括号中的表达式类型相同,各case语句标号的值应该互不相同。
- default也是关键字,起标号的作用,代表所有case标号之外的那些标号。default标号可以出现在语句体中任何标号位置上。在switch语句体中也可以没有default标号。
- case语句标号后的语句1,语句2等,可以是一条语句,也可以是若干语句。
- 必要时,case语句标号后的语句可以省略不写。
- 在关键字case和常量表达式之间一定要有空格,例如“case 10:"不能写成“case10:”
switch语句的执行过程
当执行swicth语句时,首先计算紧跟其后一对括号中的表达式的值,然后在switch语句体内寻找与该值吻合的case标号。如果有与该值相等的标号,则执行该标号后开始的各语句,包括在其后的所有case和 default中的语句,直到switch语句体结束:如果没有与该值相等的标号,并且存在default标号,则从 default标号后的语句开始执行,直到switch语句体结束;如果没有与该 值相等的标号,同时又没有default标号,则跳过switch语句体,去执行switch语句之后的语句。
例 根据输入的数字给出相应的星期
int main()
{
int n = 0;
scanf("%d",&n);
switch(n) //必须是整形表达式
{
case 1: //整形常量表达式
{
printf("星期一\n");
}
case 2:
{
printf("星期二\n");
}
case 3:
{
printf("星期三\n");
}
case 4:
{
printf("星期四\n");
}
case 5:
{
printf("星期五\n");
}
case 6:
{
printf("星期六\n");
}
case 7:
{
printf("星期日\n");
}
default:
printf("输入错误\n");
}
}
当执行了以上程序,输入了一个5之后,接着执行switch语句,首先计算switch括号中的表达式:它的值为5。然后寻找与5吻合的case 5分支,开始执行其后的各语句。执行结果如下:
在输出了与5相关的星期五之后,又同时输出了与星期五毫不相关的星期六、星期日等,这显然不符合原意。为了改变这种多余输出的情况,switch语句常常需要与break语句配合使用。
在switch语句中使用break语句
break是c语言关键字,可以将break语句放在case标号之后的任意位置,通常是在case之后的语句最后加上break语句。
每当执行到break语句时。立刻跳出switch语句体。swtich语句通常总是和break语句联合使用,使得swtich语句真正起到分支的作用
现在用break语句修改上面例子,程序如下。
int main()
{
int n = 0;
scanf("%d",&n);
switch(n) //必须是整形表达式
{
case 1: //整形常量表达式
{
printf("星期一\n");
break;
}
case 2:
{
printf("星期二\n");
break;
}
case 3:
{
printf("星期三\n");
break;
}
case 4:
{
printf("星期四\n");
break;
}
case 5:
{
printf("星期五\n");
break;
}
case 6:
{
printf("星期六\n");
break;
}
case 7:
{
printf("星期日\n");
break;
}
default:
printf("输入错误\n");
}
return 0;
}
二、循环语句
for循环语句
for是C语言的关键字,其后的一对圆括号中通常含有三个表达式,各表达式之间用“;”隔开。这三个表达式可以是任意形式的表达式,通常主要用于for循环的控制。紧跟在for(…)之后的循环体语句在语法上要求是一条语句,若在循环体内需要多条语句,应该使用复合语句。
for循环语句的一般形式如下:
for(表达式1;表达式2;表达式3)//初始化;判断;调整
{
//循环体
}
for循环语句的执行过程如下:
【步骤1】计算表达式1的值。
【步骤2】计算表达式2的值。若值为真(非0),转步骤③执行;若值为假(0),转步骤⑤执行。
【步骤3】执行一次for 循环体。
【步骤4】计算表达式3的值,转回步骤②执行。
【步骤5】结束循环,执行for 循环之后的语句。
例:使用for循环在屏幕上打印1~10
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
小结
①“表达式1”可以省略,此时应在该for 语句之前给循环变量赋初值。其后的分号不能省略。
②“表达式2”可以省略,即不对循环条件进行判断,循环无终止地进行下去。需要在循环体中用break 等语句退出循环。
③“表达式3”可以省略,此时需要在循环体中让循环变量产生变化,以保证循环能够正常结束。
④“表达式1”和“表达式3”可以同时省略,这样① 和3 两种情况同时出现,需要使用相关语句保证循环结束。
⑤ 3个表达式都可以省略,但分号间隔符不能少。这样② 和④ 两种情况同时出现,需要使用相关语句保证循环结束。
while语句
while循环语句的一般形式如下:
while(表达式)
{
//循环体
}
//while后面一对圆括号中的表达式称为 循环条件。
//它可以是c语言中任意合法的表达式,由它来判断循环体是否执行。
//循环体可以是一条语句,也可以是由 { }括起来的多条语句。
while语句执行过程如下:
【步骤1】计算while后一对圆括号内表达式的值,当值非0时,执行【步骤2】,当值为0时,执行【步骤4】。
【步骤2】执行循环体中的语句。
【步骤3】转去执行【步骤1】。
【步骤4】结束循环,执行while循环之后的语句。
例:用while循环打印1-10的奇数
int main()
{
//1~10
int i = 1;//初始化
while (i <= 10)//判断
{
printf("%d ", i);
i+=2;//调整
}
return 0;
}
小结
在循环体中一定要有使循环结束的操作。以上循环体中“i+=2”使得每执行一次循环体变量都自增2,当表达式“i<=10”不成立时,循环结束。
do…while语句
do…while语句的一般形式如下:
do
{
//循环体
}while(表达式);
//do...while语句的表达式后面必须加分号。
执行过程如下:
【步骤1】执行do后的循环体。
【步骤2】计算while后一对圆括号内表达式的值,当值为非0时转去执行【步骤1】;当值为0时,执行【步骤3】。
【步骤3】结束循环,执行do…while循环之后的语句。
例:使用do while 在屏幕上输出1~10
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
小结
在do while循环体中,循环体至少要被执行1次,而在while循环中,循环体可能一次都不被执行。
三、 break语句和continue语句
break语句
break 语句只用在switch 语句或循环语句中,用在 switch 语句中,其作用是无条件跳出switch 语句,转去执行switch 后面的程序。而用在循环语句中,其作用是跳出本层循环,转去执行循环语句后面的程序。
continue语句
continue 语句只能用在循环结构中,其作用是结束本次循环,即不再执行循环体中continue 语句之后的语句,而是立即转入对循环条件的判断与执行。
对于while 和do…while 语句而言,程序会跳过循环体中continue 语句之后的语句,而立即执行 while后括号中的条件表达式;对于for 语句而言,程序会跳过循环体中continue 语句之后的语句,而执行“表达式3”,再执行“表达式2”。
完。。。