选择结构程序设计典型例题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选择结构,用if语句实现的
b=t;
}
printf("%5.2f,%5.2f\n",a,b);
}
13
例3 输入3个数a,b,c,要求按由小到 大的顺序输出。
14
解题思路:可以先用伪代码写出算法:
if a>b,a和b对换 if a>c,a和c对换 if b>c,b和c对换 顺序输出a,b,c (a是a、b中的小者) (a是三者中最小者) (b是三者中次小者)
23
解法2: #include <stdio.h> void main() 标志变量 {int year,leap; printf("enter year:"); scanf("%d",&year); if (year%4==0) if(year%100==0) if(year%400==0) leap=1; else leap=0; else leap=1; 与if (leap!=0)含义相同 else leap=0; if (leap) printf("%d is ",year); else printf("%d is not ",year); printf("a leap year.\n"); 24 }
16
#include <stdio.h> void main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) 如果 a>c,将a和c对换 { t=a; a=c; c=t; } a是三者中的小者 if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); }
else
disc=b*b-4*a*c;
5
if(fabs(disc)<=1e-6) printf(“方程有两个相等实根: %8.4f\n”,-b/(2*a)); else if( disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf(“方程有两个相等实根:\n”); printf(“x1=%7.2f\nx2=%7.2f\n”,x1,x2); } else { p=-b/(2*a); q=sqrt(-disc)/(2*a); printf(“方程有两个共轭复根:\n”) ; printf(“x1=%7.2f+%7.2fi\n”,p,q); //打印虚根; printf(“x2=%7.2f-%7.2fi\n”,p,q); } }
6
例2 输入两个实数,按代数值由小到大 的顺序输出这两个数。
7
解题思路:
只需要做一次比较,然后进行一次交换即可 用if语句实现条件判断 关键是怎样实现两个变量值的互换
互换前 互换后
A A
★
●
●B
★B
8
C
★
A
★
●B
9
C
★
A
● ★
●B
10
C
★
A
●
● ★B
11
#include <stdio.h> void main()
26
#include <stdio.h> void main() {int year,leap; printf("enter year:"); scanf("%d",&year); if (year%4==0) if(year%100==0) if(year%400==0) leap=1; else leap=0; else leap=1; else leap=0; ifif((year%4==0 (leap) printf("%d is ",year); && year%100!=0) else printf("%d || is (year%400==0)) not ",year); printf("a leap year.\n"); leap=1; } else 27 leap=0;
润年
非润年
20
判别某一年是否闰年,用逻辑表达式表示
闰年的条件是符合下面二者之一:
①能被4整除,但不能被100整除,如2008
②能被400整除,如2000 (year % 4 == 0 && year 100 !=0)
|| year % 400 == 0
如果表达式值为1,则闰年;否则为非闰年
例5 运输公司对用户计算运输费用。路程 (s km)越远,每吨· 千米运费越低。 标准如下:
s < 250 250≤s < 500 500≤s < 1000 没有折扣 2%折扣 5%折扣
1000≤s < 2000
2000≤s < 3000
8%折扣
10%折扣
3000≤s
15%折扣
28
解题思路:
输入a,b,c 计算disc 真 计算两实根x1,x2 disc>0
假
计算输出两共轭虚根
输出x1,x2
4
#include <stdio.h>
#include <math.h>
void main ( ) { double a,b,c,disc,x1,x2,p,q; printf(“输入方程的3个系数(a,b,c):\n”); scanf("%lf%lf%lf",&a,&b,&c); if(fabs(a)<=1e-6)//判断a是否为零 {printf(“\n该方程不是一个二次方程!\n”) ;return;}
17
#include <stdio.h> void main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) 如果 b>c,将b和c对换 { t=b; b=c; c=t; } b是三者中的次小者 printf("%5.2f,%5.2f,%5.2f\n",a,b,c); }
#include <stdio.h> void main() {int year,leap; printf("enter year:"); scanf("%d",&year); if (year%4==0) if(year%100==0) if(year%400==0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf("%d is ",year); if(year%4!=0) else printf("%d is leap=0; not ",year); else if leap (year%100!=0) printf("a year.\n"); leap=1; else if(year%400!=0) leap=0; } else leap=1;
2≤c<4时,d=5%;4≤c<8时,d=8%;
8≤c<12时,d=10%;c≥12时,d=15%
30
#include <stdio.h> void main() { int c,s; float p,w,d,f; printf("please enter price,weight,discount:"); scanf("%f,%f,%d",&p,&w,&s); if(s>=3000) c=12; 输入单价、重量、距离 else c=s/250;
18
例4 写一程序,判断某一年是否闰年。
解题思路:在前面已介绍过判别闰年的方 法 本例用不同的方法编写程序
19
例4 写一程序,判断某一年是否 闰年。
设:leap代表闰年信息,leap=1闰年,leap=0 非闰年
不能被4整除
非润年
被100整除,又能 被400整除 润年 其他,非闰年 被4整除,但不能 被100整除
#include <stdio.h> int main() {int year,leap; printf("enter year:"); scanf("%d",&year); if (year%4==0) if(year%100==0) if(year%400==0) leap=1; else leap=0; 采取锯齿形式 else leap=1; else leap=0; if (leap) printf("%d is ",year); else printf("%d is not ",year); printf("a leap year.\n"); return 0; 25 }
32
f = p * w * s * (1 - d / 100);
printf(“freight=%10.2f\n”,f);
}
33
例6 (教材P89例4.18)
依法纳税问题。
标准如下:应纳税额=(收入-3500) 应纳税额≤ 1500
31
switch(c) { case 0: d=0; break; case 1: d=2; break; case 2: case 3: d=5; break; case 4: case 5: case 6: case 7: d=8; break; case 8: case 9: case 10: case 11: d=10; break; case 12: d=15; break; }
21
用变量leap代表是否闰年的信息。若闰 年,令leap=1;非闰年,leap=0。最 后判断leap是否为1(真),若是,则 输出“闰年”信息
22
解法1 #include <stdio.h> void main( ) { int year, leap=0; scanf(“%d”, &year); /* 输入年份值 */ if ((year%4= =0&&year%100!=0)||(year%400= =0)) leap=1; else leap=0; if(leap= =1) printf(“%d is leap ”, year); else printf(“%d is not leap ”, year); }
15
#include <stdio.h> void main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) 如果 a>b,将a和b对换 { t=a; a=b; b=t; } a是a、b中的小者 if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); }
设每吨每千米货物的基本运费为p,货物重 为w,距离为s,折扣为d 总运费f的计算公式为f=p×w×s×(1-d)
29
折扣的变化规律:
折扣的“变化点”都是250的倍数 在横轴上加一种坐标c,c的值为s/250 c代表250的倍数 当c<1时,表示s<250,无折扣 1≤c<2时,表示250≤s<500,折扣d=2%
选择结构程序设计举例
C语言有两种选择语句:பைடு நூலகம்
(1)if语句,实现两个分支的选择结构
(2)switch语句,实现多分支的选择结构
1
例1 求 ax2 bx c 0 方程的根。
由键盘输入a,b,c。假设a,b,c的值任意, 并不保证b 2 4ac 0 。需要在程序中进行 判别,如果 2 ,就计算并输出方 b 4ac 0 程的两个实根,否则就输出“方程有耳共 轭复根”的信息。
(教材P85例4.14)
2
求 ax2+bx+c=0 方程的解首先要注意的问题:
1、a=0 ,方程不是二次方程 2、b2-4ac=0, 有两个相等的实根 3、b2-4ac>0, 有两个不相等的实根 特殊条件的处理
4、b2-4ac<0, 有两个共轭复根
5、如何判断实数为零(或大于零,或小于零)
3
解题思路:
{ float a,b,t;
scanf("%f,%f",&a,&b); if(a>b) { t=a; a=b;
如果a>b
将a和b的值互换
b=t;
}
printf("%5.2f,%5.2f\n",a,b);
}
12
#include <stdio.h> void main()
{ float a,b,t;
scanf("%f,%f",&a,&b); if(a>b) { t=a; a=b;