目录
一、分支
1、if语句
1)基本形式
if(...)
{语句}
2)功能介绍
实现判断功能,当括号内的表达式的值为真(非零的整型、浮点型、布尔型),执行 { } 内的语句(若为单个语句,可以不加大括号,但一般加上,若为两个及以上的语句,即复合语句,则必须加上),当括号内的表达式的值为假(零),不执行 { } 内的语句。
3) else子句
为了实现分支,可以使用else子句,它的基本形式:
if(...)
{语句}
else
{语句}
同样,else后面的语句若为单个语句,可以不加大括号,但一般加上,若为两个及以上的语句,即复合语句,则必须加上。当括号内的逻辑表达式的值为假(零),就执行else子句。
else子句后面还可以再嵌套if-else结构,实现分支后再分支:
if(...)
{语句}
else if(...)
{语句}
else if(...)
{语句}
else
{语句}
...
以上结构称为锯齿状结构,它的好处是:使程序的逻辑更清晰,提高了程序的可读性。此外,还有一种结构:
if(...) 语句;
else if(...) 语句;
else if(...) 语句;
else if(...) 语句;
...
这种结构与锯齿状结构等价,当大括号内的语句很长时,推荐使用锯齿状结构,反之使用以上结构。
4) else子句与if的配对
只需记住这句话:else子句总是与它上面最近的if配对。
观察以下结构:
if (x == 0)
if (y == 0) error () ;
else
{
z = X + Y;
f(&z);
{
第二行的if语句与第三行的else子句配对。编者在此故意将第一行与第三行对齐,意在误导读者将第一行的if与第三行的else配对。
如果要把第一行的 if 与第三行的 else 配对,只需多加一个括号:
if (x == 0)
{
if (y == 0) error () ;
}
else
{
z = X + Y;
f(&z);
{
另外,else子句不能单独存在,必须有if语句与它配对。if语句可以单独使用。
5)应用举例
if(x > 0)
{
printf("%d是正数“, x);
}
else if(x == 0)
{
printf("%d是零“, x);
}
else
{
printf("%d是负数“, x);
}
2、switch语句
1)基本形式
switch( )
{
case 1:语句;break;
case 2:语句;break;
case 3:语句;break;
...
default :语句;break;
}
2)功能介绍
switch语句用来实现多分支。switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 if...else 改成更易⽤、可读性更好的形式。它实现多分支的原理是:先判断括号里的变量a(只能是整数类型(如 int、long)、字符类型(char)或者枚举类型,而不能是浮点类型(float)、双精度浮点类型(double)或者布尔类型(boolean))的值,若为1,则执行case 1后的语句,若为2,则执行case 2后的语句,以此类推。注意,case和后边的数字之间必须有空格,语句也可以是复合语句。若语句后没有break;则会一直执行后面的语句,直到最后一个case语句或default语句。所以,一般在每个case语句末尾加上break;
switch (a)
{
case 1: b = 30;
case 2: b = 20;
case 3: b = 16;
default: b = 0;
}
//若 a = 1 ,则 b = 0 ;
二、循环
1、for循环
1)基本形式
for(语句1:语句2:语句3)
{循环体}
for循环是最常用的循环语句,原因是:for循环将控制循环的关键语句集中在一个括号内,便于管理和维护。接下来介绍这些语句的作用:
语句1的作用是给循环变量赋初值。
语句2的作用是给循环设置条件。
语句3是改变循环变量的值。
例如:
int i;
for(i = 1 :i <= 2:i++)
{循环体}
先执行 i = 1 ,再判断 i 是否小于等于 2 ,显然 1 <= 2 为真 ,执行循环体 , 循环体结束后 , 执行 i++ , 此时 i = 2 ,再判断 i 是否小于等于 2 ,显然 2 <= 2 为真 ,执行循环体 , 循环体结束后 , 执行 i++ , 此时 i = 3 ,再判断 i 是否小于等于 2 ,显然 3 <= 2 为假 ,退出循环 ,不再执行循环体。
for循环的执行流程一般为:语句1---->语句2---->{循环体}---->语句3---->语句2---->{循环体}---->语句3---->语句2 ... 直到语句2判断为假,退出循环。语句1只执行一次,之后不再执行。
语句1、语句2、语句3都可以省略,可以写成 for( ;语句2;语句3)、for(语句1 ;;语句3)... 甚至可以写成for( ;;)但明显没有意义。要注意,虽然语句1、语句2、语句3都可以省略,但分号不能省略。
语句1、语句2、语句3可以是”多条语句“,例如 for(int i = 1,int j = 1 ;i <= 10 ; i++ , j++) 是合法的。
语句1不仅有给循环变量赋初值的功能,还能当场定义循环变量并赋初值,如 for(int i = 1;语句2 ;语句3)。
可以看出,for循环非常灵活。
2、while循环
1)基本形式
while(...)
{循环体}
2)功能介绍
先判断括号内的语句是否为真,如果为真,就执行循环体,否则退出循环。如
while(1)
{循环体}
//1 恒为真,所以会一直执行循环体,称为死循环。
注意:while()括号内是循环继续的条件,而不是循环结束的条件。
3) 技巧
while(k--)
{
//循环体执行 k 次
}
while(--k)
{
//循环体执行 k - 1 次
}
3、do-while循环
1)基本形式
do
{循环体}
while(...);
2)功能介绍
先执行一次循环体,再判断括号内的语句是否为真(括号后要有分号),如果为真,就执行循环体,否则退出循环。这种循环一般用在已知至少要执行一次循环体的情况,如判断一个数是几位数(任何数至少有一位数)。
4、循环的嵌套
for循环、while循环、do-while循环三者可以相互嵌套。如:
int arrey[3][3];
for( int i = 0 ; i <= 2 ; i++)
{
for( int j = 0 ; j <= 2 ; j++)//常用这种形式对数组初始化
{
scanf("%d",&a[i][j]);
}
}
应注意,在退出内循环后,若再次进入内循环,则仍然要执行语句1,即循环变量赋初值的操作。
for循环、while循环、do-while循环三者还可以多次嵌套,如:
for( int i = 0 ; i <= 2 ; i++)
{
for( int j = 0 ; j <= 2 ; j++)
{
for( int k = 0 ; k <= 2 ; k++)
{
循环体;//连续嵌套了三个for循环。
}
}
}
5、break语句和continue语句
1)基本形式
break;
continue;
2)功能介绍
break语句:彻底结束循环
continue语句:跳过本次循环
以for循环为例:
for( int i = 0 ; i <= 5 ; i++)
{
if(i == 3)
break;
printf("%d ", i );
}
//运行结果: 0 1 2
for( int i = 0 ; i <= 5 ; i++)
{
if(i == 3)
continue;
printf("%d ", i );
}
//运行结果: 0 1 2 4 5