C语言中,选择结构语句可分为为if语句和switch语句
if语句的三种形式:
if 语句 单分支结构
if...else 语句 双分支结构
if...else if...else语句 多分支结构
if 语句 单分支结构
如何判断一个数为正数?
语法格式
if(表达式)
{
语句块
}
如果表达式的值为真,则执行语句块。
在程序设计中处理选择问题的关键在于进行条件判断,即如果满足某种条件,就进行相应的处理
if...else语句 双分支结构
语法格式
if(表达式)
{
语句块1
}
else
{
语句块2
}
表达式的值为真,则执行语块1,否则执行语块2.
#include<stdio.h>
int main()
double x,y;有错误看看
double result;
printf("请输入被除数:");
scanf("%lf",&x);
printf("请输入除数:");
scanf("%lf",&y);
if(y!=0)
{
result=x/y;
printf("两个数的商:%.2f\n",result);
}
else
{
printf("除数为零!\n");
}
if...else if ...else语句 多分支结构
if(表达式1){ 语句块1 }
else if(表达式2){ 语句块2 }
else if(表达式3) { 语句块3 }
......
else if(表达式n){ 语句块n }
else { 语句块m }
例:字符类型判断
从键盘键入任意一个字符,判断该字符是英文字母(不区分大、小写)、数字字符还是其它字符,并分别输出相应的信息。
若键入字母,则屏幕显示It is an English character.
若键入数字,则屏幕显示It is a digit character.
若输入其它字符,则屏幕显示: It is other character.
#include<stdio.h>
int main()
{
char c;
printf("Input a character:");
scanf("%c",&c);
if(c>='a' && c<='z' || c>='A' && c<='Z')
printf("It is an English character.\n");
else if(c>='0' && c<='9')
printf("It is a digit character.\n");
else
printf("It is other character.\n");
return 0;
}
if语句的嵌套
在if语句中又包含一个或多个if语句成为if语句的嵌套。
4种形式:
if(表达式1)
if(表达式2) 语句1
[else 语句2]
if(表达式1)
if(表达式2) 语句1
[else 语句2]
else 语句3
if(表达式1) 语句1
else
if(表达式2) 语句2
[else 语句3]
if(表达式1)
if(表达式2) 语句1
[else 语句2]
else
if(表达式3) 语句3
[else 语句4]
使用if语句嵌套的时候要注意if和else的配对关系,if语句中如果 花括号中仅有一条语句时可以省略花括号 。但在if语句嵌套时,省略花括号可能导致程序运行结果与预期不符,这是由于if语句中else词句不能作为独立语句单独使用,它只能是if语句的一部分,和if语句配对使用。
临近原则:else和if成对出现,并且总是与最近的未配对的if配对
建议:在if后面使用{}将要执行的语句括起来,避免程序代码混乱
例:有一函数
编写程序,要求输入一个x后,输出y值。
算法1:使用单分支的if语句
输入x
若x<0,则y=-1
若x=0,则y=0
若x>0,则y=1
输出y
#include<stdio.h>
int main()
{
int x,y;
printf("please input x:");
scanf("%d",&x);
if(x<0) y=-1;
if(x==0) y=0;
if(x>0) y=1;
printf("x=%d,y=%d\n",x,y);
return 0;
}
算法2:使用多分支的if语句
输入x
若x<0,则y=-1
否则若x=0,则y=0
否则y=1
输出y
#include<stdio.h>
int main()
{
int x,y;
printf("please input x:");
scanf("%d",&x);
if(x<0) y=-1;
else if(x==0) y=0;
else y=1;
printf("x=%d,y=%d\n",x,y);
return 0;
}
算法3:嵌套在if子句中
输入x
若x!=0
若x<0,则y=-1
否则,y=1
否则,y=0
输出y
#include<stdio.h>
int main()
{
int x,y;
printf("please input x:");
scanf("%d",&x);
if(x!=0)
if(x<0) y=-1;
else y=1;
else y=0;
printf("x=%d,y=%d\n",x,y);
return 0;
}
算法4:嵌套在else子句中
输入x
若x<0,则y=-1
否则
若x=0,则y=0
否则,y=1
输出y
#include<stdio.h>
int main()
{
int x,y;
printf("please input x:");
scanf("%d",&x);
if(x<0) y=-1;
else
if(x==0) y=0;
else y=1;
printf("x=%d,y=%d\n",x,y);
return 0;
}
switch语句--多分支条件判断语句
当问题分支较多时,使用if语句来实现将会使程序冗长且可读性低
switch语句是多分支条件判断语句,,它能够根据表达式的值从多个分支中选择一个执行的分支。
switch语句的一般形式
switch(表达式) 整数、字符枚举类型
{
case 常量表达式1:语句块1;break;
case 常量表达式2:语句块2;break;
...... 语句块互不相同
case 常量表达式n:语句块n;break;
default: 语句块n+1
执行流程:
首先计算表达式的值,与各个case后的常量表达式的值比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。
如表达式的值与所有case后的常量表达式均不相同,则执行default后的语句。
如:
#include<stdio.h>
int main()
{
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("Fridday\n");break;
case 6:printf("Saturdday\n");break;
case 7:printf("Sunady\n");break;
default:printf("error\n");
}
return 0;
}
在使用switch语句时应注意以下几点:
①表达式的值为整数、字符、枚举类型。
②常量表达式的值必须互不相同,否则会出现分支矛盾的现象。
③case后 面的常量表达式只起标号作用,而不起条件判断作用,即“只是开始执行处的入口标
号”。一般情况下需用break语句跳出switch语句。若没有break语句,则会一直运行到结束或出现break语句。可将上述代码的break全部删除
④语句块可以是一条语句,或复合语句,可以不用花括号{}。
⑤各个case和default出现的先后次序,并不影响执行结果,习 惯上将default子句放在switch
的末尾。
⑥多个case标号可共 用一组执行语句。