C语言-选择结构
在C语言中,一共有三种程序结构:
顺序结构、选择结构(分支结构)和循环结构。
C语言提供2种类型的选择语句:if语句和switch语句。
C语言由一个分号;隔开的就是一条语句。
在C语言中 0表示假,非0表示真。
if语句可以是任何语句,也可以是有若干语句组成的一个语句组,在这种情况下,这组语句需要用花括号“{}”括起来。
if语句
单分支if选择语句
格式:
if(表达式)
语句;
功能:首先计算"表达式"的值,如果表达式的值为真,则执行"语句",否则不执行,而是转去执行本语句后面的语句。
例:判断一个数是否是奇数,并输出1-100之间的奇数
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 100)
{
if (i % 2 == 1) //if(i%2 != 0)
printf("%d\n", i);
i++;
}
return 0;
}
双分支if_else语句
格式:
if(表达式)
语句块1;
else
语句块2;
功能:首先计算"表达式"的值,如果表达式的值为真,语句块1,否则执行else后面的语句块2。
例:判断学生分数及格
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
if (i >= 60)
printf("及格");
else
printf("不及格");
return 0;
}
注意点:
容易出错的if_else语句
//知识点:else和它离的最近的未匹配的if进行匹配。,如下代码不返回打印值。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
//输出值:空
//原因是代码中else语句跟上面if(b==2)匹配,变成if (a == 1)的嵌套if_else语句
//所以当a==为假时,直接return 0; 无返回值。
//等价于下面这样代码书写,所以当判断a==1,为假,不执行嵌套if语句。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
//为了便于查看建议用{}给括起来,如下:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
printf("haha\n");
return 0;
}
//这样输出的值 haha
多分支if_else选择语句
格式:
if(表达式1)
语句块1;
else if(表达式2)
语句块2;
else if(表达式3)
语句块3;
else if(表达式4)
语句块4;
else
语句块5;
例:年龄分段
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("少年\n");
}
else if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("中年\n");
}
else if (age >= 50 && age < 80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
return 0;
}
switch语句
多分支开关语句switch
格式:
switch(整型表达式)
{
case 整型常量表达式1: 语句块1;
break;
case 整型常量表达式2: 语句块2;
break;
...
case 整型常量表达式n: 语句块n;
break;
default: 语句块n+1;
}
首先,计算switch后圆括号内的表达式的值,然后,再这个值逐个与各xase的常量表达式i的值进行比较。当找到与其相等(匹配)的case时,就执行该case中的语句块,如果再语句块中有break语句,便退出该switch语句。如果没有break语句,则执行完某个语句块后,连续执行其后的语句块,直到遇到另外一个break语句,结束switch的执行,或者一直执行到最后的语句块,然后,结束switch语句的执行。
例:判断星期
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
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("输入错误");
}
return 0;
}
例:容易出错的switch语句
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch(n)
{
case 1: m++;
case 2: n++;
case 3:
switch (n)
{ //switch允许嵌套使用
case 1: n++;
case 2: m++; n++; break;
}
case 4:m++;
break;
default:
break;
}
printf("m=%d, n=%d\n", m, n);
return 0;
}
//运行结果:m=5, n=3
//因为如果再语句块中有break语句,便退出该switch语句。
//如果没有break语句,则执行完某个语句块后,连续执行其后的语句块。