C/C++高级语言程序设计课程设计

C/C++高级语言程序设计课程设计

1. 课程设计任务内容

  1. 分蛋糕(201703-1):小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为al , a2, … an。 小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。
    请问当小明的蛋糕分完时,总共有多少个朋友分到了蛋糕?
  2. 工资计算(201612-2):小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:
    1)个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S -3500元;
    2) A中不超过1500元的部分,税率3%;
    3) A中超过1500元未超过4500元的部分,税率10%;
    4) A中超过4500元未超过9000元的部分,税率20%;
    5) A中超过9000元未超过35000元的部分,税率25%:
    6) A中超过35000元未超过55000元的部分,税率30%;
    7) A中超过55000元未超过80000元的部分,税率35%:
    8) A中超过80000元的部分,税率45%;
    已小明这个月税后所得为T元,请问他的税前工资S是多少元?
  3. 最大的矩形(201312-3):在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1≤i≤n)个矩形的高度是hi。这n个矩形构成了一个直方图,求取直方图中最大矩形10。

2. 问题描述与分析

1. 问题描述
  1. 分蛋糕(201703-1)
    小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为al , a2, … an。 小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。
    请问当小明的蛋糕分完时,总共有多少个朋友分到了蛋糕?
  2. 工资计算(201612-2)
    小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:
    1)个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S -3500元;
  1. A中不超过1500元的部分,税率3%;
  2. A中超过1500元未超过4500元的部分,税率10%;
  3. A中超过4500元未超过9000元的部分,税率20%;
  4. A中超过9000元未超过35000元的部分,税率25%:
  5. A中超过35000元未超过55000元的部分,税率30%;
  6. A中超过55000元未超过80000元的部分,税率35%:
  7. A中超过80000元的部分,税率45%;
    例如,如果小明的税前工资为1000元,则10000-3500=6500元其中不超过1500元部分应缴税1500*3%=45元,超过1500元不超过4500元部分应缴税(4500-1500) *10%=300元,超过4500元部分应缴税(6500-4500)*20%=400元。总共缴税745元,税后所得为9255元。已知小明这个月税后所得为T元,请问他的税前工资S是多少元?
  1. 最大的矩形(201312-3)
    在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1≤i≤n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。请找出能放在给定直方图里面的面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图阴影部分,面积为10。
    直方图
2. 设计分析
  1. 分蛋糕(201703-1)
    根据题干中“他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为al , a2, … an。 小明想分给每个朋友至少重量为k的蛋糕。”可以得知需要定义三个变量分别为n,k,val。由题干信息“对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。”可以得知需要两个判断型语句和一个循环型语句。由最后的问题“总共有多少个朋友分到了蛋糕?”可以得知需要进行累加输出。
  2. 工资计算(201612-2)
    由以下八种情况
    1)个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S -3500元;
    2) A中不超过1500元的部分,税率3%;
    3) A中超过1500元未超过4500元的部分,税率10%;
    4) A中超过4500元未超过9000元的部分,税率20%;
    5) A中超过9000元未超过35000元的部分,税率25%:
    6) A中超过35000元未超过55000元的部分,税率30%;
    7) A中超过55000元未超过80000元的部分,税率35%:
    8) A中超过80000元的部分,税率45%;
    根据税前工资算税后工资相对要容易许多,本题正好相反。从编程方法上来说,一种是将工资段和税率写到程序逻辑中。这种做法修改程序比较难,逻辑也比较复杂。另外一种是查表法,通过查表来计算最后的结果。查表法的优点在于,单有关规定改变时,只需要调整表格,而不需要改变程序逻辑。该问题原始数据可以建两个表格,一是工资收入段表,二是税率表。根据这两个表可以算出收入范围表,即由实际收入得到最高税率是哪一档的表。进一步的计算就变得简单许多。
    例如:如果小明的税前工资为10000元,则10000-3500=6500元其中不超过1500元部分应缴税1500 * 3%=45元,超过1500元不超过4500元部分应缴税(4500-1500) * 10%=300元,超过4500元部分应缴税(6500-4500)*20%=400元。总共缴税745元,税后所得为9255元。根据该例题可以得知算法需要计算各种收入范围后经过判断确定工资最后执行的程序得出税前工资。已知小明这个月税后所得为T元,请问他的税前工资S是多少元?有题干问题得知需要输入一个变量T输出一个结果S。
  3. 最大的矩形(201312-3)
    最大矩形问题是对一个直方图找出其中可以组成矩形最大面积的问题。该问题主要运用的是枚举法。首先在直方图中从左往右进行运算,找出合成矩形的最小高度,然后通过公式得出该矩形的面积,在进行一一的比较,直到找出最大的面积为止,最后输出结果。

3. 算法设计与流程图

  1. 分蛋糕(201703-1)算法设计与流程图
    根据题干可以分析出需要四个部分进行编程。分别为输入:设出三个变量进行输入操作,判断部分为蛋糕是否大于k,第三部分进行计数,第四部分输出。
    判断部分:
while(n--) //采用while用参数控制循环次数
{
   
	scanf("%d",&val);
	if((sub += val) >= k) //累加计算蛋糕重量与k比较判断
{
                        //注意边界条件:最后一个朋友可以不足重量k
		count++;    //计数
		sub=0;     //初始化
	}
}
if(sub>0)   //判断是否剩余蛋糕
count++;

流程图

  1. 工资计算(201612-2)算法设计与流程图
    根据题干以及问题可以分析出算法需要五个部分编程。分别为输入:设一个变量进行输出操作;第二部分计算收入范围利用数组进行储存八种情况工资收入范围;第三部分计算税前工资利用for循环和if判断语句;第四部分定义输出变量进行输出。
    第二部分:利用数组进行储存八种情况工资收入范围
const int SIZE=sizeof(salaryrange)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值