實驗報告(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日)