第四章分支結構實驗

第四章  分支結構實驗

第二次實驗報告

實驗項目:

一、if語句的應用學習

二、switch/case語句的應用spa

三、switch/case語句嵌套if語句的應用code

四、switch/case語句的嵌套應用blog

五、分析程序數學

姓名:徐溢璠      實驗地點:教學樓514教室      實驗時間:2019年4月3日it

1、實驗目的與要求

一、if語句的應用

  • 掌握C語言邏輯運算和關係運算的規則;io

  • 學會正確地使用關係表達式和邏輯表達式;class

  • 掌握if-else語句的使用方法。效率

二、switch/case語句的應用

  • 掌握算術運算符和運算規則 ;變量

  • 掌握switch/case語句的使用方法

三、switch/case語句嵌套if語句的應用

  • 學會正確的使用關係表達式和邏輯表達式;

  • 掌握switch/case  語句語法和使用方法。注意switch語句的控制流程,在switch語句中的break語句的用法;

  • switch/case結構與if/else嵌套結構之間的轉換。

四、switch/case語句的嵌套應用

  • switch/case結構的嵌套使用。

  • break語句與continue語句的用法。

五、分析程序

  • 運行下列程序,分析輸出的結果,並寫入實驗報告中。

  • 運行下列程序,分析錯誤的緣由,請修改程序,使其輸出正確的結果,並寫入實驗報告,掌握C語言表達式與數學表達式的區別。

2、實驗內容

一、實驗練習4.3.1  if語句的應用

(1)簡單的問題描述:

讀入3個分別表示箱子長、寬、高的整數值,判斷並輸出該箱子是正方體仍是長方體。

(2)實驗代碼:

#include<stdio.h>
 int main()
 {
     int l,w,h;
     printf("請輸入箱子的長、寬、高:\n");
     scanf("%d%d%d",&l,&w,&h);
     if((l==w)&&(w==h)&&(l==h))
     printf("該箱子是正方體。\n");
     else
     printf("該箱子是長方體。\n");
  } 

(3)問題分析:

問題:第一次輸出的答案始終是「該箱子是正方體「。

解決辦法:將」if((l=w)&&(w=h)&&(l=h))「改成「if((l==w)&&(w==h)&&(l==h))」

緣由:一個「=」 叫 「賦值」,兩個「==」叫 「恆等於"。

二、實驗練習:4.3.2  switch/case語句的應用

(1)簡單的問題描述:

編一程序實現以下功能:商店有打印紙(18元/本)、墨盒(132元/盒)、光盤(4.5元/片)出售,商店進行優惠酬賓活動。具體作法以下:顧客購買商品的總額達到100元,優惠5%;達到200元以上,優惠6%;達到300元以上,優惠7%;達到了400元以上,優惠8%;達到1000元以上,優惠10%。根據不一樣的購買量,打印應付款。

(2)實驗代碼:

#include<stdio.h>
main()
{
    int a,b,c,n;
    float sum; 
    printf("請輸入打印紙、墨盒、光盤的數量:\n");
    scanf("%d%d%d",&a,&b,&c);
    sum=18*a+132*b+4.5*c;
    n=sum/100; 
    switch(n)
    {
        case 0:printf("總價:%.2f\n",sum);break;
        case 1:printf("總價:%.2f\n",sum*0.95);break;
        case 2:printf("總價:%.2f\n",sum*0.94);break;
        case 3:printf("總價:%.2f\n",sum*0.93);break;
        case 4:printf("總價:%.2f\n",sum*0.92);break;
        case 5:
        case 6:
        default:printf("總價:%.2f\n",sum*0.90);break;
        
    }
 } 

 

(3)問題分析:

問題:剛開始沒法輸出正確結果。

解決方法:老師提示switch中變量設爲sum/100。以後輸出結果正確。

三、實驗4.3.3:switch/case語句的嵌套if語句的應用

(1)簡單的問題描述:輸入年月,輸出該月的天數。

(2)實驗代碼:

#include<stdio.h>
int main()
{
    int year,month,days;
    printf("please enter year and month:\n");
    scanf("%d%d",&year,&month);
    switch(month)
    {
        case 2:if(year%400 == 0 || (year %4 == 0 && year %100 != 0))
               days=29;
            else
               days=28;
            break;
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:days=31;break;
        case 4:
        case 6:
        case 9:
        case 11:days=30;break;
    }
    printf("%d年%d月有%d天",year,month,days);
}

(3)問題分析:

問題:並不知道「是否爲閏年的判斷式怎樣表達。

解決辦法:上網查找資料,「year%400 == 0 || (year %4 == 0 && year %100 != 0」爲閏年的表達方法。

四、實驗4.3.4:switch/case語句的嵌套應用

(1)問題描述:

 編寫一個自動售貨機的程序。該程序應具備如下功能:二級菜單,一級菜單是商品類型的選擇;二級菜單是具體商品的選擇(商品價格和品種能夠自擬)。顧客選擇商品類型,輸入購買數量。 自動售貨機根據選擇的商品類型與數量,計算並顯示所選商品總金額。

  (2)實驗代碼:

#include<stdio.h> 
int main()
{
    int x,n,y;
    float sum=0.0;
    printf("請選擇:1.日用品  2.文具  3.食品\n");
    scanf("%d",&x);
    switch(x)
       {
           case 1:printf("請選擇:1.牙刷(3.5元/支)  2.牙膏(6.2元/支)  3.肥皂(2元/塊)  4.毛巾(8.6元/條)\n");
           scanf("%d",&y);
           printf("數量?");
           scanf("%d",&n);
           switch(y)
              {
                  case 1:sum=3.5*n;break;
                  case 2:sum=6.2*n;break;
                  case 3:sum=2.0*n;break;
                  case 4:sum=8.6*n;break;
               }
        break;
        case 2:printf("請選擇:1.筆(3.0元/支)  2.筆記本(1.2元/支)  3.文件夾(12元/塊)  4.文具盒(8.6元/條)\n");
           scanf("%d",&y);
           printf("數量?");
           scanf("%d",&n);
           switch(y)
              {
                  case 1:sum=3.0*n;break;
                  case 2:sum=1.2*n;break;
                  case 3:sum=12*n;break;
                  case 4:sum=8.6*n;break;
               }
        break;
        case 3:printf("請選擇:1.白糖(3.6元/支)  2.鹽(1.0元/支)  3.餅(2元/塊)  4.方便麪(3.6元/條)\n");
           scanf("%d",&y);
           printf("數量?");
           scanf("%d",&n);
           switch(y)
              {
                  case 1:sum=3.6*n;break;
                  case 2:sum=1.0*n;break;
                  case 3:sum=2.0*n;break;
                  case 4:sum=3.6*n;break;
               }
        break;
       }
       printf("總計:%.2f元\n",sum);
       }

 

(3)問題分析:

這道題目代碼不難,並無太大問題。

五、實驗練習   4.3.5   分析程序

程序一:(1)簡單問題描述:

運行下列程序,分析輸出的結果,並寫入實驗報告中

(2)實驗代碼:

#include<stdio.h>
int main()
{
    double x=1000/3.0;
    double y=x-333.0;
    double z=3*y-1.0;
    printf("x=%lf\n",x);
    printf("y=%lf\n",y);
    printf("z=%lf\n",z);
    if(z==0) printf("z==0.\n");
       else printf("z不等於0.\n");
}

三、結果分析:

程序二:(1)簡單問題描述:

運行下列程序,分析錯誤的緣由,請修改程序,使其輸出正確的結果,並寫入實驗報告,掌握C語言表達式與數學表達式的區別。

(2)實驗代碼:

#include<stdio.h>
int main()
{
    int num=20;
    if(num>5&&num<10)
        printf("%d in range (5,10)!\n",num);
    else
        printf("%d out of range (5,10)!\n",num);
 }  

三、結果分析:

 問題:原代碼之因此錯誤,是由於沒有分清C語言表達式與數學表達式的區別。

解決辦法:將「5<num<10"改爲"num>5&&num<10"。

3、實驗小結

收穫:

一、表示或者條件的語句用雙豎線。

二、一個「=」 叫 「賦值」,兩個「==」叫 「恆等於"。

三、在結束後必定要有break,不然沒法終止程序。

四、「!=」表示否認,閏年的判斷式能夠是「year%400 == 0 || (year %4 == 0 && year %100 != 0」。之後遇到相似問題能夠觸類旁通。

五、C語言語法中不能夠像數學那樣連續不等式,C語言只有是與否的關係。如不能將"num>5&&num<10"寫成「5<num<10"。

不足:

一、分支結構語句中嵌套代碼要有層次,這樣有利於出錯後尋找錯誤。

二、要學習用最簡單的方法寫出最有效的代碼,儘可能不要長篇大論。

三、對C語言的基本語句還不夠了解,如「!="表示否認,我並無第一時間想到。

四、看到問題時,不能馬上動手,要先理清思路。

五、對使用間斷點尋找代碼錯誤緣由不太熟練,每次都是一行行看過去,效率不高。

相關文章
相關標籤/搜索