分支结构 if和switch-case
来源:互联网 发布:知乎怎么看题主 编辑:程序博客网 时间:2024/05/25 20:01
int main(int argc,const char * argv[])
{
int myAge =19;
int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
max=a;
if (max<b) {
max=b;
}
printf("max=%d",max);
return 0;
}
本例程序中,输入两个数a、b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。
第二种形式为: if-else
if(表达式)
语句1;
else
语句2;
其语义是:如果表达式的值为真,则执行语句1 ,否则执行语句2 。其执行过程可表示为下图。
int main(int argc, const char * argv[])
{
int myAge =19;
printf("请输入你的年龄:\n");
scanf("%d", &myAge);
if (myAge >= 18) {
printf("成年了\n");
} else {
printf("未成年\n");
}
return 0;
}
输入一个个整数,判断是否比18大,如果大于18则输出成年了,如果小于18则输出未成年。
第三种形式为if-else-if形式
前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
…
else if(表达式m)
语句m;
else
语句n;
其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。if-else-if语句的执行过程如下图所示。
int main(int argc, const char * argv[])
{
int myAge =0;
printf("请输入你的年龄:");
char c ;
printf("请输入一个字符。");
c =getchar();
if (c < 32) {
printf("这是一个控制字符。");
}
else if (c >='0' && c <= '9')
{
printf("这是一个数字。");
}
else if(c >='A' && c <= 'Z')
{
printf("这是一个大写字母。");
}
else if (c >='a' && c <= 'z')
{
printf("这是一个小写字母。");
}
else
{
printf("这是一个其他字符。");
}
return 0;
}
本例要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于30的为控制字符。在“0”和“9””之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,用if-else-if语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。例如输入为“g”,输出显示它为小写字符。
在使用if语句中还应注意以下问题:
在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:
if(a=5) 语句;
if(b) 语句;
都是允许的。只要表达式的值为非0,即为“真”。如在:
if(a=5)…;
中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。
在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。
在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。
1.2 switch...case语句
switch...case为另一种多分支选择语句,其一般形式为:
switch(表达式){
case常量表达式1: 语句1;
case常量表达式2: 语句2;
…
case常量表达式n: 语句n;
default: 语句n+1;
}
其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
例:
int main(int argc, const char * argv[])
{
int a;
printf("input integer number: ");
scanf("%d",&a);
switch (a){
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
case 7:printf("Sunday\n");
default:printf("error\n");
}
return 0;
}
本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。
为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。
int main(int argc, const char * argv[])
{
int a;
printf("input integer number: ");
scanf("%d",&a);
switch (a){
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
break;
default:
printf("error\n");
}
return 0;
}
在使用switch语句时还应注意以下几点:
在case后的各常量表达式的值不能相同,否则会出现错误。
在case后,允许有多个语句,可以不用{}括起来。
各case和default子句的先后顺序可以变动,而不会影响程序执行结果。default子句可以省略不用。
- 分支结构 if和switch-case
- 分支结构 if...else和switch...case
- C#中的分支结构:if..else if 、if... else 和 switch ...case语句的区别
- 分支结构、大量选择、if—else、switch case
- 优化if else 和 switch case 结构
- C#分支结构if,if-else,if-else if,switch-case区别
- 04:运算符、分支语句if-else和switch-case
- 条件分支结构(switch-case)(if-else if-else) 2011.05.09
- if...else if switch分支结构
- C语言基础之分支结构—if...else—elseif—switch...case
- if...else和switch..case
- if else和switch case
- Java (if else)(switch case)结构
- Java 分支结构 - if...else/switch
- Java 分支结构 - if...else/switch
- Java 分支结构 - if...else/switch
- Java 分支结构 - if...else/switch
- Java 分支结构 - if...else/switch
- 河北活塞洗煤机_复合式干法洗煤机特点由于风力作用在分选过程中可去除一定比
- TCP拥塞控制算法 优缺点 适用环境 性能分析
- 学习:wp构建的网站
- 机房重构之数据库设计
- duilib各种布局的作用,相对布局与绝对布局的的意义与用法
- 分支结构 if和switch-case
- IOS学习之——表视图3 自定义单元格
- 哈希运用
- js 插入到tabel 最后
- 工作记--php把json数据转换为数组注意事项
- bt使用
- 贪心买最多东西
- ShareREC现已“全裸”,下载量已达到6874次,还不猛戳mob.com进行下载?!
- 20150122 【 ARM 】 C语言+循环