在C语言中,选择结构主要是用 if语句和switch语句实现的。if 语句共有三种形式。
f语句的3种形式
1. if(表达式)语句1
(1) if(x>0) y=x+2;
(2) if(x!=2)
{ y++;
x+=3; }
这种if语句执行过程是:若表达式的值为真,则执行语句1;否则,跳过语句1。
例10、输入两个实数,要求按由小到大的顺序输出它们。
解题思路:
输入a、b的值;
比较a、b,若a>b,则交换a、b;
依次输出a、b的值。
#include <stdio.h>
int main()
{ float a,b,t;
scanf("%f%f",&a,&b);
if(a>b)
{ t=a; //如果a>b,将a和b的值互换
a=b;
b=t;
}
printf("%5.2f,%5.2f\n",a,b);
return 0;
}
2. if(表达式)语句1 else 语句2
这种if语句执行过程是:若表达式的值为真,则执行语句1;否则执行语句2 。
特别强调,else部分是整个if语句的一个子句,它不能脱离if语句而独立存在。
例12、求一元二次方程 ax2+bx+c=0 的实根
#include <stdio.h>
#include <math.h>
int main ( )
{
double a,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
if (disc<0)
printf(“has not real roots\n”);
else
{ p=-b/(2*a);
q=sqrt(disc)/(2*a);
x1=p+q;
x2=p-q;
printf(“real roots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);
}
return 0;
}
3. if(表达式1)语句1
else if(表达式2)语句2
… …
else if(表达式m)语句m
else 语句n
这种if语句执行过程是:首先计算表达式1的值,…。
C在处理嵌套的if语句时,会把else子句与它上面最近的、同括号的、未配对的 if相结合。
为了避免出现类似错误,可以采取两种手段之一。
① 给内嵌的if语句添加 else子句
if(表达式1)
if(表达式2)语句1
else ;
else 语句2
② 给内嵌的if语句加{ },明确内嵌if语句的范围。
if(表达式1)
{ if(表达式2)语句1}
else 语句2