1. 程式人生 > >實驗報告(2019年4月3日)

實驗報告(2019年4月3日)

掌握 食品 二級 數值 實驗目的 實驗代碼 時有 分析 筆記本

c程序實驗報告

姓名:黃誌乾????實驗地點:教學樓514教室????實驗時間:4月3日
實驗項目:
???1、if語句的應用
???2、switch/case語句的應用
???3、switch/case語句嵌套if語句的應用
???4、switch/case結構的嵌套應用
???5、分析程序

一、實驗目的與要求

1.if語句的應用

● 掌握c語言邏輯運算和關系運算的規則
● 學會正確地使用關系式和邏輯表達式
● 掌握if-else語句的使用方法

2.switch/case語句的應用

● 掌握算數運算符和預算規則
● 掌握switch/case語句的使用方法

3.switch/case語句嵌套if語句的應用

● 學會正確地使用關系表達式和邏輯表達式
● 掌握switch/case語句語法的使用方法。註意switch語句的控制流程,在switch語句中break語句的用法。

4.switch/case結構的嵌套應用

●switch/case結構的嵌套使用
● break語句與continue語句的用法

5.分析程序

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

二、實驗內容

1.實驗練習:4.3.1

問題描述:

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

實驗代碼

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

問題:

此處應該註意賦值與數值相等的運算符的區別,即“=”與“==”的區別,其余地方無問題

2.實驗練習:4.3.2

問題描述:

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

實驗代碼:

#include<stdio.h>
main()
{   
    int a,b,c,f;
    float d;
    printf("請輸入打印紙,墨盒,光盤的數量:"); 
    scanf("%d,%d,%d",&a,&b,&c); 
    d=a*18+b*132+c*4.5;
    if (d>=500)
        d=d*0.90;
    else
    {   f=d/100;
        switch (f)
        {
            case 1:d=d*0.95;break;
            case 2:d=d*0.94;break;
            case 3:d=d*0.93;break;
            case 4:d=d*0.92;break;
        }
        
    }
    printf("應付款數=%.2f",d);
}

問題:

這個程序首先需要明確好對應變量的類型,其次是if-else和switch語句的嵌套使用。在實驗過程中,我因定義變量類型前後矛盾而導致算法運算值為0,所以變量的類型對算法來說至關重要,需認真嚴謹,以防出錯。

3.實驗練習:4.3.3

問題描述:

輸入某一年月,輸出該月的天數。

實驗代碼

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

問題:無問題

4.實驗練習:4.3.4

問題描述:

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

實驗代碼

#include<stdio.h>
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/支)\n");
            printf(" 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*n;break;
                    case 4: sum=8.6*n;break;
                     } 
                break;
            case 2:printf("請選擇:1.筆(3/支) 2.筆記本(1.2/本)\n");
            printf(" 3.文件夾(12元/個) 4.文具盒(8.6/個)\n");
            scanf("%d",&y);
            printf("數量?");
            scanf("%d",&n);
            switch(y)
                    {
                    case 1:sum=3*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/包)\n");
            printf(" 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*n;break;
                    case 3:sum=2*n;break;
                    case 4: sum=3.6*n;break;
                    } 
                break;
        }
        printf("總計:%.2f元\n",sum);
        return 0;
}

問題:此程序主要考察switch語句的嵌套使用,編寫過程中主要註意不同變量所代表含義,並在此基礎上使用switch語句的嵌套

5.實驗練習:4.3.5

問題描述:

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

實驗代碼

#include<stdio.h>
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");
    return 0;
}

問題:

在此程序中,z的運算值應是一個無限接近於零的數,在運行結果中顯示其值為-0.000000。這是因為%lf對於小數點後位數的限制而導致顯示不全,實際上該程序是正確的。

6.實驗練習:4.3.5(2)

問題描述:

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

實驗代碼

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

問題:

在此程序中,運行結果為20在5到10的範圍內,說明在條件判斷時有誤,回到判斷語句,判斷語句為5<num<10。該語句在運算符的使用上有誤,在條件同時成立時應用邏輯與使其並列,即5<num&&num<10。

三、實驗小結

本次實驗課上,我主要的問題在於
1、對變量的定義上,在4.3.2實驗中我定義的變量前後使用的類型不同,因此在運算結果中總顯示為零,在今後的學習中對變量的定義需要更加嚴謹認真
2、對於變量的使用,在很多地方不用引用新變量時,我引用了新變量,增加了代碼數量,不過精簡。
3、不能局限於對應結果的輸出,應使用多組數據檢查程序是否有錯

實驗報告(2019年4月3日)