《上機(jī)與編程2 分支程序設(shè)計(jì) 珍藏版》由會(huì)員分享,可在線閱讀,更多相關(guān)《上機(jī)與編程2 分支程序設(shè)計(jì) 珍藏版(8頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、1. 目的與要求(1) 能正確使用關(guān)系和邏輯運(yùn)算構(gòu)造各種條件;(2) 能正確選擇if和switch語(yǔ)句進(jìn)行程序設(shè)計(jì);(3) 能夠使用流程圖和N-S圖進(jìn)行算法描述。2. 上機(jī)練習(xí)【練習(xí)2-1】若有C源程序2-1.c,其內(nèi)容如下:#include void main(void)int a=3,b=4,i,j,k;i=(-a=b+)?-a:+b;j=a+;k=b+a+;printf(ni=%d,j=%d,k=%d,a=%d,b=%d,i,j,k,a,b);先分析程序運(yùn)行的結(jié)果,然后上機(jī)編輯和運(yùn)行程序,并將運(yùn)行的結(jié)果與分析的結(jié)果進(jìn)行比較,若分析有誤,試找出原因。i=6,j=2,k=9,a=4,b=7【
2、練習(xí)2-2】若有C源程序2-2.c,其內(nèi)容如下:#include void main(void)int a=3,b=4,c=5,x,y;x=!a+bc&(b!=c);y=c/b+(float)a/b&(float)(a/c);printf(nx=%d,y=%d,x,y);x=a|b-;y=a-3&c-;printf(n%d,%d,%d,%d,%d,a,b,c,x,y);先分析程序運(yùn)行的結(jié)果,然后上機(jī)編輯和運(yùn)行程序,并將運(yùn)行的結(jié)果與分析的結(jié)果進(jìn)行比較,若分析有誤,試找出原因。x=1,y=13,4,5,1,0【練習(xí)2-3】若有C源程序2-3.c,功能是輸入x的值,計(jì)算并輸出y1和y2的值。y1=,
3、y2=當(dāng)x0程序內(nèi)容如下:#include void main(void)float x,y1,y2;printf(Please enter x:);scanf(%f,&x);if(x0)y1=2/x;y2=3/x;else if(x=0)y1=y2=0;elsey1=2*x;y2=3*x;printf(nx=%.2f,y1=.2f,y2=.2fn,x,y1,y2);(1)上機(jī)編輯和運(yùn)行程序,驗(yàn)證程序是否正確,若不正確,請(qǐng)找出錯(cuò)誤的原因,修改后重新運(yùn)行,直到實(shí)現(xiàn)既定的功能。#include void main(void)float x,y1,y2;printf(Please enter x:)
4、;scanf(%f,&x);if(x0)y1=5/x;y2=8/x;else if(x=0)y1=y2=0;elsey1=2*x;y2=3*x;printf(nx=%.2f,y1=%.2f,y2=%.2fn,x,y1,y2);If語(yǔ)句的嵌套(2)使用ifelse-if語(yǔ)句重寫上面的程序,并調(diào)試運(yùn)行。#include void main(void)float x,y1,y2;printf(Please enter x:);scanf(%f,&x);if(x0)y1=5/x;y2=8/x;else if(x=0)y1=y2=0;elsey1=2*x;y2=3*x;printf(nx=%.2f,y1
5、=%.2f,y2=%.2fn,x,y1,y2);【練習(xí)2-4】若有C源程序2-4.c,其內(nèi)容如下:#include void main(void)int a,b,c,d,x;a=1,b=3,c=5,d=4;if(ab)if(cd) x=100;elseif(ac)if(bd) x=200;else x=500;else x=600;else x=700;printf(x=%dn,x);(1) 上面代碼的書(shū)寫格式非常糟糕,先分析該程序的執(zhí)行結(jié)果,然后上機(jī)編輯、調(diào)試和運(yùn)行程序,認(rèn)真體會(huì)良好的代碼書(shū)寫格式對(duì)讀程序的重要性。 x=200規(guī)范的程序書(shū)寫格式:#include void main(void
6、)int a,b,c,d,x;a=1,b=3,c=5,d=4;if(ab)if(cd) x=100;elseif(ac)if(bd) x=200; else x=500;else x=600;else x=700;printf(x=%dn,x);(2) 根據(jù)程序代碼,分別畫(huà)出其流程圖和N-S圖。【練習(xí)2-5】若有C源程序2-5.c,其內(nèi)容如下:#include void main(void)int a,b,x,y;a=b=y=0,x=1;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;cas
7、e 3:a+;b+;break;default:a+;b+;printf(a=%d,b=%dn,a,b);(1) 先分析程序運(yùn)行的結(jié)果,然后上機(jī)編輯和運(yùn)行程序,并將運(yùn)行的結(jié)果與分析的結(jié)果進(jìn)行比較,若分析有誤,試找出原因。a=2,b=1(2)若把第18行和第21行的break語(yǔ)句去掉,程序執(zhí)行的結(jié)果是否會(huì)變化?這說(shuō)明了什么?a=4,b=3 (3)若把第5行中x=1改為x=4,程序執(zhí)行的結(jié)果是什么?若再把第22,23行一起移到第8行,執(zhí)行的結(jié)果有什么變化?a=1,b=1a=3,b=23. 上機(jī)編程【編程 2-1】在練習(xí)1-7中所給出的程序沒(méi)有考慮輸入三條邊后是否能夠構(gòu)成三角形的處理。請(qǐng)重新設(shè)計(jì)算法
8、對(duì)以上問(wèn)題進(jìn)行處理,即輸入三角邊后先判斷是否構(gòu)成三角形,若構(gòu)成三角形則求出面積輸出,否則輸出構(gòu)不成三角形的信息。請(qǐng)畫(huà)出流程圖或N-S圖,并編寫程序上機(jī)調(diào)試運(yùn)行。#include #include #include void main(void)int a,b,c;float s,area;printf(Please enter three sides a,b and c:);scanf(%d%d%d,&a,&b,&c);if(a+bc&abs(a-b)c)s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(Three sides:a=%d,
9、b=%d,c=%dn,a,b,c);printf(Area=%.1fn,area);elseprintf(Three sides:a=%d,b=%d,c=%dn,a,b,c);printf(這三條邊不能組成三角形!n);【編程 2-2】若實(shí)現(xiàn)從鍵盤上輸入一個(gè)字符,判斷并輸出該字符是以下哪一種的提示信息:字母;數(shù)字;空格;其他字符。如輸入1,則顯示的信息是:輸入的是數(shù)字字符1。請(qǐng)使用ifelse-if語(yǔ)句編程。#include #include void main(void)char c;printf(請(qǐng)輸入一個(gè)字符:);c=getchar();if(c=A&c=a&c=0&c=9)printf
10、(輸入的是數(shù)字字符%cn,c);else if(c=40)printf(輸入的是空格字符%cn,c);else printf(輸入的是其他字符%cn,c);【編程 1-3】若某企業(yè)根據(jù)銷售人員的銷售額發(fā)放提成,計(jì)算公式如下(s代表銷售額):s200沒(méi)有提成200s400提成5%400s1200提成8%1200s2400提成8%2400s4000提成8%s4000請(qǐng)分別使用if和switch語(yǔ)句結(jié)構(gòu)分別編寫程序,實(shí)現(xiàn)從鍵盤上輸入銷售額,即輸出銷售額和提成。要求程序具有糾錯(cuò)能力,如輸入負(fù)數(shù)就輸出非法數(shù)據(jù)的提示信息并結(jié)束程序。ifelse-if語(yǔ)句#include #include void mai
11、n(void)float s;float income;printf(請(qǐng)輸入銷售額:);scanf(%f,&s);if(s0)printf(這是非法數(shù)據(jù)!n);exit(1);else if(s200)printf(沒(méi)有提成!n);exit(1);else if(s400)income=(s-200)*0.05;else if(s1200)income=(s-400)*0.08+200*0.05;else if(s2400)income=(s-1200)*0.1+800*0.08+200*0.05;else if(s4000)income=(s-2400)*0.15+1200*0.1+800*
12、0.08+200*0.05;else income=(s-4000)*0.18+1600*0.15+1200*0.1+800*0.08+200*0.05;printf(銷售額是:%.0f,提成是:%.0fn,s,income);Switchcase語(yǔ)句#include #include void main(void)float s;float income;printf(請(qǐng)輸入銷售額:);scanf(%f,&s);if(s0)printf(這是非法數(shù)據(jù)!n);exit(1);if(s200)printf(沒(méi)有提成!n);exit(1);switch(int)(s/400)case 0:inco
13、me=(s-200)*0.05;break;case 1:case 2:income=(s-400)*0.08+200*0.05;break;case 3:case 4:case 5:income=(s-1200)*0.1+800*0.08+200*0.05;break;case 6:case 7:case 8:case 9:income=(s-2400)*0.15+1200*0.1+800*0.08+200*0.05;break;default: income=(s-4000)*0.18+1600*0.15+1200*0.1+800*0.08+200*0.05;break;printf(銷售額是:%.0f,提成是:%.0fn,s,income);