久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      C語(yǔ)言條件控制語(yǔ)句

      在程序的三種基本結(jié)構(gòu)中,第二種即為選擇結(jié)構(gòu),其基本特點(diǎn)是:程序的流程由多路分支
      組成,在程序的一次執(zhí)行過(guò)程中,根據(jù)不同的情況,只有一條支路被選中執(zhí)行,而其他分支上的語(yǔ)句被直接跳過(guò)。
      C語(yǔ)言中,提供if語(yǔ)句和switch語(yǔ)句選擇結(jié)構(gòu),if語(yǔ)句用于兩者選一的情況,而switch用于多分支選一的情形。
      3.3.1if語(yǔ)句
      1.if語(yǔ)句的兩種基本形式首先,我們看一個(gè)例子,由此了解選擇結(jié)構(gòu)的意義及設(shè)計(jì)方法。
      [例3-5]輸入三個(gè)數(shù),找出并打印其最小數(shù)。
      分析:設(shè)三個(gè)數(shù)為A、B、C,由鍵盤讀入,我們用一個(gè)變量MIN來(lái)標(biāo)識(shí)最小數(shù),A、B、
      C與MIN皆定義為int型變量。
      每次比較兩個(gè)數(shù),首先比較A和B,將小的一個(gè)賦給MIN,再把第三個(gè)數(shù)C與MIN比較,
      再將小的一個(gè)賦給MIN,則最后MIN即為A、B、C中最小數(shù)。
      算法如下:
      1)輸入A、B、C。
      2)將A與B中小的一個(gè)賦給MIN。
      3)將MIN與C中小的一個(gè)賦給MIN。
      4)輸出MIN。
      將第2)步細(xì)化為:若A<B,則MIN<==A,否則:MIN<==B;其流程圖見圖3-1。
      第3)步細(xì)化為:若C<MIN,則MIN<==C;其流程圖見圖3-2。
      C語(yǔ)言條件控制語(yǔ)句
      對(duì)應(yīng)圖3-1和圖3-2,正是if語(yǔ)句的兩種基本形式,與圖3-2對(duì)應(yīng)的if語(yǔ)句的格式為:
      if<表達(dá)式>語(yǔ)句
      當(dāng)表達(dá)式為真時(shí),執(zhí)行語(yǔ)句,表達(dá)式為假時(shí)跳過(guò)語(yǔ)句。
      與圖3-1對(duì)應(yīng)的if語(yǔ)句的格式為:
      if〈表達(dá)式〉
      語(yǔ)句1
      else
      語(yǔ)句2
      當(dāng)表達(dá)式為真時(shí),執(zhí)行語(yǔ)句1,表達(dá)式為假時(shí)執(zhí)行語(yǔ)句2。無(wú)論如何,語(yǔ)句1與語(yǔ)句2每次只能有一個(gè)被執(zhí)行。
      要注意的是:if或if…else,包括后面要講到的嵌套if,即if…elseif…被看成是一條語(yǔ)句,即使其中的語(yǔ)句是包含多條語(yǔ)句的復(fù)合語(yǔ)句,仍然如此。
      下面是例3-5的源程序:
      main()
      {
      inta,b,c,min;
      printf(“inputa,b,c:”);
      scanf(“%d%d%d”,&a,&b,&c);
      if(a<b)
      min=a;
      else
      min=b;
      if(c<min)
      min=c;
      printf(“Theresultis%dn”,min);
      }
      執(zhí)行情況如下:
      RUN
      inputa,b,c:3 5 2
      Theresultis:2
      這里順便提一下程序書寫的縮排問題,所謂縮排,就是下一行與上一行相比,行首向右縮進(jìn)若字符,如上例的min=a、min=b等。適當(dāng)?shù)目s排能使程序的結(jié)構(gòu)、層次清晰、一目了然,增加程序的易讀性。應(yīng)該從一開始就養(yǎng)成一個(gè)比較好的書寫習(xí)慣,包括必要的注釋、適當(dāng)?shù)目招幸约翱s排。
      2.復(fù)合語(yǔ)句
      if語(yǔ)句中,有時(shí)需要執(zhí)行的語(yǔ)句不止一條,這就要用到復(fù)合語(yǔ)句。
      復(fù)合語(yǔ)句,就是用一對(duì)花括號(hào)括起來(lái)的一條或多條語(yǔ)句,形式如下:
      {
      語(yǔ)句1;
      語(yǔ)句2;
      …….
      語(yǔ)句n;
      }
      無(wú)論包括多少條語(yǔ)句,復(fù)合語(yǔ)句從邏輯上講,被看成是一條語(yǔ)句。
      復(fù)合語(yǔ)句在分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)中,使用十分廣泛。
      [例3-6]讀入兩個(gè)數(shù)x、y,將大數(shù)存入x,小數(shù)存入y。
      C語(yǔ)言條件控制語(yǔ)句
      分析:x、y從鍵盤讀入,若x>=y,只需順序打出,否則,應(yīng)將x,y中的數(shù)進(jìn)行交換,然后輸出。兩數(shù)交換必須使用一個(gè)中間變量t,定義三個(gè)浮點(diǎn)數(shù)x、y、t。
      算法:
      1)讀入x、y;
      2)大數(shù)存入x,小數(shù)存入y;
      3)輸出x、y。
      第2)步求精:
      若x<y,則交換x與y;
      再求精,x與y交換;
      ①t<==x
      ②x<==y
      ③y<==t
      算法的流程圖見圖3-3,程序如下:
      #include<stdio.h>
      main()
      {
      floatx,y,t;
      printf(“inputx,y:”);
      scanf(“%f%f”,&x,&y);
      if(x<y)
      {
      t=x;
      x=y;
      y=t;
      }
      printf(“result:%7.3ft%7.3fn”,x,y);
      }
      執(zhí)行結(jié)果:
      inputx,y:43.256.7
      result:56.70043.200

      3.if…elseif語(yǔ)句
      實(shí)際應(yīng)用中常常面對(duì)更多的選擇,這時(shí),將if…else擴(kuò)展一下,就得到if…elseif結(jié)構(gòu),其一般形式為:
      if<表達(dá)式1>

      語(yǔ)句1
      elseif<表達(dá)式2>
      語(yǔ)句2
      elseif<表達(dá)式3>
      語(yǔ)句3
      else語(yǔ)句4
      對(duì)應(yīng)的流程圖見圖3-4。

      C語(yǔ)言條件控制語(yǔ)句
      [例3-7]貨物征稅問題,價(jià)格在1萬(wàn)元以上的征5%,5000元以上1萬(wàn)元以下的征3%,
      1000元以上5000以下的征2%,1000元以下的免稅,讀入貨物價(jià)格,計(jì)算并輸出稅金。
      分析:讀入price,計(jì)算tax,這是一個(gè)較復(fù)雜的分支結(jié)構(gòu)程序設(shè)計(jì)(應(yīng)注意避免重復(fù)征稅)。
      假定貨物的價(jià)格在1萬(wàn)元以上,征稅應(yīng)分段累計(jì),各段采用不同稅率進(jìn)行征收。
      算法:若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<stdio.h>
      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);
      }
      運(yùn)行程序:
      RUN?
      15000?
      thetax=480.000
      4.if語(yǔ)句嵌套
      在一個(gè)if語(yǔ)句中可以又出現(xiàn)另一個(gè)if語(yǔ)句,這稱為if語(yǔ)句的嵌套或多重if語(yǔ)句:
      if<表達(dá)式1>
      if<表達(dá)式11>
      ……
      else
      語(yǔ)句2;
      [例3-8]計(jì)算函數(shù)
      1x>0
      y=0x=0
      -1x<0
      流程圖見圖3-5。
      C語(yǔ)言條件控制語(yǔ)句
      源程序如下:
      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.0fn”,y);
      }
      對(duì)多重if,最容易犯的錯(cuò)誤是if與else配對(duì)錯(cuò)誤,
      例如,寫成如下形式:
      y=0;
      if(x>=0)
      if(x>0)
      y=1;
      else
      y=-1;
      從縮排上可以看出,作者希望else是與ifx>=0配對(duì),但是C語(yǔ)言規(guī)定else總是與離它最近
      的上一個(gè)if配對(duì),結(jié)果,上述算法的流程圖變成圖3-6,完全違背了設(shè)計(jì)者的初衷。
      改進(jìn)的辦法是使用復(fù)合語(yǔ)句,將上述程序段改寫如下:
      y=0;
      if(x>=0)
      {
      if(x>0)
      y=1;
      }
      else
      y=-1;

      3.3.2switch語(yǔ)句
      if語(yǔ)句只能處理從兩者間選擇之一,當(dāng)要實(shí)現(xiàn)幾種可能之一時(shí),就要用if…elseif甚至多重的嵌套if來(lái)實(shí)現(xiàn),當(dāng)分支較多時(shí),程序變得復(fù)雜冗長(zhǎng),可讀性降低。C語(yǔ)言提供了switch開關(guān)語(yǔ)句專門處理多路分支的情形,使程序變得簡(jiǎn)潔。
      switch語(yǔ)句的一般格式為:
      switch<表達(dá)式>
      case常量表達(dá)式1:語(yǔ)句序列1;
      break;
      case常量表達(dá)式2:語(yǔ)句序列2;
      break;
      ??
      case常量表達(dá)式n:語(yǔ)句n;
      break;
      default:語(yǔ)句n+1;
      其中常量表達(dá)式的值必須是整型,字符型或者枚舉類型,各語(yǔ)句序列允許有多條語(yǔ)句,不需要按復(fù)合語(yǔ)句處理,若語(yǔ)句序列i為空,則對(duì)應(yīng)的break語(yǔ)句可去掉。圖3-7是switch語(yǔ)句的流程圖。
      特殊情況下,如果switch表達(dá)式的多個(gè)值都需要執(zhí)行相同的語(yǔ)句,可以采用下面的格式:
      C語(yǔ)言條件控制語(yǔ)句
      switch(i)
      {
      case1:
      case2:
      case3:語(yǔ)句1;
      break;
      case4:
      case5:語(yǔ)句2;
      break;
      default:語(yǔ)句3;
      }
      C語(yǔ)言條件控制語(yǔ)句
      當(dāng)整型變量i的值為1、2或3時(shí),執(zhí)行語(yǔ)句1,當(dāng)i的值為4或5時(shí),執(zhí)行語(yǔ)句2,否則,執(zhí)行
      語(yǔ)句3。
      [例3-9]輸入月份,打印1999年該月有幾天。
      程序如下:
      #include<stdio.h>
      main()
      {
      int month;
      int day;
      printf(“please input the month number:”);
      scanf(“%d”,&month);
      switch(month)
      {
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:day=31;
      break;
      case 4:
      case 6:
      case 9:
      case 11:day=30;
      break;
      case 2:day=28;
      break;
      default:day=-1;
      }
      if day=-1
      printf(“Invalid month input !n”);
      else
      printf(“1999.%dhas%ddaysn”,month,day);
      }
      3.3.3程序應(yīng)用舉例
      [例3-10]解一元二次方程ax2+bx+c=0,a、b、c由鍵盤輸入。
      分析:對(duì)系數(shù)a、b、c考慮以下情形
      1)若a=0:
      ①b<>0,則x=-c/b;
      ②b=0,則:①c=0,則x無(wú)定根;
      ②c<>0,則x無(wú)解。
      2)若a<>0;
      ①b2-4ac>0,有兩個(gè)不等的實(shí)根;
      ②b2-4ac=0,有兩個(gè)相等的實(shí)根;
      ③b2-4ac<0,有兩個(gè)共軛復(fù)根。
      用嵌套的if語(yǔ)句完成。程序如下:
      #include<math.h>
      #include<stdio.h>
      main()
      {
      float a,b,c,s,x1,x2;
      doublet;
      printf(“please input a,b,c:”);
      scanf(“%f%f%f”,&a,&b,&c);
      if(a==0.0)
      if(b!=0.0)
      printf(“the root is:%fn”,-c/b);
      elseif(c==0.0)
      printf(“x is inexactiven”);
      else
      printf(“no root !n”);
      else
      {
      s=b*b-4*a*c;
      if(s>=0.0)
      if(s>0.0)
      {
      t=sqrt(s);
      x1=-0.5*(b+t)/a;
      x2=-0.5*(b-t)/a;
      printf(“There are two different roots:%fand%f,xn1”,x2);
      }
      else
      printf(“There are two equal roots:%fn”,-0.5*b/a);
      else
      {
      t=sqrt(-s);
      x1=-0.5*b/a;/*實(shí)部*/
      x2=abs(0.5*t/a);/*虛部的絕對(duì)值*/
      printf(“There are two virtual roots:”);
      printf(“%f+i%ftt%f-i%fn”,x1,x2,x1,x2);
      }
      }
      }
      運(yùn)行結(jié)果如下:
      RUN
      please input a,b,c:123
      There are two virtual roots:
      -1.000000+i1.000000-1.000000-i1.000000
      RNU
      pleaseinputa,b,c:253
      There are two different roots:-1.500000and-1.000000
      RNU
      please input a,b,c:003?
      No root!

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)