亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    C語言條件控制語句

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

    C語言條件控制語句
    [例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<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);
    }
    運行程序:
    RUN?
    15000?
    thetax=480.000
    4.if語句嵌套
    在一個if語句中可以又出現(xiàn)另一個if語句,這稱為if語句的嵌套或多重if語句:
    if<表達式1>
    if<表達式11>
    ……
    else
    語句2;
    [例3-8]計算函數(shù)
    1x>0
    y=0x=0
    -1x<0
    流程圖見圖3-5。
    C語言條件控制語句
    源程序如下:
    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);
    }
    對多重if,最容易犯的錯誤是if與else配對錯誤,
    例如,寫成如下形式:
    y=0;
    if(x>=0)
    if(x>0)
    y=1;
    else
    y=-1;
    從縮排上可以看出,作者希望else是與ifx>=0配對,但是C語言規(guī)定else總是與離它最近
    的上一個if配對,結果,上述算法的流程圖變成圖3-6,完全違背了設計者的初衷。
    改進的辦法是使用復合語句,將上述程序段改寫如下:
    y=0;
    if(x>=0)
    {
    if(x>0)
    y=1;
    }
    else
    y=-1;

    3.3.2switch語句
    if語句只能處理從兩者間選擇之一,當要實現(xiàn)幾種可能之一時,就要用if…elseif甚至多重的嵌套if來實現(xiàn),當分支較多時,程序變得復雜冗長,可讀性降低。C語言提供了switch開關語句專門處理多路分支的情形,使程序變得簡潔。
    switch語句的一般格式為:
    switch<表達式>
    case常量表達式1:語句序列1;
    break;
    case常量表達式2:語句序列2;
    break;
    ??
    case常量表達式n:語句n;
    break;
    default:語句n+1;
    其中常量表達式的值必須是整型,字符型或者枚舉類型,各語句序列允許有多條語句,不需要按復合語句處理,若語句序列i為空,則對應的break語句可去掉。圖3-7是switch語句的流程圖。
    特殊情況下,如果switch表達式的多個值都需要執(zhí)行相同的語句,可以采用下面的格式:
    C語言條件控制語句
    switch(i)
    {
    case1:
    case2:
    case3:語句1;
    break;
    case4:
    case5:語句2;
    break;
    default:語句3;
    }
    C語言條件控制語句
    當整型變量i的值為1、2或3時,執(zhí)行語句1,當i的值為4或5時,執(zhí)行語句2,否則,執(zhí)行
    語句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程序應用舉例
    [例3-10]解一元二次方程ax2+bx+c=0,a、b、c由鍵盤輸入。
    分析:對系數(shù)a、b、c考慮以下情形
    1)若a=0:
    ①b<>0,則x=-c/b;
    ②b=0,則:①c=0,則x無定根;
    ②c<>0,則x無解。
    2)若a<>0;
    ①b2-4ac>0,有兩個不等的實根;
    ②b2-4ac=0,有兩個相等的實根;
    ③b2-4ac<0,有兩個共軛復根。
    用嵌套的if語句完成。程序如下:
    #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;/*實部*/
    x2=abs(0.5*t/a);/*虛部的絕對值*/
    printf(“There are two virtual roots:”);
    printf(“%f+i%ftt%f-i%fn”,x1,x2,x1,x2);
    }
    }
    }
    運行結果如下:
    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號-2    滬公網(wǎng)安備31011702889846號