先看一个问题,计算分段函数
y= 3-x (x<=0) ;
2/x (x>0) .
求解的流程:
①输入x
②如果x<=0,则y=3-x,否则y=2/x
③输出y的值
显然程序的流程必须由x的值确定,这类程序结构被称为选择结构,也称为分支结构,分支的依据是根据某个变量或表达式的值做出判定,以决定执行哪些语句和跳过哪些语句。分支流程控制可以用if语句实现。
单分支if语句
形式为:
if(表达式)语句
执行单分支选择语句时,首先判断表达式的值,若表达式的值为非0,则执行后面的语句;
若表达式后面的值为0,则不执行后面的语句。
双分支if语句
结构形式:
if(表达式)语句1
else 语句2
当表达式的值为非0时,执行语句1;当表达式的值为0时,则执行语句2
多分支if语句
形式为:
if(表达式)语句1
else if(表达式2)语句2
else
……
if(表达式n)语句n
else语句(n+1)
执行多分支if语句时,如果表达式1 的值为非0,则执行语句1,后面的语句不再执行;(如此类推) 否则执行else后面的语句。
eg:程序
if (x<=-10)
y=2*x;
else
if(x<=0)
y=2+x;
else
if(x<=10)
y=x-2;
else
y=x/10;
if语句的嵌套
在上述三种if语句结构中,当if(表达式)或else后面的语句本身又是一个if语句结构时,就形成了if语句的嵌套结构。
if(表达式1)
if(表达式1-1)
语句1-1
else
语句1-2
else
if(表达式2-1)
语句2-1
else
语句2-2
对照前面的双分支选择结构,语句1的位置嵌套了一个双分支结构的if语句,语句2的位置也嵌套了一个双分支结构的if语句。
eg:
if(x<=0)
if(x<=-10) 当x<=-10
y=2*x;
else 当-10<x<=0
y=2+x;
else 当x>0走这条分支
if(x<=10) 当0<x<10
y=x-2;
else 当x>10
y=x/10;
在if语句的嵌套结构中不需要对称,只需根据需要决定嵌套的形式。
再写if语句的嵌套结构时,要注意else与if的配对规则:else与同一层最接近它,而又没有其他else语句与之相匹配的if语句配对。如果忽略了else与if配对,就会发生逻辑错误。
为避免这样的错误,可以加上花括号
eg:
if(x<=0)
{
if(x<=-10) 当x<=-10
y=2*x;
else 当-10<x<=0
y=2+x;
}
else
{ 当x>0走这条分支
if(x<=10) 当0<x<10
y=x-2;
else 当x>10
y=x/10;
}
程序实现:
根据两个数sex和tall分类,如果sex为“F”,当tall大于或等于150时,输出“A”,否则输出“a”;
若sex不为“F”,当tall大于或等于170时,输出“A”,否则输出“a”.
#include <stdio.h>
int main()
{
int tall;
char sex;
scanf("%c%d",&sex,&tall);
if(sex=='F')
{
if(tall>=150)
printf("A\n");
else
printf("a\n");
else
{
if(tall>=170)
printf("A\n");
else
printf("a\n");
return 0;
}
注意:输入字符和数字时,之间不要有空格,如F160