课程设计文档Word文件下载.docx
《课程设计文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计文档Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
【程序5】
一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。
编程求它在第十次落地时,共运动了多少米?
第十次反弹多高?
典型的循环问题,设置两个变量分别记录小球反弹的高度和当前运动的距离,循环十次即得到结果。
【程序6】
从键盘上输入一个表示年份的整数,判断该年是否是闰年,输出结果显示在屏幕上。
计算闰年的方法用自然语言描述如下:
如果某年能被4整除但不能被100整除,或者概念能被400整除则该年为闰年。
本题目主要是考虑if语句中的逻辑表示式的正确描述。
【程序7】
水仙花数指一个三位数,其各位数字的立方和等于该数本身,例如153=13+53+33。
编程求出所有的水仙花数。
用穷举法对100到999之间的数字进行数位拆分,然后经过一个if语句进行判断,将满足水仙花数条件的数打印输出即可。
【程序8】11
编程实现从键盘输入两个正整数,求它们的最大公约数和最小公倍数并打印在屏幕上。
用辗转相除法求出两数的最大公约数,然后用两数的乘积除以最大公约数即可得到两数的最小公倍数。
【程序9】
编程求所有满足abcd=(ab+cd)2的四位数,即将四位数分为两段,使之相加求和后平方,结果等于自身。
用穷举法对1000到9999的所有四位数逐个分解为前后两个数字,再对其进行判断,看是否满足要求,若满足则打印输出,否则进行下次循环。
【程序10】
用选择排序法对一组数据由小到大进行排序,数据分别为526、36、2、369、56、45、78、92、125、52。
选择排序法是从待排序的区间中经过比较,选出最小的数存放在a[0]中(经过交换),再从剩余的未排序的9个数中再选出最小的数存放于a[1]中,以此类推,经过9趟选择和交换则排序完成。
要注意它与冒泡排序的不同,冒泡排序是每趟排序边比较边交换,而选择排序是一趟比较完成后仅交换一次。
【程序11】
小明买橙子,每个橙子1.8元,小明第一天买1个柚子,第二天开始每天买前一天的三倍,直到购买的橙子个数为不超过100的最大值,编程求小明每天平均花多少钱。
利用循环控制最后一天不超过100个橙子,将每天的花销及天数累加起来,求得平均值。
【程序12】
变成求出一个整数的任意次方的最后三位数,即求x^y的最后三位数,其中x和y从键盘输入。
一个整数的任意次方很可能产生越界情况,因此要考虑计算结果是否越界的问题,要避免产生越界问题同时又不使程序结果产生误差。
【程序13】
根据输入的三角形的三条边的值,判断三角形的类型(等边、等腰、直角、普通、非三角形)并输出。
先根据两边之和是否大于第三条边来判断是否能够成三角形,若能构成三角形则进一步根据边的值判断是什么类型的三角形。
【程序14】
完全平方指用一个整数乘以自己例如1*1,2*2,3*3等,依此类推。
若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。
在所有的三位整数100到999中查找符合如下条件的整数在屏幕上输出:
这个数既是完全平方数,又有两位数字相同,如121(11的平方)、144(12的平方)等。
先利用循环判断一个100到999的数是不是完全平方数,若是则进一步分离各位数字,判断是否有两位相同。
【程序15】
有一种六位数,它本身是一个整数的平方,而且它的第三位和高三位也分别是一个整数的平方,如224625=4752,且225=152,625=252。
求满足该条件的所有六位数。
穷举法。
利用循环对100000到999999之间的所有数按条件进行试探。
【程序16】
可逆素数是指将一个素数的各位数字顺序地倒过来构成的反序数依然是素数,按以上叙述求出所有的四位素数。
定义一个函数用于判断参数是否是素数,对1000到9999之间的数进行穷举,找出符合条件的数并输出。
【程序17】
已知某公司员工的工资底薪是500元,员工的销售额与提成的计算方式如下:
销售额≤没有提成
<销售额≤5000提成8%
5000<销售额≤10000提成10%
销售额>10000提成12%
利用switch语句编写程序,实现输入员工的销售额计算员工工资。
先根据员工销售额计算出提成系数,利用switch语句根据系数计算出应发工资。
【程序18】
打印出以下杨辉三角(要求打印10行)。
1
11
121
1331
14641
……
想要打印杨辉三角,首先要找出图形中数字的规律,即每行第一列和对角线数字均为1,其余数字为上一行同列数字与上一行前列数字之和。
数据存储于二维数组,利用循环输出10行杨辉三角。
【程序19】
班里来了个新同学,很喜欢学数学。
同学问她今年多大,她说:
“我的年龄的平方是个三位数,立方是个四位数,四次方是个六位数;
年龄的三次方和四次方正好用遍0、1、2、3、4、5、6、7、8、9这十个数字,那么大家猜猜我年龄多大?
”
首先考虑年龄的范围,因为17的四次方是83521,小于六位,22的三次方是10648,大于四位,因此年龄的范围就确定出来了,即18至21。
然后对18到21之间的数字进行穷举,分别计算出它们的三次方和四次方,并将结果的四位数和六位数存于数组中,再对数组中的这十个数字进行判断,看是否0到9每个数字出现了一次。
【程序20】
有一个八层教学楼,某时间在楼中上课的学生数量共有765人,而且恰巧每层的学生数量都是楼下的两倍,编程求一楼和八楼的学生人数。
穷举法,对一楼的学生人数进行穷举,每次计算出一楼到八楼的所有学生人数,判断是否等于总学生人数765。
【程序21】24
编程实现任意输入一行字符(长度不超100),统计其中有多少个单词并输出。
其中,每两个单词之间以空格分隔开,且最后的字符不能为空格。
首先使用gets()函数将输入的字符串保存在一个字符数组中,然后判断数组中第一个字符是否为结束符或空格,如果是则输出结果,否则则说明是一串正常字符。
利用循环,在遇到结束符之前,统计空格数量,空格数量加一即为单词数。
【程序22】
不使用字符串处理函数strcpy()来实现字符串的复制。
输入一个字符串,拷贝到另一个字符串中,并打印输出。
能够使用gets()和puts()进行字符的获取和输出。
利用循环依次赋值进行拷贝,另外应注意结束符的处理。
【程序23】
统计一个长度为十的整型数组中,最大数和次大数、最小数和次小数的值及下标,要求只能使用一次循环,即最多循环十次。
本题很简单,要注意题目要求每个数只能读取一次。
【程序24】
已知有两个长度为5的有序整形数组(升序排列),编程将其合并为一个长度为10的数组,使其依然有序。
两数组中的值为运行时由键盘输入。
两个数组进行合并,首先定义出新的大小为10的数组,然后利用两数组的下标进行从前到后循环,每次从两数组中挑一个较小的从前到后赋给新数组,循环结束后再把剩下的数赋值过去,合并完毕。
【程序25】
strlen()函数是C函数库中求字符串长度的函数,请使用递归自己实现这个函数。
用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
【程序26】
假设有个同学在爬楼梯,她能够一步上1个台阶、2个台阶或3个台阶,问这个同学上n层台阶的楼,总共有几种走法。
1.程序分析:
使用递归思想,类似于“斐波那契数列”的规律。
【程序27】
使用指针实现两个字符串的连接,比如两个字符串“Iam”和“astudent.”,连接后变成“Iamastudent”。
定义一个连接函数connect(char*a,char*b,char*c),用于将a和b为首元素指针的两个字符串连接起来,并将首元素地址赋给c。
连接操作使用循环,利用指针+1后移操作,分别将指针a和b所指向字符依次赋给c,最后须注意赋予结束标记。
【程序28】
寒假马上要来了,使用typedef定义一个寒假结构体类型,包含以下三个成员变量:
放假日期(char[20])、假期天数(int)、假期备注(char[100])。
在主函数中定义一个该结构体类型的指针,使用malloc()为其动态分配内存,然后实现程序运行时假期的各项信息的输入和打印输出,最后使用free()释放内存。
在后面要学习的《数据结构》中,这种结构体指针的定义和动态分配内存的方法非常常见,若不熟悉typedef的使用方法,XX一下。
【程序29】
判断一个数是否是数组中的成员(用二分法查找)
已知数组a中一共有10个有序的整数(由小到大排列)。
现在从键盘上输入一个数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置,否则打印“找不到该数字”。
①设待查找的数为k,定义三个变量low、high、mid分别代表查找范围的顶部、底部和中间位置的数组下标,初始时low=0,high=9,mid=(low+high)/2,把数分成以a[mid]为中点的两段范围。
②判断k是否等于a[mid],若是,则找到。
③若k大于a[mid],则k
必在数组的后半段范围,舍弃前半段,在a[mid+1]至a[high]中继续查找。
反之则在a[low]至a[mid-1]的前半段进行查找,重复以上步骤,逐步缩小查找范围。
④当low>
high的时候,说明所有数字均已找遍都未找到想要的值,提示查找失败信息。
【程序30】
使用递归实现题目29的二分查找。
定义一个递归二分查找函数供主函数调用,由于是递归进行查找,因此查找数组、要查找的值、当前查找的范围low和high都应作为该递归函数的参数。
递归函数的出口有两个,一个是low>
high(说明没找到),另一个是a[mid]==k(说明找到了),其余情况就是要查找的值落在前半段或后半段,都应递归调用自身,但根据前半段还是后半段的不同,应设置不同的low、high参数值。
(二)综合训练
任选其一。
(1)只能使用C语言,源程序要有适当的注释,使程序容易阅读
(2)综合类题目采用文本菜单界面,调用界面和各个功能的操作界面应尽可能清晰美观!
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
1、学生信息管理系统设计(结构体数组、函数、指针、算法、流程结构等的综合应用)
对一个有stuNo个学生的班级,使用该系统实现对班级学生信息的录入、显示、查询、按成绩排序、求平均分、信息修改、添加、删除等操作。
功能要求:
(1)本系统采用一个结构体数组来存储班级所有学生的信息,每个结构包括:
学号、姓名、班级和成绩。
其中班级又是一个结构体,包含专业名称和班号。
(2)本系统显示菜单:
请选择菜单:
1.信息录入。
学生信息初始化,先询问要录入的学生个数,然后交互式从键盘输入所有学生的各项信息。
PS:
①信息录入只能做一次,若重复录入则会提示返回主菜单。
②规定不能有学号重复出现,因此录入时须检查录入的学生学号是否有重复,若重复则提示重新输入,如第二张图所示。
2.显示全部。
从前到后依次打印输出所有学生的完整信息。
3.学生查询。
可根据学号查询指定学生信息,若存在则打印信息,否则进行提示。
4.成绩排序。
对所有学生按成绩进行由高到低的降序排列,并打印排序结果。
5.平均成绩。
求出所有学生的平均成绩并打印“学生们的平均成绩为:
XX.XX”。
6.信息修改。
可修改指定学号学生的所有信息,选择该菜单后会提示输入(要修改的)学生的学号,去已有信息中查找,若未找到则提示不存在,返回主菜单,如图1;
若找到该学生则打印该学生信息,并提示输入修改后的新信息,输入完毕则提示修改成功。
这里也需要注意,修改学生信息时也需要判别是否输入了与其它学生重复的学号,若有重复则类似于信息录入时,提示重新输入,但允许学号和自己修改之前一样。
7.添加学生。
班里来了新同学,需要添加新的学生信息。
①由于学生信息存于结构体数组中,有先后次序,因此添加时需输入要插入的位置,需要对位置进行是否合法的判断,比如当前只有一个学生王一涵,合法的添加位置只能有1和2,其它位置会报错并返回主菜单,如图:
②
添加新学生信息时也需要判别是否与已有学生的学号重复,如图:
③
输入了正确的位置和正确的学号,则添加成功(能够用显示全部来验证),如图:
8.删除学生。
班里有同学转学,需要从信息表中删除她的信息,为方便起见我们使用学号,而非位置来指定要删除的学生。
选择菜单后,输入要删除的学生学号,若该学生不存在则提示不存在信息并返回主菜单;
若存在则在信息表中删掉她的信息。
0.退出系统。
退出主菜单,显示“按任意键继续…”。
2、图书信息管理系统设计
图书信息包括:
书号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
●系统以菜单方式工作
●图书信息录入功能(需保证书号无重复)
●显示全部图书信息
●图书信息查询功能(按书号查询或者按书名查询)
●按出版时间排序功能
●图书信息修改功能(需保证书号无重复)
●图书信息添加功能(需保证书号无重复)
●图书信息删除功能
3、车票管理系统
一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。
如
班次
发车时间
起点站
终点站行车时间
额定载量
已定票人数
1
8:
00
上海南
杭州
2
45
30
2
6:
30
嘉兴
杭州
0.5
40
40
3
7:
0.5
40
20
4
10:
2
…
用c语言设计一系统,能提供下列服务:
(1)录入班次信息,可不定时地增加班次数据。
(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:
可按班次号查询,可按终点站查询。
(4)班次排序,按发车时间从早到晚进行排序。
(5)修改班次信息,可按班次号对该班次信息进行修改。
(6)删除班次信息,可删掉不需要的班次。
(7)可经过系统进行售票、退票:
①当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。
②退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
4、学生选课系统
假定有n门课程,每门课程有课程编号,课程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于15)自由选课。
试设计一个选修课程系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)课程信息和学生选课信息录入功能(课程信息可用文件保存)
(3)全部课程信息浏览功能
(4)根据课程编号、课程名称查询功能
(5)根据课程的开课学期进行排序功能
(6)统计所有课程总学分、总学时、实验或上机学时功能
(7)添加新课程功能
(8)修改课程信息功能
(9)删除课程信息功能
(10)学生选课、退课功能
5、职工工资管理系统
功能设计要求
1.输入记录:
将每一个职工的姓名、ID号(ID号不能有重复)以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。
该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
2.显示记录:
显示所有职工的信息。
3.记录查询:
根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。
4.记录排序:
根据职工的ID号进行由小到大升序排列并打印。
5.添加记录:
能够添加职工的信息记录,需要对ID号进行规避重复。
6.修改记录:
能够对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。
7.删除记录:
可删除数据文件中的任一记录。
8.统计:
①计算各项工资平均工资及总工资。
②统计符合指定条件(如职工工资前三项之和在3000元以上、3000~元、~1000元)以内的工资职工人数及占总职工人数的百分比。
③按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。
例如:
职工工资信息表
ID号姓名基本工资职务工资津贴医疗保险-公积金-总工资
01张望12867941981091352034
02李明1185628135941141740
03王小民8954389864731294
04张效章13508682101161502162
05彭山7453988461681098
各项平均工资1092.2625.214588.8108