2.1.7分支结构程序设计 - 分支结构程序设计_例题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(如 2009-08-01)是打鱼还是晒网?
【例题三】
1.问题描述 输入月薪 salary,输出应交的个人所得税 tax(保留 2 位小数)。按照 2011 年开始实
行的新的个人所得税法,计算公式为: tax = rate * (salary - 3500) - deduction 当 salary ≤3500 时,rate = 0、deduction = 0 当 3500 < salary ≤ 5000 时,rate = 3%、deduction = 0 当 5000 < salary ≤ 8000 时,rate = 10%、deduction = 105 当 8000 < salary ≤ 12500 时,rate = 20%、deduction = 555 当 12500 < salary ≤ 38500 时,rate = 25%、deduction = 1005 当 38500 < salary ≤ 58500 时,rate = 30%、deduction = 20 时,rate = 35%、deduction = 5505 当 83500 < salary 时,rate = 45%、deduction = 13505
2.问题分析 本案例实际包含着一个简单的数学问题。从某天起,每 3 天打鱼,每 2 天晒网,打鱼和
晒网每五天就是一个轮回或周期。因此,可以根据总天数除 5(3 天打鱼+2 天晒网)的余数 来确定是打鱼还是晒网。
实现要点:输入一个天数 n,计算 n%5 余数,判断结果与 3 的大小,利用选择结构语句 if 来实现。
【例题四】
1.问题描述 将一个百分制成绩转换为五分制成绩。转换规则:大于等于 90 分为 A,小于 90 且大于
等于 80 为 B,小于 80 且大于等于 70 为 C,小于 70 且大于等于 60 为 D,小于 60 为 E。要求: 输入一个整数的百分制成绩,输出对应的五分制成绩。使用 switch 语句。
【例题二】
1.问题描述 中国有句俗语叫“三天打鱼两天晒网”。某人从某天起,开始“三天打鱼两天晒网”,
问这个人在以后的第 n 天中是“打鱼”还是“晒网”。 输入天数 n(大于等于 0 的整数),输出第 n 天是“打鱼”还是“晒网”。 运行示例 1: 输入天数 n: 100 打鱼 运行示例 2: 输入天数 n: 34 晒网
【例题一】
1.问题描述 模拟交通警察的雷达测速仪。程序输入汽车速度,如果速度超出 60(mph),则显示
“超速”,否则显示“正常”。 运行示例 1: 请输入车速:47 正常 运行示例 2: 请输入车速:74 超速 运行示例 3: 请输入车速:60 正常
2.问题分析 这是一个简单的两分支控制问题。程序的流程也很简单,输入车速,判断车速是否超过
switch (grade) { case grade>=90 || grade==100: printf(“A\n”); break; ……. } 这样的设计方式连编译都不能通过。正确的做法是将百分制成绩转换为若干类,并根据 题目要求针对各类输出相应的五分制成绩。基本的转换方法是利用求整的除法 grade/10, 就可以将百分制成绩转换为 0~10 共 11 类。 (2)实现要点:将 grade/10 作为 switch 中的表达式,case 中的常量表达式就可以分 为:10/9,8,7,6,其他,共 5 类。
3.程序实现
#include<stdio.h> int main(void) {
int decution; double rate,salary,tax; printf("Enter the salary: "); scanf("%lf",&salary); if(salary<=3500) { rate=0;decution=0;} else if(salary<=5000) {rate=0.03;decution=0; } else if(salary<=8000) {rate=0.1;decution=105; } else if(salary<=12500) {rate=0.2;decution=555; } else if(salary<=38500) {rate=0.25;decution=1005; } else if(salary<=58500) {rate=0.3;decution=2755; } else if(salary<=83500) {rate=0.35;decution=5505; } else {rate=0.45;decution=13505; } tax=rate*(salary-3500)-decution; printf("tax = %.0f\n",tax); return 0; }
60,如果是则显示超速,否则显示正常。
3.程序实现 #include <stdio.h> int main(void) { int velocity; printf("请输入车速:); scanf("%d",&velocity); if (velocity > 60) printf("超速\n"); else printf("正常\n"); return 0; }
2.问题分析 (1)问题分析:switch 语句要求 switch 之后的表达式和 case 中的常量表达式的值是
可枚举的离散值,一般是整型或字符型。程序根据比较 switch 之后的表达式与哪个 case 中 的常量表达式相等来决定执行语句的入口。初学者经常犯的错误是将 case 中的表达式写成 逻辑判别式,比如:
2.问题分析 (1)问题分析:本案例要求完成个人应交个人所得税问题的求解,首先我们必须明确
所得税计算规则,然后才能根据规则设计相应的算法。 (2)实现要点:属于多分支控制结构。根据规则,个人应交所得税数额与个人月薪所
处区间有关,计算规则分有多种情况,因此采用了多分支的控制结构,可通过多分支 else-if 语句实现。
3.程序实现 #include <stdio.h> int main(void) { int n;
scanf(“%d”,&n);
/*读入天数*/
if(n%5>=3) printf(“晒网\n”);
else printf(“打鱼\n”);
return 0;
}
4.思考
如果指定一天(如 2009-01-01)算第 1 天,三天打鱼两天晒网,那么如何判别某天