用折半查找法猜篮球的价格.docx
《用折半查找法猜篮球的价格.docx》由会员分享,可在线阅读,更多相关《用折半查找法猜篮球的价格.docx(13页珍藏版)》请在冰点文库上搜索。
用折半查找法猜篮球的价格
题目:
用折半查找法猜篮球的价格
一、课程设计时间
2010~11第2学期第15周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
用户从键盘输入篮球的价格(假设价格在1~200元之间,并且为整数),让计算器从1元开始用折半法猜测篮球的价格。
若计算器的猜测价格偏高,用户输入“高”;若计算器的猜测价格偏低,用户就输入“低”;若计算器猜对了,则显示“正确”。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“输入篮球价格”、“计算器开始猜测”、“退出”3项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩:
六、教师评语:
目录
一、需求分析1
二、设计要求2
三、主要界面截图3
四、技术要点6
五、个人总结6
六、参考文献6
七、源程序............................................................8
一、需求分析
经过对程序设计题目的分析可知,整个程序大致分为三个模块,其中每一个模块对应一个函数,实现一个功能,他们的功能分别是:
篮球价格获取函数(get),出现目录的输出函数(menu),篮球价格猜测函数(guess),以及主函数(main)。
1、篮球价格获取函数…主要实现程序最初运行时用户对篮球价格的设定(要求价格在1-200元之间,并且为整数,若超出范围则提示重新输入);
2、目录输出函数…在程序运行时输出目录,使用户界面更加友好
3、篮球价格猜测函数…实现的功能是让计算器从1元开始用折半法猜测篮球的价格。
若计算器的猜测价格偏高,用户输入“g”;若计算器的猜测价格偏低,用户就输入“d”;若计算器猜对了,则显示“正确”。
;
二、设计分析
1、程序总体结构图
将getch()函数的返回值赋给c
定义变量charc,intprice
choice=3
是
否
choice=1
choice=2
输入篮球价格
是
否
猜测价格
退出main函数
2、具体功能框图
定义变量初始化
(1)篮球价格获取函数(get)
当输入价格不在1-200元以内
提示用户输入篮球价格
输入价格给变量price
把price值返回给guess函数
(2)篮球价格猜测函数(guess)
m=(l+h)/2;当赋给m的值不等于真实价格时
变量初始化
输入字符串判断是否偏高
“d”
“g”
把m-1的值赋值
给h变量
把m+1的值赋值
给l变量
输出“猜测正确”
三、主要界面截图
四、技术要点
本程序主要由两个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,添加数据函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。
1、篮球价格获取函数get
由于在题设中对篮球的价格进行了设定,所以必须在此函数中进行对被输入的篮球价格作出判断,并提示用户重新输入一个符合条件的价格,因此在此处用一个while循环进行价格的获取,在最后将获取的价格返回给篮球价格猜测函数guess。
具体程序段如下:
intget(void)/*定义int格式的篮球价格输入函数*/
{
intprice;
while(price<1||price>200)
{
printf("请输入篮球价格(200元之内,并且要求为整数):
");
scanf("%d",&price);
}
return(price);
}
2、目录输出函数
该函数没有具体的功能,只负责程序目录的输出:
在被主函数调用后用一连串的printf函数进行输出,形成一个良好的用户界面。
具体程序段如下:
voidmenu()
{
printf("***********************欢迎使用折半法猜篮球价格程序****************************\n");
printf("\n");
printf("1.输入篮球价格\n");
printf("2.开始猜测\n");
printf("3.退出程序\n");
printf("\n");
printf("*******************************************************************************\n");
printf("*****************************版权所有,仿冒必究*********************************\n");
}
3、篮球价格猜测函数guess
题目要求的篮球价格猜测的方法是折半法,即先用一个处于比较范围中央的数值与被比较数值进行比较,由用户对比较结果作出判断,通过循环的多次比较、用户判断、程序自动赋值,最终找到与被比较数值相同的结果,在此函数中使用了strcmp函数对用户输入的判断结果进行判断后输出提示以进行下一步用户判断。
具体的程序段如下:
voidguess(intplace)/*篮球价格猜测函数,参数为int类型的place*/
{
intm,l=1,h=200;
chars[30]={""};
while((m=(l+h)/2)!
=place)
{
printf("计算器猜测的价格是:
%d\n",m);
printf("如果价格高,请输入“g”;如果价格低,请输入“d”\n");
fflush(stdin);
if(strcmp(gets(s),"g")==0)/*strcmp函数比较输入的字符与字符g的大小,并给以判断*/
h=m-1;
elseif(strcmp(s,"d")==0)/*strcmp函数比较输入的字符与字符d的大小,并给以判断*/
l=m+1;
}
printf("计算器所猜的结果为%d,猜测结果正确!
\n",m);
}
五、个人总结
通过20个学时的努力,我完成了这次的C语言程序设计任务。
以往我们只进行单一功能、单一片段的程序编写,任务简单。
而这次的任务给了我们一个全新的视角,让我们进行一个全局性的“小”工程,从而完成一个多功能、各部分联系紧密的功能性程序体,实现了由部分到整体的飞跃,让我获益匪浅。
六、参考文献
谭浩强.C程序设计.北京:
清华大学出版社,2005
七、源程序
#include
#include
#include/*为exit函数所在的头文件*/
#include/*为getch函数所在的头文件*/
voidmenu();
intget(void)/*定义int格式的篮球价格输入函数*/
{
intprice;
while(price<1||price>200)
{
printf("请输入篮球价格(200元之内,并且要求为整数):
");
scanf("%d",&price);
}
return(price);
}
voidmenu()
{
printf("***********************欢迎使用折半法猜篮球价格程序****************************\n");
printf("\n");
printf("1.输入篮球价格\n");
printf("2.开始猜测\n");
printf("3.退出程序\n");
printf("\n");
printf("*******************************************************************************\n");
printf("*****************************版权所有,仿冒必究*********************************\n");
}
voidguess(intplace)/*篮球价格猜测函数,参数为int类型的place*/
{
intm,l=1,h=200;
chars[30]={""};
while((m=(l+h)/2)!
=place)
{
printf("计算器猜测的价格是:
%d\n",m);
printf("如果价格高,请输入“g”;如果价格低,请输入“d”\n");
fflush(stdin);
if(strcmp(gets(s),"g")==0)/*strcmp函数比较输入的字符与字符g的大小,并给以判断*/
h=m-1;
elseif(strcmp(s,"d")==0)/*strcmp函数比较输入的字符与字符d的大小,并给以判断*/
l=m+1;
}
printf("计算器所猜的结果为%d,猜测结果正确!
\n",m);
}
main()
{
charc;
intprice;
menu();
c=getch();
while
(1)
switch(getch())
{
case'1':
price=get();break;
case'2':
guess(price);break;
case'3':
exit(0);
}
menu();
c=getch();
}