if语句用法详解

if语句

if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

一、if语句的三种形式

C语言提供了三种形式的if语句:

1.if(表达式)语句

例如:

if(x>y)printf("%d",x);

2.if(表达式)语句1else语句 2

例如:

if (x>y) prntf("%d",x);

else printf("%d",y);

3.if(表达式1)     语句1

else if(表达式2) 语句2

else if(表达式 3) 语句3

.

.

.

else if(表达式m) 语句m

else 语句 n

例如:

if(number>500)  cost=0.15;

else if(number>300)  cost=0.10;

else if (number>100) cost=0.075;

else if (number>50) cost=0.05;

else cost=0;

说明:

(1)三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表达式。例如,if(a==b&&x==y)printf("a=b,x=y");在执行if语句时先对表达式求解,若表达式的值为0,按“假”处理,若表达式的值为非0,按“真”处理,执行指定的语句。假如有以下if语句:

if(3)printf("O.K.");

是合法的,执行结果输出“O.K.”,因为表达式的值为3,按“真”处理。由此可见,表达式的类型不限于逻辑表达式,可以是任意的数值类型(包括整型、实型、字符型、指针型数据例如,下面的if语句也是合法的:

if('a') printf("%d",'a');

执行结果:输出a的ASCII码97。

  1. 第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有分号。例如:

if(x>0)

print ("%f",x):

else

printf("%f",-x)

If、else各有一个分号

这是由于分号是C语句中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的。如果无此分号,则出现语法错误,但应注意,不误认为上面是两个语句(if语句和else语句)

。它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的 一部分,与if配对使用。

(3)在if和else面可以含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。如:

if(a+b>c &&b+c>a && c+a>b)

{s=0.5*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("area=%6.2f",area);}

else

printf("it is not a trilateral"};

注意在第4行的花括号“}”外面不需要再加分号。因为{}内是一个完整的复合语句,不需另附加分号。

例1输入两个实数,按代数值由小到大的次序输出这两个数。

这个问题的算法很简单,只需要作一次比较即可。对类似这样简单的问题可以不必先写出算法或画流程图,而直接编写程序。或者说,算法在编程者的脑子里,相当于在算术运算中对简单的问题可以“心算”而不必在纸上写出来一样。

程序如下:

 main()

{

float a,b,t;

scanf("%f, %f",&a,&b);

if(a>b)

{t=a;a=b;b=t;}

printf("%5. 2f,%5.2f\n",a,b);

}

运行情况如下:

3.6,-3.2

 -3.20,3.60

例2输入3个数a,b,c,要求按由小到大的顺序输出。

解此题的算法比上一题稍复杂一些。可以用伪代码写出算法;

ifa>b将a和b对换 (a是a,b中的小者)

ifa>c将a和c对换 (a是a,c中的小者,因此a是三者中最小者)

ifb>c将b和c对换 (b是b,c中的小者,也是三者中次小者)

然后顺序输出a,b,c即可。

按此算法编写程序:

main()

{

float a,b,c,t;

scanf("%f,%f,%f”,&a,&b,&c);

if(a>b)

{t=a;a=b;b=t;} /*实现a和b的互换*/

if(a>c)

(t=a;a=b;c=t)  /*实现a和c的互换*/

if(b>c)

(t=b;b=c;c=t;) /*实现b和c的互换*/

printf("%5.2f,%5.2f,%5.2f/n",a,b,c)i

运行情况如下:

3,7.1

1.00,3.00,7.00

二、 if语句的嵌套

在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下:

if( )

if( ) 语句1

else 语句2内嵌if

else

  If ) 语句3

else 语句4内嵌 if

应当注意if与else的配对关系。else总是与它上面的最近的未配对的if配对。假如写成:

if( )

if( ) 语句1

else

If( ) 语句2

else 语句3 内嵌 if

编程序者把else写在与第一个if(外层if)同一列上,希望else与第一个if对应,但实际上else是与第二个if配对,因为它们相距最近。因此最好使内嵌if语句也包含 else部分,这样if的数目和else的数目相同,从内层到外层一一对应,不致出错。

如果if与else的数目不一样,为实现程序设计者的企图,可以加花括弧来确定配对关系。例如:

If( )

{if( ) 语句1} (内嵌 if)

else 语句2

这时{ }限定了内嵌if语句的范围,因此else 与第一个ii配对。

例3有一函数:

y= -1 (x<0)

 = 0 (x=0)

 = 1 (x>0)

编一程序,输人一个x值,输出y值。

可以先写出算法:

输入x

若x<0 y=-1

若x=0 y=0

若x>0 y=1

输出y

或:

输入x

若x<0 y=-1

若x=0 y=0

若x>0 y=-1

输出y

有以下几个程序,请读者判断哪个是正确的?

程序1:

main()

{int x,y;

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);

}

程序2:将上面程序的if语句(第4~6行)改为:

if(x>=0)

if(x>0) y= 1;

else y=0;

else y=-1;

程序3:将上述if语句改为:

y=-1;

if (x!=0)

if(x>0) y=1;

else y=0:

程序4:

y=0;

if(x>=0)

if(x>0)y-1;

else y=-1;

只有程序1和程序2是正确的。程序中if和else是配对关系。例如程序3中的else 子句是和它上一行的内嵌的可语句配对,而不与第2行的if语句配对。为了使辑关系清晰,避免出错,一般把内嵌的if语句放在外层的else子句中(如程程1那样),这样由于有外层的else相隔,内嵌的else不会被误认为和外层的if配对,而只能与内嵌的if配对,样就不会搞混,如像程序3和程序4那样写就很容易出错。

三、条件运算符

若if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有以下if语句:

if(a>b)max=a;

else max=b;

可以用下面的条件运算符来处理:

max=(a>b)? a:b;

其中“(a>b)?a:b”是一个“条件表达式”。它是这样执行的:如果(a>b)条件为真,则条件表达式取值a,否则取值b。

条件运算符要求有3个操作对象,称三目(元)运算符,它是C语言中唯一的一个三目运算符。条件表达式的一般形式为

表达式1?表达式2:表达式3

说明:

(1)条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式

3的值就是整个条件表达式的值。

max=(a>b)? a:b

执行结果就是将条件表达式的值赋给max。也就是将a和b二者中大者赋给max。

(2)条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。

条件运算符的优先级别比关系运算符和算术运算符都低。因此

max=(a>b)? a : b

括号可以不要,可写成

max=a>b?a:b

如果有

a>b? a:b+1

相当于a>b?a:(b+1),而不相当于(a>b?a:b)+1。

  1. 条件运算符的结合方向为“自右至左”。如果有以下条件表达式:
  1. b? a:c>d? c:d

相当于

a>b?a :(c>d? c:d)

如果a=1,b=2,c=3,d=4,则条件表达式的值等于4。

(4)条件表达式还可以写成以下形式: a>b?(a=100);(b=100)

a>b? printf("%d",a);printf ("%d",b)

即“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。上面第二个条件表达式相当于以下 if-else 语句:

if(a>b) printf ("%d",a);

Else printf("%d",b);

  1. 条件表达式中表达式1的类型可以与表达式2和表达式3的类型不同。如

x?’a’: ‘b’

x是整型变量,若x等于0,则条件表达式的值为'b。表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。如

x>y?1:1.5

如果x<=y则条件表达式的值为1.5,若x>y,值应为1,由于1.5是实型,比整型高),因此,将1转换成实型值1.0。

例4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。

main()

{char ch;

scanf(“%c”,& ch);

ch=(ch>='A' && ch<='Z')?(ch+32):ch;

printf("%c\n",ch);}

运行结果如下:

 A

a

条件表达式中的(ch+32),其中32是小写字母和大写字母ASCII码的差值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光向日葵向阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值