龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C语言条件控制语句[组图]

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
在程序的三种基本结构中,第二种即为选择结构,其基本特点是:程序的流程由多路分支 组成,在程序的一次执行过程中,根据不同的情况,只有一条支路被选中执行,而其他分支上的

在程序的三种基本结构中,第二种即为选择结构,其基本特点是:程序的流程由多路分支

  组成,在程序的一次执行过程中,根据不同的情况,只有一条支路被选中执行,而其他分支上的语句被直接跳过。

  C语言中,提供if语句和switch语句选择结构,if语句用于两者选一的情况,而switch用于多分支选一的情形。

  3.3.1if语句

  1.if语句的两种基本形式首先,我们看一个例子,由此了解选择结构的意义及设计方法。

  [例3-5]输入三个数,找出并打印其最小数。

  分析:设三个数为A、B、C,由键盘读入,我们用一个变量MIN来标识最小数,A、B、

  C与MIN皆定义为int型变量。

  每次比较两个数,首先比较A和B,将小的一个赋给MIN,再把第三个数C与MIN比较,

  再将小的一个赋给MIN,则最后MIN即为A、B、C中最小数。

  算法如下:

  1)输入A、B、C。

  2)将A与B中小的一个赋给MIN。

  3)将MIN与C中小的一个赋给MIN。

  4)输出MIN。

  将第2)步细化为:若A

  第3)步细化为:若C

  

  对应图3-1和图3-2,正是if语句的两种基本形式,与图3-2对应的if语句的格式为:

  if<表达式>语句

  当表达式为真时,执行语句,表达式为假时跳过语句。

  与图3-1对应的if语句的格式为:

  if〈表达式〉

  语句1

  else

  语句2

  当表达式为真时,执行语句1,表达式为假时执行语句2。无论如何,语句1与语句2每次只能有一个被执行。

  要注重的是:if或if...else,包括后面要讲到的嵌套if,即if...elseif...被看成是一条语句,即使其中的语句是包含多条语句的复合语句,仍然如此。

  下面是例3-5的源程序:

  main()

  {

  inta,b,c,min;

  printf("inputa,b,c:");

  scanf("%d%d%d",&a,&b,&c);

  if(a

  min=a;

  else

  min=b;

  if(c

  min=c;

  printf("Theresultis%d

",min);

  }

  执行情况如下:

  RUN

  inputa,b,c:3 5 2

  Theresultis:2

  这里顺便提一下程序书写的缩排问题,所谓缩排,就是下一行与上一行相比,行首向右缩进若字符,如上例的min=a、min=b等。适当的缩排能使程序的结构、层次清楚、一目了然,增加程序的易读性。应该从一开始就养成一个比较好的书写习惯,包括必要的注释、适当的空行以及缩排。

  2.复合语句

  if语句中,有时需要执行的语句不止一条,这就要用到复合语句。

  复合语句,就是用一对花括号括起来的一条或多条语句,形式如下:

  {

  语句1;

  语句2;

  .......

  语句n;

  }

  无论包括多少条语句,复合语句从逻辑上讲,被看成是一条语句。

  复合语句在分支结构、循环结构中,使用十分广泛。

  [例3-6]读入两个数x、y,将大数存入x,小数存入y。

  

  分析:x、y从键盘读入,若x>=y,只需顺序打出,否则,应将x,y中的数进行交换,然后输出。两数交换必须使用一个中间变量t,定义三个浮点数x、y、t。

  算法:

  1)读入x、y;

  2)大数存入x,小数存入y;

  3)输出x、y。

  第2)步求精:

  若x

  再求精,x与y交换;

  ①t<==x

  ②x<==y

  ③y<==t

  算法的流程图见图3-3,程序如下:

  #include

  main()

  {

  floatx,y,t;

  printf("inputx,y:");

  scanf("%f%f",&x,&y);

  if(x

  {

  t=x;

  x=y;

  y=t;

  }

  printf("result:%7.3f%7.3f

",x,y);

  }

  执行结果:

  inputx,y:43.256.7

  result:56.70043.200

  3.if...elseif语句

  实际应用中经常面对更多的选择,这时,将if...else扩展一下,就得到if...elseif结构,其一般形式为:

  if<表达式1>

语句1

  elseif<表达式2>

  语句2

  elseif<表达式3>

  语句3

  else语句4

  对应的流程图见图3-4。

  [例3-7]货物征税问题,价格在1万元以上的征5%,5000元以上1万元以下的征3%,

  1000元以上5000以下的征2%,1000元以下的免税,读入货物价格,计算并输出税金。

  分析:读入price,计算tax,这是一个较复杂的分支结构程序设计(应注重避免重复征税)。

  假定货物的价格在1万元以上,征税应分段累计,各段采用不同税率进行征收。

  算法:若price>=10000

  则tax=0.05*(price-10000);price=10000;

  否则,若price>=5000

  则tax=0.03*(price-5000)+tax;price=5000;

  否则,若price>=1000

  则tax=0.02*(price-1000)+tax;price=1000;

  程序如下:

  #include

  main()

  {

  floatprice,tax=0;

  printf("inputprice:");

  scanf("%f",&price);

  if(price>=10000.0)

  {

  tax=0.05*(price-10000)+tax;price=10000;

  }

  if(price>=5000.0)

  {

  tax=0.03*(price-5000)+tax;price=5000;

  }

  if(price>=1000.00)

  {

  tax=0.02*(price-1000)+tax;

  }

  printf("thetax=%10.3f",tax);

  }

  运行程序:

  RUN¿

  15000¿

  thetax=480.000

  4.if语句嵌套

  在一个if语句中可以又出现另一个if语句,这称为if语句的嵌套或多重if语句:

  if<表达式1>

  if<表达式11>

  ......

  else

  语句2;

  [例3-8]计算函数

  1x>0

  y=0x=0

  -1x<0

  流程图见图3-5。

  

  源程序如下:

  main()

  {

  floatx,y;

  printf("inputx,y:");

  scanf("%f",&x);

  if(x>=0)

  if(x>0)

  y=1;

  else

  y=0;

  else

  y=-1;

  printf("y=%4.0f

",y);

  }

  对多重if,最轻易犯的错误是if与else配对错误,

  例如,写成如下形式:

  y=0;

  if(x>=0)

  if(x>0)

  y=1;

  else

  y=-1;

  从缩排上可以看出,作者希望else是与ifx>=0配对,但是C语言规定else总是与离它最近

  的上一个if配对,结果,上述算法的流程图变成图3-6,完全违反了设计者的初衷。

  改进的办法是使用复合语句,将上述程序段改写如下:

  y=0;

  if(x>=0)

  {

  if(x>0)

  y=1;

  }

  else

  y=-1;

  

  3.3.2switch语句

  if语句只能处理从两者间选择之一,当要实现几种可能之一时,就要用if...elseif甚至多重的嵌套if来实现,当分支较多时,程序变得复杂冗长,可读性降低。C语言提供了switch开关语句专门处理多路分支的情形,使程序变得简洁。

  switch语句的一般格式为:

  switch<表达式>

  case常量表达式1:语句序列1;

  break;

  case常量表达式2:语句序列2;

  break;

  

精彩图集

赞助商链接