数据结构课程设计Word文档下载推荐.docx
- 文档编号:6625772
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:27
- 大小:361.75KB
数据结构课程设计Word文档下载推荐.docx
《数据结构课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。
main()
{
inti,j,n=0,m=0,zimu=0,number=0,note=0,space=0;
//定义变量并赋初值
chara[100];
//定义数组范围
charb[10];
printf("
pleaseinputastring:
"
);
//输入文章内容并存放在数组a[]中
for(i=0;
i<
=n;
i++){
scanf("
%c"
&
a[i]);
if(a[i]=='
\n'
)
break;
n++;
//统计输入的个数
}
\nYourstringis:
//统计字母、数字、符号、空格的个数
n;
printf("
a[i]);
if(a[i]>
=65&
&
a[i]<
=90||a[i]>
=97&
=122)
zimu++;
=48&
=57)
number++;
=0&
=47&
a[i]!
=32||a[i]>
=58&
=64||a[i]>
=91&
=96||a[i]>
=123&
=254)
note++;
if(a[i]==32)
space++;
\nThestatisticalresultsareasfollows:
\n"
zimu:
%d\nnumber:
%d\nnote:
%d\nspace:
%d\n"
zimu,number,note,space);
//输出zimu,number,note,space个数
Thewholenumberis:
%d\n\n"
n);
//输出输入的个数
Nowdeletethenote:
//输入删除的内容
for(j=0;
j<
=m;
j++){
b[j]);
if(b[j]=='
m++;
for(i=0,j=0;
if(a[i]==b[j]&
a[i+m-1]==b[m-1]){
a[i]=a[i+m+1];
if(a[i]==a[i+m+1])
break;
}
\nThefinalrusultis:
//删除输入的内容
if(i==0&
a[i+m]==32){
for(i=i;
i++)
//删除的单词后的空格也删除;
for(i=0;
=n-m-1;
i++)
printf("
else
{
a[i-1]=a[i+m];
}
(4)调试报告
1、运行程序,根据提示,首先输入“Todayisagoodday!
”,程序执行,统计出结果;
图1.1
2、输入要删除的单词“good”,显示最后结果“Todayisaday!
”,程序完成!
(如图1.2)
图1.2
1)设每个记录有下列数据项:
电话号码、用户名、地址;
2)从键盘输入各记录,以用户名为关键字建立散列表;
3)采用一定的方法解决冲突;
4)查找并显示给定用户名的记录。
1)建立散列表,按照散列表建立的要求,包含有以下三个小步骤:
a、获得用户的用户名,且计算用户名首字母的ASCII码(用字符减去字符‘0’);
b、用ASCII码对散列表的长度求余,则得数组中的储存位置;
c、判断储存位置是否还有数据,用线性法查找空位储存;
2)元素的查找与元素的插入相对应,其操作则在建立的基础上增加输出的语句。
3)用线性探测法解决冲突。
conio.h>
string.h>
//定义一个散列表结构体!
structhashlist
charname[20];
charnumber[20];
intadr;
}hash[35];
//调用子程序
voidmain()
intBulidHash();
intSearchHash();
voidoutput();
intchoise=0;
//设置功能菜单提示
for(choise=100;
choise!
=0;
{
\nMainMenu\t\n"
1Buildanewrecord\t\n"
2Findoutyourrecord\t\n"
3Outputallinfo\t\n"
0Exittheprogram\t\n"
\npleasechoosethenumbertocontinue:
scanf("
%d"
choise);
Yourchoise:
%d\n"
choise);
//switch语句,选择选中的相应功能
switch(choise)
case0:
continue;
case1:
NOWenteringtehBuildHash......\n\n"
BulidHash();
continue;
case2:
EnteringSearchHash......\n\n"
SearchHash();
case3:
Outputall......\n\n"
output();
continue;
default:
Yourinputnotanum\n"
break;
getch();
//让屏幕暂停,“选择、继续"
//散列表建立函数
intBulidHash()
inthashweight=0;
inthashadr=0;
inti=0;
charname_1[20];
//提示输入用户名以及输出用户名
\nPleaseinputyourname:
%s"
name_1);
YourEnternameis:
%s\n"
//输出相关的测试语句
Yournameis:
Thefirstletterofyourname:
%c\n"
name_1[0]);
//开始构造散列表
hashweight=name_1[0]-'
0'
;
//计算首字符权值
hashadr=hashweight%35;
//计算并储存字符串的首地址
hashweight:
%dhashadr:
hashweight,hashadr);
//输出相关的测试语句
//线性查找判断并记录
for(i=0;
i<
5;
if(!
strcmp(hash[hashadr].name,"
\0"
))
{
strcpy(hash[hashadr].name,name_1);
printf("
Pleaseinputthetelephonenumber:
scanf("
hash[hashadr].number);
hash[hashadr].adr=hashadr;
name:
%snumber:
%sadr:
%d\n\n"
hash[hashadr].name,hash[hashadr].number,hash[hashadr].adr);
return0;
hashadr=hashadr+i;
//线性查找
outofroom!
return0;
//查找并输出函数
intSearchHash()
inthashweight=0;
//输入用户名
//计算储存字符串的首地址
//输出相关的测试语句
5;
strcmp(hash[hashadr+i].name,name_1))
{
printf("
Yourneedinguser:
hash[hashadr+i].name);
Hisnumber:
hash[hashadr+i].number);
return0;
}
hashadr=hashadr+i;
coudn'
tfound!
!
//输出全部函数
voidoutput()
inti=0;
35;
if(hash[i].adr!
=0)
Theuser%d:
i,hash[i].name);
hash[i].number);
Hisaddress:
hash[i].adr);
return;
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,结束、退出算法程序。
编写一个简单的学生成绩管理程序,能实现对学生成绩的简单管理。
建立一个5个学生的信息登记表,每个学生的信息包括:
学号,姓名,3门课的成绩和总分。
程序运行时显示一个简单的菜单,例如:
1.INPUT(press1)
2.SORT(press2)
3.QUERY(press3)
4.EXIT(press4)
其中:
1.INPUT:
对5个学生的信息进行输入;
2.SORT:
对5个学生的总分按降序排序并显示出来;
3.QUERY:
输入一个学号后,查询显示出该学生的有关信息;
4.EXIT:
退出。
1、考虑到要排序,不需要删除操作,采用顺序存储比较方便。
2、每个学生是一个元素,包含3方面的信息,采用结构体定义学生结点。
如:
strucustu1
{intnum;
charname[8];
ints[3];
intscore;
学生有5个人,则可以定义一个长度为5的结构体数组,如下:
structstu1student[5];
程序分析:
1.输入学生成绩:
循环输入5个学生各部分信息;
2.排序:
可任意选择排序方法,按总分作为关键字排序,结构体数组支持整个结构体作为一个元素进行赋值;
查找:
按学号作为关键字查找。
#include<
//定义学生数据表结构体
typedefstructstudent
intnum;
charname[8];
intscore;
}student;
//字符串输出函数
voidoutputstring(charp[])
inti=0;
while(p[i])
p[i]);
i++;
//显示菜单1
voidmenu1()
\n\t*****WelcometoStudentPerformanceManager!
*****\t\n"
\nMainMenu1\t\n"
1Input\t\n"
0Exit\t\n"
//显示菜单2
voidmenu2()
\nMainMenu2\t\n"
2Sort\t\n"
3Query\t\n"
//功能1:
录入5组学生数据
voidinput(studentp[])
ints=0;
for(;
s<
s++)
PleaseinputtheNo.%dstudent'
snumber:
s+1);
p[s].num);
sname:
p[s].name);
sscore:
p[s].score);
\nDatarecorded!
\n\n"
menu2();
//定功能2:
按降序从高到低排列学生成绩
voidsort(studenta[])
inti,j;
studentp[5];
for(i=0;
p[i]=a[i];
for(j=i+1;
j++)
if((p[i].score)<
(p[j].score))
inttemp;
temp=p[i].score;
p[i].score=p[j].score;
p[j].score=temp;
Theresultfrommintomaxis:
%d"
p[i].score);
//显示菜单2
//功能3:
查询某一学生数据
intquery(studentp[],inta)
if(p[i].num==a)
Theresultis:
\nNumber\tName\t\tScore\n"
%d\t"
p[i].num);
outputstring(p[i].name);
\t"
Querysucceed!
return1;
voidmain()
studenta[5];
intselect;
intexitd=1;
menu1();
//显示菜单1
while(exitd)//判断程序是否退出
select);
//定义执行选项功能模块
switch(select)
case1:
input(a);
break;
case2:
sort(a);
case3:
intnumselect;
Pleaseinputthestudent'
snumber(Press0toreturnMainMenu:
)"
numselect);
while(query(a,numselect))
\nPleaseinputthenextstudent'
(Press0toreturnMainMenu:
}break;
case'
:
exitd=0;
printf("
\nWrongchoice!
Pleaseselectagain!
(如图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语言,使得有些语句有点混乱,所以造成了很多困扰。
一开始接触到课题时,一点思路都没有,根本就不知道要选
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计