a[i-1]=a[i+m];
for(i=0;i<=n-m-1;i++)
printf("%c",a[i]);
}
printf("\n");
}
(4)调试报告
1、运行程序,根据提示,首先输入“Todayisagoodday!
”,程序执行,统计出结果;
图1.1
2、输入要删除的单词“good”,显示最后结果“Todayisaday!
”,程序完成!
(如图1.2)
图1.2
2、散列表实现电话号码查找系统
(1)需求分析
1)设每个记录有下列数据项:
电话号码、用户名、地址;
2)从键盘输入各记录,以用户名为关键字建立散列表;
3)采用一定的方法解决冲突;
4)查找并显示给定用户名的记录。
(2)概要设计
1)建立散列表,按照散列表建立的要求,包含有以下三个小步骤:
a、获得用户的用户名,且计算用户名首字母的ASCII码(用字符减去字符‘0’);
b、用ASCII码对散列表的长度求余,则得数组中的储存位置;
c、判断储存位置是否还有数据,用线性法查找空位储存;
2)元素的查找与元素的插入相对应,其操作则在建立的基础上增加输出的语句。
3)用线性探测法解决冲突。
(3)详细设计
#include
#include
#include
//定义一个散列表结构体!
structhashlist
{
charname[20];
charnumber[20];
intadr;
}hash[35];
//调用子程序
voidmain()
{
intBulidHash();
intSearchHash();
voidoutput();
intchoise=0;
//设置功能菜单提示
for(choise=100;choise!
=0;)
{
printf("\nMainMenu\t\n");
printf("1Buildanewrecord\t\n");
printf("2Findoutyourrecord\t\n");
printf("3Outputallinfo\t\n");
printf("0Exittheprogram\t\n");
printf("\npleasechoosethenumbertocontinue:
");
scanf("%d",&choise);
printf("Yourchoise:
%d\n",choise);
//switch语句,选择选中的相应功能
switch(choise)
{
case0:
continue;
case1:
printf("NOWenteringtehBuildHash......\n\n");
BulidHash();
continue;
case2:
printf("EnteringSearchHash......\n\n");
SearchHash();
continue;
case3:
printf("Outputall......\n\n");
output();
continue;
default:
printf("Yourinputnotanum\n");
break;
}
}
getch();//让屏幕暂停,“选择、继续"
}
//散列表建立函数
intBulidHash()
{
inthashweight=0;
inthashadr=0;
inti=0;
charname_1[20];
//提示输入用户名以及输出用户名
printf("\nPleaseinputyourname:
");
scanf("%s",name_1);
printf("YourEnternameis:
%s\n",name_1);
//输出相关的测试语句
printf("Yournameis:
%s\n",name_1);
printf("Thefirstletterofyourname:
%c\n",name_1[0]);
//开始构造散列表
hashweight=name_1[0]-'0';//计算首字符权值
hashadr=hashweight%35;//计算并储存字符串的首地址
printf("hashweight:
%dhashadr:
%d\n",hashweight,hashadr);//输出相关的测试语句
//线性查找判断并记录
for(i=0;i<5;i++){
if(!
strcmp(hash[hashadr].name,"\0"))
{
strcpy(hash[hashadr].name,name_1);
printf("Pleaseinputthetelephonenumber:
");
scanf("%s",hash[hashadr].number);
hash[hashadr].adr=hashadr;
printf("name:
%snumber:
%sadr:
%d\n\n",hash[hashadr].name,hash[hashadr].number,hash[hashadr].adr);
return0;
}
hashadr=hashadr+i;//线性查找
}
printf("outofroom!
\n");
return0;}
//查找并输出函数
intSearchHash()
{
inthashweight=0;
inthashadr=0;
inti=0;
charname_1[20];
//输入用户名
printf("\nPleaseinputyourname:
");
scanf("%s",name_1);
printf("YourEnternameis:
%s\n",name_1);
//输出相关的测试语句
printf("Yournameis:
%s\n",name_1);
printf("Thefirstletterofyourname:
%c\n",name_1[0]);
hashweight=name_1[0]-'0';//计算首字符权值
hashadr=hashweight%35;//计算储存字符串的首地址
printf("hashweight:
%dhashadr:
%d\n",hashweight,hashadr);//输出相关的测试语句
for(i=0;i<5;i++)
{
if(!
strcmp(hash[hashadr+i].name,name_1))
{
printf("Yourneedinguser:
%s\n",hash[hashadr+i].name);
printf("Hisnumber:
%s\n",hash[hashadr+i].number);
return0;
}
hashadr=hashadr+i;//线性查找
}
printf("coudn'tfound!
!
\n");
return0;
}
//输出全部函数
voidoutput()
{
inti=0;
for(i=0;i<35;i++)
{
if(hash[i].adr!
=0)
{
printf("Theuser%d:
%s\n",i,hash[i].name);
printf("Hisnumber:
%s\n",hash[i].number);
printf("Hisaddress:
%d\n",hash[i].adr);
printf("\n");
}
}
return;
}
(4)调试报告
1、调试运行源程序,出现调试界面,根据提示,开始进行调试。
(如图2.1)
图2.1
2、根据提示选择,输入1,建立第一个记录。
根据提示输入第一个用户名。
(如图2.2)
图2.2
3、输入电话号码,enter,显示用户的名字、号码、地址等资料。
(如图2.3)
图2.3
4、继续输入1,建立第二个记录。
根据提示输入第二个用户名。
(如图2.4)
图2.4
5、输入电话号码,enter,显示此用户的名字、号码、地址等资料。
(如图2.5)
图2.5
6、输入2,选择要查找的用户功能,接着输入要查找的用户名。
(如图2.6)
图2.6
7、输入3,选择输出全部用户的信息。
(如图2.7)
图2.7
8、输入0,结束、退出算法程序。
3、学生成绩管理系统
(1)需求分析
编写一个简单的学生成绩管理程序,能实现对学生成绩的简单管理。
要求:
建立一个5个学生的信息登记表,每个学生的信息包括:
学号,姓名,3门课的成绩和总分。
程序运行时显示一个简单的菜单,例如:
1.INPUT(press1)
2.SORT(press2)
3.QUERY(press3)
4.EXIT(press4)
其中:
1.INPUT:
对5个学生的信息进行输入;
2.SORT:
对5个学生的总分按降序排序并显示出来;
3.QUERY:
输入一个学号后,查询显示出该学生的有关信息;
4.EXIT:
退出。
(2)概要设计
1、考虑到要排序,不需要删除操作,采用顺序存储比较方便。
2、每个学生是一个元素,包含3方面的信息,采用结构体定义学生结点。
如:
strucustu1
{intnum;
charname[8];
ints[3];
intscore;
}
学生有5个人,则可以定义一个长度为5的结构体数组,如下:
structstu1student[5];
程序分析:
1.输入学生成绩:
循环输入5个学生各部分信息;
2.排序:
可任意选择排序方法,按总分作为关键字排序,结构体数组支持整个结构体作为一个元素进行赋值;
查找:
按学号作为关键字查找。
(3)详细设计
#include
//定义学生数据表结构体
typedefstructstudent
{
intnum;
charname[8];
intscore;
}student;
//字符串输出函数
voidoutputstring(charp[])
{
inti=0;
while(p[i])
{
printf("%c",p[i]);
i++;
}
}
//显示菜单1
voidmenu1()
{
printf("\n\t*****WelcometoStudentPerformanceManager!
*****\t\n");
printf("\nMainMenu1\t\n");
printf("1Input\t\n");
printf("0Exit\t\n");
printf("\npleasechoosethenumbertocontinue:
");
}
//显示菜单2
voidmenu2()
{
printf("\n\t*****WelcometoStudentPerformanceManager!
*****\t\n");
printf("\nMainMenu2\t\n");
printf("1Input\t\n");
printf("2Sort\t\n");
printf("3Query\t\n");
printf("0Exit\t\n");
printf("\npleasechoosethenumbertocontinue:
");
}
//功能1:
录入5组学生数据
voidinput(studentp[])
{
ints=0;
for(;s<5;s++)
{
printf("PleaseinputtheNo.%dstudent'snumber:
",s+1);
scanf("%d",&p[s].num);
printf("PleaseinputtheNo.%dstudent'sname:
",s+1);
scanf("%s",p[s].name);
printf("PleaseinputtheNo.%dstudent'sscore:
",s+1);
scanf("%d",&p[s].score);
printf("\nDatarecorded!
\n\n");
}
menu2();
}
//定功能2:
按降序从高到低排列学生成绩
voidsort(studenta[])
{
inti,j;
studentp[5];
for(i=0;i<5;i++)
{
p[i]=a[i];
}
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
{
if((p[i].score)<(p[j].score))
{
inttemp;
temp=p[i].score;
p[i].score=p[j].score;
p[j].score=temp;
}
}
printf("Theresultfrommintomaxis:
");
for(i=0;i<5;i++)
printf("%d",p[i].score);
printf("\n");
menu2();//显示菜单2
}
//功能3:
查询某一学生数据
intquery(studentp[],inta)
{
inti=0;
for(;i<5;i++)
{
if(p[i].num==a)
{
printf("Theresultis:
\nNumber\tName\t\tScore\n");
printf("%d\t",p[i].num);;
outputstring(p[i].name);
printf("\t");
printf("%d\n",p[i].score);
printf("Querysucceed!
\n");
menu2();
return0;
}
}
return1;
}
voidmain()
{
studenta[5];
intselect;
intexitd=1;
menu1();//显示菜单1
while(exitd)//判断程序是否退出
{
scanf("%d",&select);
printf("\n");
//定义执行选项功能模块
switch(select)
{
case1:
input(a);break;
case2:
sort(a);break;
case3:
{
intnumselect;
printf("Pleaseinputthestudent'snumber(Press0toreturnMainMenu:
)");
scanf("%d",&numselect);
while(query(a,numselect))
{
printf("\nPleaseinputthenextstudent'snumber:
(Press0toreturnMainMenu:
)");
scanf("%d",&numselect);
}
}break;
case'0':
exitd=0;
default:
printf("\nWrongchoice!
Pleaseselectagain!
\n");
menu2();//显示菜单2
}
}
}
(4)调试报告
1、调试运行源程序,出现调试界面,根据提示,开始进行调试。
(如图3.1)
图3.1
2、输入1,选择开始录入5个学生的数据。
(如图3.2)
图3.2
3、录入完毕,提示Datarecorded!
,此时进入菜单2,选择想要的功能。
(如图3.3)
图3.3
4、输入2,选择降序从高到低输出之前录入的学生的成绩。
(如图3.4)
图3.4
5、接着输入3,查找想要的学生的成绩信息。
(如图3.5)
图3.5
6、输入0,结束、退出算法程序。
二、课程设计总结
通过这次的课程设计,加强了我的动手、思考和解决问题的能力。
作业结果很重要,但作业过程更重要,在这次的作业中,我学到了很多的东西,也积累了关于做这样的课程设计的一些经验。
通过这一次的课程设计,让我对《数据结构》以及其课程设计的知识也有了更深的理解和认识。
在此次的课程设计的过程中,遇到了不少难题,主要是由于我们学完数据结构已经差不多有一个学期的关系,有很多编程上的语句不是很熟练,加上现在正在学java语言,使得有些语句有点混乱,所以造成了很多困扰。
一开始接触到课题时,一点思路都没有,根本就不知道要选