C语⾔⼊门(⼋)条件语句
条件语句
前⾔
⼀个表达式的返回值都可以⽤来判断真假,除⾮没有任何返回值的void型和返回⽆法判断真假的结构。当表达式的值不等于0时,它就是“真”,否则就是假。⼀样个表达式可以包含其他表达式和运算符,并且基于整个表达式的运算结果可以得到⼀个真/假的条件值。因此,当⼀个表达式在程序中被⽤于检验其真/假的值时,就称为⼀个条件。
⼀、if语句
if(表达式) 语句1;
如果表达式的值为⾮0,则执⾏语句1,否则跳过语句继续执⾏下⾯的语句。
如果语句1有多于⼀条语句要执⾏时, 必须使⽤{和} 把这些语句包括在其中, 此时条件语句形式为:
if(表达式)
{
语句体1;
}
例如:
if(x>=0) y=x;
if(a||b&&c)
{
z=a+b;
c+=z;
}
⼆、if--else语句
除了可以指定在条件为真时执⾏某些语句外,还可以在条件为假时执⾏另外⼀段代码。在C语句中利⽤else语句来达到这个⽊的。
if(表达式) 语句1;
else 语句2;
同样,当语句1或语句2是多于⼀个语句时,需要⽤{}把语句括起来。
例如:
if(x>=0) y=x;
switch case判断字符串else y=-x;
三、if--else if--else结构。
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
.
.
.
else
语句n;
这种结构是从上到下逐个对条件进⾏判断,⼀旦发现条件满点⾜就执⾏与它有关的语句, 并跳过其它剩余阶梯;若没有⼀个条件满⾜,则执⾏最后⼀个else 语句n。最后这个else常起着缺省条件的作⽤。同样,如果每⼀个条件中有多于⼀条语句要执⾏时,必须使⽤{和}把这些语句包括在其中。
条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪
个else。
例如:
if(x>20||x<-10)
if(y<=100&&y>x)
printf(Good);
else
printf(Bad);
对于上述情况, Turbo C2.0规定: else语句与最近的⼀个if语句匹配, 上例中的else与if(y<=100&&y>x)相匹配。为了使else与if(x>20||x<-10)相匹配, 必须⽤花括号。如下所⽰:
if(x>20||x<-10)
{
if(y<=100&&y>x)
printf(Good);
}
else
printf(Bad);
下⾯举⼏个例⼦:
1.输⼊⼀个数,如果⼤于0,输出plus;如果是负数,输出negative;如果正好是0,则输出zero。
main()
{
float num;
scanf(%f,&f);
if(num>0)
printf(plus\n);
else if(num<0)
printf(negative\n);
else
printf(zero\n);
}
先定义两个变量,然后输⼊⼀个数,然后判断这个数的范围,输出对应的字符串。
2.输⼊⼀个数x,输出y。其中y是x的绝对值。
main()
{
float x,y;
scanf(%f,&x);
if(x>=0) y=x;
else y=-x;
printf(%f\n,y);
}
程序⽐较简单,这⼉就不分析了。
其实Trubo C 2.0把⼀些常⽤的功能都写好了,我们只需要使⽤就可。例如求绝对值的功能在C的库⾥⾯就有。看下⾯的:
#include math.h
main()
{
float x,y;
scanf(%f,&x);
y=fabs(x); /*求x的绝对值,然后赋值给y*/
printf(%f\n,y);
}
这个程序和上⾯的程序完成的功能是⼀模⼀样的,都是求绝对值。可以看出,⽤下⾯这个⽅法⽐上⾯就要好⼀些。由于fabs()是⼀个函数,系统⾃带的,所以在使⽤它的时候,我们必须把它所在的库⽂件math.h包含都程序中,即程序最前⾯⼀⾏。类似的还有求开⽅sqrt(),求指数幂exp()等等,这些与数学⽅⾯有关的函数都在math.h⾥⾯。具体哪些有哪些没有,在什么库⾥⾯,可以查看⼀些⼿册。
3.输⼊x,输出y,x和y满⾜关系:
x<-5 y=x;
-5<=x<1 y=2*x+5;
1<=x<4 y=x+6;
x>=4 y=3*x-2;
程序如下:
main()
{
float x,y;
scanf(%f,&x);
if(x<-5)
y=x;
else if(-5<=x&&x<1)
y=2*x+5;
else if(1<=x&&x<4)
y=x+6;
else
y=3*x-2;
printf(%f\n,y);
}
这⾥要说明两点:
(1).-5<=x&&x<1不能写成-5<=x<1;1<=x&&x<4也不能写成1<=x<4;在C语⾔中,不能认识连续不等式。
(2).y=2*x+5不能写成y=2x+5;y=3*x-2也不能写成y=3x-2;这与我们平时所写的⽅法不⼀样。
4.输⼊三个数x,y,z,然后按从⼤到⼩输出。
scanf(%f%f%f,&x,&y,&z);
if(x>=y&&x>=z)
{
printf(%f\t,x);
if(y>=z) printf(%f\t%f\n,y,z);
else printf(%f\t%f\n,z,y);
}
else if(y>=x&&y>=z)
{
printf(%f\t,y);
if(x>=z) printf(%f\t%f\n,x,z);
else printf(%f\t%f\n,z,x);
}
else
{
printf(%f\t,z);
if(x>=y) printf(%f\t%f\n,x,y);
else printf(%f\t%f\n,y,x);
}
}
说明:这是⼀个典型的if语句嵌套结构,如果不使⽤括号,那么if和else的对应关系就乱了。
四、switch--case语句
在编写程序时, 经常会碰到按不同情况分转的多路问题, 这时可⽤嵌套if -else-if语句来实现, 但if-else-if语句使⽤不⽅便, 并且容易出错。对这种情况, Turbo C2.0提供了⼀个开关语句。开关语句格式为:
switch(变量)
{
case 常量1:
语句1或空;
case 常量2:
语句2或空;
.
.
.
case 常量n:
语句n或空;
default:
语句n+1或空;
}
执⾏switch开关语句时,将变量逐个与case后的常量进⾏⽐较,若与其中⼀个相等,则执⾏该常量下的语句,若不与任何⼀个常量相等,则执⾏default后⾯的语句。
注意:
1.switch中变量可以是数值,也可以是字符,但必须是整数。
2.可以省略⼀些case和default。
3.每个case或default后的语句可以是语句体,但不需要使⽤{和}括起来。
例如:
scanf(%d,&x);
witch(x)
{
case 1:
y=x+1;
break; /*退出开关语句,遇到break才退出*/
case 4:
y=2*x+1;
break;
default:
y=x--;
break;
}
printf(%d\n,y);
}
从上⾯的例⼦可以看出,⽤开关语句编的程序⼀定可以⽤if语句做。那么在什么情况下需要⽤switch语句呢?⼀般在出现⽐较整的情况下或者能转化成⽐较整数的情况下使⽤。看下⾯的例⼦:
⼀个学⽣的成绩分成五等,超过90分的为'A',80-89的为'B',70-79为'C',60-69为'D',60分以下为'E'。现在输⼊⼀个学⽣的成绩,输出他的等级。
(1).⽤if语句
main()
{
float num;
char grade;
scanf(%d,&num);
if(num>=90) grade='A';
else if(num>=80&&num<89) grade='B';
else if(num>=70&&num<79) grade='C';
else if(num>=60&&num<69) grade='D';
else grade='E';
printf(%c,grade);
}
(2).⽤switch语句

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。