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)/sizeof(int);//计算数组的长度const使数
int range[SIZE];                             值保持不变
for(int i=1
题目1:写一个函数计算下列函数的值f(0),f(3),f(-3)。测试之 题目2:写一个函数可以打印下面的图案 * *** ***** ******* ***** *** * 要求每个打印语句只打印一个*号 ,测试之 题目3:写一个函数void maxMinAver(int *data, int *max, int *min,float * ave,int size), 求一组数据的最大值、最小值和平均值,测试之。其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。 要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。测试之 题目4 写一个函数用指针型字符串实现两个字符串比较,int mystrcmp(const char *str1, const char *str2),如果大于返回1,等于返回0,小于返回-1,测试之 题目5写一个函数求求圆周率的近视值,精确到小数7位。计算公式是 题目6定义一个学生结构体,取别名STU,包含学号、姓名、数学、语文、计算机、英语等课程成绩,还有总分和平均分,写一个函数实现求一组学生每个学生各门课程的平均值,函数原型为float ave(STU stu[],int size)。测试之。 题目7 写一个函数能够从文件读入一组学生STU的信息,保存到一个结构体数组中。测试之 题目8 写一个函数能够输出某一学生结构体数组STU stu[10]的信息和每个人的总分、平均分到某一文本文件中,测试之。输出格式是: “%s %s %d %d %d %d %d %5.2f” 题目9 写一个函数能够打印输出学生结构体数组STU stu[10]的信息到屏幕上,测试之 题目10 写一个函数能够把一组学生成绩信息按总分进行排序,测试之。 题目11 写一个函数能够查找给定学号的学生成绩信息,如果找到打印成绩信息,如果没有,显示“not found!”.测试之。 题目12 设计一个界面函数,包含上述11个题目的调用,即 请选择 1 调用第一个函数(具体的函数名) 2 调用第二个函数(具体的函数名) 3 4 。。。 。。。 5 10 调用第10个函数(具体的函数名) 继续吗?输入y继续下一次选择,输入n结束 题目13 创建一个工程文件,包含三个文件,第一个是主函数所在的源文件,含有显示界面,选择1-10,调用不同的函数,第二个是各个函数所在的源文件,第三个是各个函数原型所在的头文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值