《上機(jī)與編程2 分支程序設(shè)計(jì) 珍藏版》由會(huì)員分享,可在線閱讀,更多相關(guān)《上機(jī)與編程2 分支程序設(shè)計(jì) 珍藏版(8頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、1. 目的與要求
(1) 能正確使用關(guān)系和邏輯運(yùn)算構(gòu)造各種條件;
(2) 能正確選擇if和switch語句進(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é)果
2、,然后上機(jī)編輯和運(yùn)行程序,并將運(yùn)行的結(jié)果與分析的結(jié)果進(jìn)行比較,若分析有誤,試找出原因。
i=6,j=2,k=9,a=4,b=7
【練習(xí)2-2】若有C源程序2-2.c,其內(nèi)容如下:
#include
void main(void)
{
int a=3,b=4,c=5,x,y;
x=!a+b
3、",a,b,c,x,y);
}
先分析程序運(yùn)行的結(jié)果,然后上機(jī)編輯和運(yùn)行程序,并將運(yùn)行的結(jié)果與分析的結(jié)果進(jìn)行比較,若分析有誤,試找出原因。
x=1,y=1
3,4,5,1,0
【練習(xí)2-3】若有C源程序2-3.c,功能是輸入x的值,計(jì)算并輸出y1和y2的值。
y1=,y2= 當(dāng)x<0
y1=0,y2=0 當(dāng)x=0
y1=2x,y2=3x 當(dāng)x>0
程序內(nèi)容如下:
#include
void main(void)
{
float x,y1,y2;
printf("Please ent
4、er x:");
scanf("%f",&x);
if(x<0)
y1=2/x;y2=3/x;
else
if(x=0)
y1=y2=0;
else
y1=2*x;y2=3*x;
printf("\nx=%.2f,y1=.2f,y2=.2f\n",x,y1,y2);
}
(1)上機(jī)編輯和運(yùn)行程序,驗(yàn)證程序是否正確,若不正確,請找出錯(cuò)誤的原因,修改后重新運(yùn)行,直到實(shí)現(xiàn)既定的功能。
#include
void main(void)
{
float x,y1,y2;
printf
5、("Please enter x:");
scanf("%f",&x);
if(x<0)
{
y1=5/x;y2=8/x;
}
else
{
if(x==0)
y1=y2=0;
else
{
y1=2*x;y2=3*x;
}
}
printf("\nx=%.2f,y1=%.2f,y2=%.2f\n",x,y1,y2);
}
If語句的嵌套
(2)使用if…else-if語句重寫上面的程序,并調(diào)試運(yùn)行。
#include
void main(void)
{
float x,y
6、1,y2;
printf("Please enter x:");
scanf("%f",&x);
if(x<0)
{
y1=5/x;y2=8/x;
}
else if(x==0)
y1=y2=0;
else
{
y1=2*x;y2=3*x;
}
printf("\nx=%.2f,y1=%.2f,y2=%.2f\n",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=
7、3,c=5,d=4;
if(a
void main(void)
{
int a,b,c,d,x;
a=1,b=3,c=
8、5,d=4;
if(a
void main(void)
{
int a,b,x,y;
a=b=y=0,x=1;
switch(x)
{
case 1:
9、
switch(y)
{
case 0: a++;
break;
case 1: b++;
break;
}
case 2: a++;
b++;
break;
case 3: a++;
b++;
break;
default:a++;
b++;
}
printf("a=%d,b=%d\n",a,b);
}
(1) 先分析程序運(yùn)行的結(jié)果,然后上機(jī)編輯和運(yùn)行程序,并將運(yùn)行的結(jié)果與分析的結(jié)果進(jìn)行比較,若分析有誤,試找出原因。
a=2,b=1
(2)若把第18行和第21行的break
10、語句去掉,程序執(zhí)行的結(jié)果是否會(huì)變化?這說明了什么?
a=4,b=3
(3)若把第5行中x=1改為x=4,程序執(zhí)行的結(jié)果是什么?若再把第22,23行一起移到第8行,執(zhí)行的結(jié)果有什么變化?
a=1,b=1
a=3,b=2
3. 上機(jī)編程
【編程 2-1】在練習(xí)1-7中所給出的程序沒有考慮輸入三條邊后是否能夠構(gòu)成三角形的處理。請重新設(shè)計(jì)算法對以上問題進(jìn)行處理,即輸入三角邊后先判斷是否構(gòu)成三角形,若構(gòu)成三角形則求出面積輸出,否則輸出構(gòu)不成三角形的信息。請畫出流程圖或N-S圖,并編寫程序上機(jī)調(diào)試運(yùn)行。
#include
#include
#i
11、nclude
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+b>c&&abs(a-b)
12、ea);
}
else
{
printf("Three sides:a=%d,b=%d,c=%d\n",a,b,c);
printf("這三條邊不能組成三角形!\n");
}
}
【編程 2-2】若實(shí)現(xiàn)從鍵盤上輸入一個(gè)字符,判斷并輸出該字符是以下哪一種的提示信息:①字母;②數(shù)字;③空格;④其他字符。如輸入1,則顯示的信息是:輸入的是數(shù)字字符1。請使用if…else-if語句編程。
#include
#include
void main(void)
{
char c;
printf("請輸入一個(gè)字符:"
13、);
c=getchar();
if(c>='A'&&c<='Z'||c>='a'&&c<='z')
printf("輸入的是字母字符%c\n",c);
else if(c>='0'&&c<='9')
printf("輸入的是數(shù)字字符%c\n",c);
else if(c=='\40')
printf("輸入的是空格字符%c\n",c);
else
printf("輸入的是其他字符%c\n",c);
}【編程 1-3】若某企業(yè)根據(jù)銷售人員的銷售額發(fā)放提成,計(jì)算公式如下(s代表銷售額):
s<200 沒有提成
200≤s<4
14、00 提成5%
400≤s<1200 提成8%
1200≤s<2400 提成8%
2400≤s<4000 提成8%
s≥4000
請分別使用if和switch語句結(jié)構(gòu)分別編寫程序,實(shí)現(xiàn)從鍵盤上輸入銷售額,即輸出銷售額和提成。要求程序具有糾錯(cuò)能力,如輸入負(fù)數(shù)就輸出非法數(shù)據(jù)的提示信息并結(jié)束程序。
if…else-if語句
#include
#include
void main(void)
{
float s;
float income;
printf("請輸入銷售額:");
scanf("%f
15、",&s);
if(s<0)
{
printf("這是非法數(shù)據(jù)!\n");
exit(1);
}
else if(s<200)
{
printf("沒有提成!\n");
exit(1);
}
else if(s<400)
income=(s-200)*0.05;
else if(s<1200)
income=(s-400)*0.08+200*0.05;
else if(s<2400)
income=(s-1200)*0.1+800*0.08+200*0.05;
else if(s<4000)
income=
16、(s-2400)*0.15+1200*0.1+800*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,提成是:%.0f\n",s,income);
}
Switch…case語句
#include
#include
void main(void)
{
float s;
float income;
printf("請輸入銷售額:");
scanf("%f",&s);
17、
if(s<0)
{
printf("這是非法數(shù)據(jù)!\n");
exit(1);
}
if(s<200)
{
printf("沒有提成!\n");
exit(1);
}
switch((int)(s/400))
{
case 0:
income=(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,提成是:%.0f\n",s,income);
}