一 : 数据结构实验报告总结
篇一:数据结构实验报告及心得体会
2011~2012第一学期数据结构实验报告
班级:信管一班
学号:20105**** 姓名:史孟晨
实验报告题目及要求
一、实验题目
设某班级有M(6)名学生,本学期共开设N(3)门课程, 要求实现并修改如下程 序(算法)。
(www.61k.com)1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统),
输出实验结果 。(15分)
2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学
生的学号、姓名和成绩。
3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。
二、实验要求
1.修改算法。将奇偶排序算法升序改为降序。(15分)
2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为
降序算法;。(45分))
3.编译、链接以上算法,按要求写出实验报告(25)。
4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。
三、实验报告说明
实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》;
(2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。
三、实验源程序(算法)
Score.c
#include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number;
int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M];
void changesort(struct student a[],int n,int j){int flag=1,i; struct student temp; while(flag){ flag=0;
for(i=1;i<n-1;i+=2) /*对所(转自千 叶帆 文摘:数据结构实验报告总结)有奇数项进行一遍比较*/ if (a[i].score[j]>a[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; }
for(i=0;i<n-1;i+=2)/*对所有偶数项进行一遍比较*/
if (a[i].score[j]>a[i+1].score[j])
{ temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; }}}
void print_score(struct student a[],int n,int j){ int i,k;
printf(“ 奇偶交换 成绩 %d 排序表",j+1); printf("n");
printf(" 名 次 学 号 姓 名 分 数n"); k=1;
for(i=0;k<N&&i<n;i++)
{ if(i>0&&a[i].score[j]!=a[i-1].score[j])k++;
printf(" %4d ",k); printf("%4d",a[i].number); printf(" %s",a[i].name); printf(" %6d",a[i].score[j]); printf("n");}} main()
{ int i,j,k;
for (i=0;i<M;i++) /*输入每个学生信息*/
{ printf("请输入第 %d 名学生分数: ",i+1);printf("n");printf("姓 名: "); scanf("%s",stu[i].name);
printf("编 号: ");
scanf("%4d",&stu[i].number); printf("数据结构: ");
scanf("%4d",&stu[i].score[0]);
printf("离散数学: ");
scanf("%4d",&stu[i].score[1]);printf("大学英语: ");
scanf("%4d",&stu[i].score[2]);
}
for(i=0;i<M;i++) /*计算每个学生总分*/{stu[i].score[N]=0; for(j=0;j<N;j++)
stu[i].score[N]+=stu[i].score[j];
}
changesort(stu,M,N); /*对总分进行排序*/
printf(" 学生总分成绩排序表n");
printf(" 名次 学号 姓 名数据结构 离散数学 大学英语 k=1;
for(i=0;i<M;i++)
{ if(i>0&&stu[i].score[N]!=stu[i-1].score[N]) k++;
printf("%4d",k);
printf(" %4d",stu[i].number);
printf(" %s",stu[i].name);
for(j=0;j<N+1;j++)
printf("%6d",stu[i].score[j]);
printf("n");
}
changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/changesort(stu,M,1); /*对离散数学成绩进行排序*/
总 分n");
篇二:数据结构综合实验心得体会
心得体会:
做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅。 对大一学习的C语言和这学期开的数据结构,并没有掌握,很多知识都不太懂,突然让自己独立完成一个程序让我手忙脚乱,起码在我认为那真的特别难,看了老师给的题目以及上网查找了一些相关的知识,简单的编了几行就告一段落了,第一天等于只完成了老师要求写的需求分析和概要设计,后来查找了关于哈希表的相关知识,了解了如何创建哈希表,如何合适的构建哈希函数,(选取合适的表长,合适的余数,使得查找时间以及平均查找长度最短)以及什么是除留余数法,和怎样用除留余数法创建哈希表,看懂了之后,我又看了处理冲突的方法,有三种线性探测再散列法法,二次探测再散列法,伪随机数序列法三种,而我所要做的是第一种线性探测再散列的方法,相较后两种要简单很多,在遇到冲突的时候地址加一,知道冲突解决。
在了解这些概念以后,我就开始着手编程序了,在遇到问题的时候请教我们班擅长的同学,慢慢把不能不会不理解的地方给弄明白了,在经过很多次调试以后,一些基本功能已经可以实现了,为了使平均查找长度越小越好,我不断尝试新的表长以及除数,在没有出现错误的基础上,将功能实现,最后,终于在周四的时候将所有的程序调试完全。
这次的综合性实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用,同时,编程也要求我们有足够的耐心,细细推敲。越着急可能就越无法得到我们想要的结果,遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重要的,只要肯下工夫很多东西都是可以完成的。
篇三:数据结构课程设计总结
KC021-
CHANGZHOUINSTITUTEOFTECHNOLOGY
课 程 设 计 说 明 书
课程名: 《数据结构课程设计》
题 目: 一元多项式运算系统
二级学院: 计算机信息工程学院专 业: 软件工程
班 级: 10 软 件 一 学 号: 10030431 姓 名: 指导教师: 陈 利 民
2012年1月
一、课程认识
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:
? 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; ? 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
? 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; ? 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
? 训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
二、问题描述及分析
1、问题描述
设计一个一元多项式程序,并完成多项式的加法、减法、以及乘法的运算。如A(x)=15+6x+9x7+3x18 B(x)=4x+5x6+16x7 求 A+B A*B
2、问题分析
①.在数学上,一个一元多项式Pn(x)可按升幂写成:Pn(x)=a 0+a1 x+a2 x^2 +?+an x^n-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=(a0,a1,a2,?,an)每一项的指数i隐含在其系数ai的序号里。设m<n,则两个多项式相加或者相减的结果 Rn(x)=Pn(x)+(-)Qm(x)。乘
法也是类似,通过使用链式存储结构存放多项式的每一项,从而将一元多项式的运算转化成对链表的运算。
②由于一元多项式的建立、运算等操作经常要插入或者删除元素,所以考虑使用链式存储结构(带头结点的链表)作为数据结构,以减少移动元素的次数,减少空间复杂度和空间复杂度。
③减法运算可以转化为加法运算,因此可以大大地简化程序。 ④乘法运算可以多次调用加法函数实现。
三、数据结构描述
1、数据结构选择
本程序讨论的是利用线性链表的基本操作来实现一元多项式的运算。
2、数据结构与多项式的结合
在数学中,每个单项式都具有系数和指数,当系数为0时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针。通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式。
3、数据结构的特点及结点表示
线性链表的另一个特点是插入或删除结点是不必移动其他结点,而仅需调整指针的指向关系以适应新的数据关系,从而大大简化了创建、插入和删除的工作。
基于以上的分析,我们定义多项式的数据结构为如下结构体形式:
struct node {
float coef; int expn;struct node *next;
};
//系数 //指数
//指针指向下一个结点
四、主要算法流程描述(个人负责部分)
如图4-1为主函数流程图
图5-1为加法算法的流程图
二 : 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
运动会分数统计
一、需求分析
1、本演示程序中,可以输入参加运动会的学校编号及项目编号,学校编号要求为1~N,男子比赛项目编号要求为1~M,女子比赛项目编号要求为M+1~M+W;根据具体情况选择输入参加项目的男女类别和取成绩名次类别;最后选择输入名次。[www.61k.com]
2、演示程序以用户和计算机对话方式进行,即在计算机终端上显示提示信息之后,由用户输入进行查询成绩的操作:
①产生各学校的成绩单,包括:各学校所取得的每项成绩的项目号、名次(成绩)、姓名和得 ②产生团体总分报表,内容包括校号、男子团体总分、女子团子总分和团体总分,然后进行数据保存操作。
3、本程序执行命令包括:
1)输入比赛数据
2)查询相关记录
3)显示各学校的成绩单
4)显示各校团体总分报表
4、 测试数据
N=4,M=3,W=2,编号为奇数的项目取前五名,为偶数的项目取前三名。具体数据如下:
输入学校编号:1 2 4
输入项目编号:1 3 2
性别选择: 男 女 男
取成绩名次: 前3名 前5名 前3名
名次选择: 第1名 第4名 第2名
二、概要设计
1. 程序中所有数据类型有:int , struct , char , struct * , struct[] , char[];
2. 整形定义
nsc——学校总数
msp——男子项目总数
wsp——女子项目总数
ntsp——项目总数
serial——学校编号
item——得分项目
range——得分名次
score——得分成绩
overgame——已结束的项目编号
menscore——男子团体总分
womenscore——女子团体总分
totalscore——校团体总分
3. 本程序包含六个模块:
1)主程序模块
main ( )
{
初始化;
1
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
If(“命令”=“输入”)
{
判断数据是否合法;
接受输入数据;
数据处理运算;
}
If(“命令”=“查询”)
{
接受具体指令;
显示相应数据;}
}
2)Input()——比赛结果录入
3)Cout()——范围判断
4)School()——各学校取得成绩细表
5)Overall()——各校男、女及总团体总分
6)Calculate()——数据处理
4. 程序流程图如下:
三、详细设计 1. 元素类型、变量、指针类型
struct athletestruct /*参赛运动员*/
2
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
{
char name[20];
char xingming[20]; /*姓名*/
int score; /*得分成绩*/
int range; /*得分名次*/
int item; /*得分项目*/
};
struct schoolstruct /*参赛学校*/
{
int count; /*计算实际运动员个数*/
int serial; /*学校编号*/
int menscore; /*男子团体总分*/
int womenscore; /*女子团体总分*/
int totalscore; /*团体总分*/
struct athletestruct athlete[MaxSize]; /*参赛运动员*/
struct schoolstruct *next; /*参赛学校*/
};
int nsc,msp,wsp; /*实际参赛学校个数,男子、女子项目*/ int ntsp; /*项目总数*/
int i,j; /*循环控制变量*/
int overgame; /*已结束的项目编号*/
int serial,range; /*获奖的学校编号 & 获奖名次*/
int n; /*用来判断项目类型(奇&偶)*/
struct schoolstruct *head,*pfirst,*psecond; /*用于开辟存储区域*/
int *phead=NULL,*pafirst=NULL,*pasecond=NULL; /*用于项目数组指针*/
2. 输入模块,建立链表,然后存储数据。(www.61k.com)包括学校、男女项目范围、各项目成绩及对输入数据合法性判断等。
1) 输入学校及项目的范围并判断输入范围合法性:
Is_Star_DoMain:
printf("\n请输入参赛学校总数(<= 20): ");
scanf("%d",&nsc);
if(nsc<=0||nsc>20)
{ printf("输入错误,请重新输入!\n");
goto Is_Star_DoMain;}
Is_Msp_DoMain:
{输入男子项目总数并判断男子项目范围大小是否合法}
Is_Wsp_DoMain:
{输入女子项目总数并判断女子项目范围大小是否合法}
2) 输入记录:
char answer; /*接受判断所有项目是否结束:'y'结束,'n'没结束*/
head = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));
head->next = NULL;
pfirst = head; /*工作指针*/
answer = 'y';
while ( answer == 'y' )
{
Is_Game_DoMain:
提示用户选择取前三名还是前五名,奇数项为取五名,偶数项取前三名,判断是否已经输
3
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
入过或者是否超出范围。(www.61k.com]
overgame = *pafirst;
if ( pafirst != phead )
{for ( pasecond = phead ; pasecond < pafirst ; pasecond ++ )
{ if ( overgame == *pasecond )
{ printf("\n*此运动项目已经输入过,请重新选择其他项目序号!\n"); goto Is_Game_DoMain; }
}}
pafirst = pafirst + 1;
if ( overgame > ntsp||overgame<=0 )
{
printf("\n没有这样的运动项目!");
printf("\n请重新输入!");
goto Is_Game_DoMain;
}
switch ( overgame%2 ) /*判断奇偶性*/
{case 0: n = 3;break;
case 1: n = 5;break;
}
for ( i = 1 ; i <= n ; i++ )
{
Is_Serial_DoMain:
printf("\n请输入第 %d名学校的编号(>0&<=%d): ",i,nsc);
scanf("%d",&serial);
if ( serial > nsc ) /*判断是否存在该校*/
{
printf("\n编号超出学校总数!\n请重新输入!");
goto Is_Serial_DoMain;}
if ( head->next == NULL ) /*建立第一个节点*/
{ create();}
psecond = head->next ; /*遍历指针*/
while ( psecond != NULL ) /*遍历链表判断是否已存在该校*/ { if ( psecond->serial == serial )
{ pfirst = psecond;
pfirst->count = pfirst->count + 1;
goto Store_Data; }
else { psecond = psecond->next; }
}
create();
Store_Data:
/*存储数据*/
请输入学校名称: ");
请输入运动员姓名: ");
4 pfirst->athlete[pfirst->count].item = overgame; pfirst->athlete[pfirst->count].range = i; pfirst->serial = serial; printf(" scanf("%s",pfirst->athlete[pfirst->count].name); printf(" scanf("%s",pfirst->athlete[pfirst->count].xingming);
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
}
}
3. 计算统计模块,通过遍历链表,将各参赛学校的成绩统计出来并存入结构成员中,来修改链表中的数据.
判断运动项目奇偶性予以不通名字赋值:
if ( pfirst->athlete[i].item % 2 == 0 ) /*偶数项目*/
{ switch (pfirst->athlete[i].range)
{ case 1:pfirst->athlete[i].score = 5;break;
case 2:pfirst->athlete[i].score = 3;break;
case 3:pfirst->athlete[i].score = 2;break; }
}
else /*奇数项目*/
{ switch (pfirst->athlete[i].range)
{ case 1:pfirst->athlete[i].score = 7;break;
case 2:pfirst->athlete[i].score = 5;break;
case 3:pfirst->athlete[i].score = 3;break;
case 4:pfirst->athlete[i].score = 2;break;
case 5:pfirst->athlete[i].score = 1;break; }
}
计算男女项目的各自成绩及团体总成绩:
if ( pfirst->athlete[i].item <=msp ) /*男子项目*/
{ pfirst->menscore = pfirst->menscore + pfirst->athlete[i].score;
}
else /*女子项目*/
{ pfirst->womenscore = pfirst->womenscore + pfirst->athlete[i].score; }
pfirst->totalscore = pfirst->menscore + pfirst->womenscore;
pfirst = pfirst->next;
4. 成绩的输入,即成绩的查询。(www.61k.com)
1) 查询单个学校的成绩表。
School()
printf("请选择要查询的学校编号(1-%d):",nsc);
pfirst = head->next;
psecond = head->next;
while ( pfirst->next != NULL ) /*学校*/
{
scanf("%d",&a);
if(a<=0||a>nsc)
{ printf("输入学校编号超出范围,请重新输入!");
School();
}
在小于总项目数范围呢,从第一个项目开始察看是否有学校代码与要察看的学校代码相同的,如果有输出。
printf("\n编号为%d的学校的成绩如下:\n",a);
printf("\n项目编号\t运动员姓名\t名次\t得分");
for (i=1;i<=ntsp;i++) /*运动员*/
{ for(j=1;j<=5;j++)
{ if(pfirst->athlete[j].serial==a)
5
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
printf("\n%d\t\t%s\t%d\t%d\n",j,pfirst->athlete[pfirst->count].xingming, pfirst->athlete[j].range,pfirst->athlete[j].score); } }
2) 男女总分及团体总分输出。[www.61k.com]由于男女团体总分,和团体总分在计算过程中已经计算完成,这里可以直接调用。
Overall()
{ printf("\n比赛情况结果显示:\n学校编号\t学校名称\t\t男子团体总分\t女子团体总分\t团体总分");
pfirst = head->next;
while ( pfirst->next != NULL )
{ printf("\n %d\t\t %s\t\t %d\t\t %d\t\t %d",pfirst->serial,pfirst->athlete[pfirst->count].name,pfirst->menscore,pfirst->womenscore,pfirst->totalscore);
pfirst = pfirst->next; }
pfirst = pfirst->next; }
5. 主函数和其他函数算法。
main() /*主函数:主函数很简单,大部分是调用其他函数来实现功能的*/
{
初始化
Firstout();
Inserts();
}
Firstout()
{ printf("\n************************************************\n");
printf("* 运动会分数统计系统 *\n");
printf("************************************************\n");
printf("* 1.开始输入数据 *\n");
printf("* 2.退出系统 *\n");
printf("************************************************\n");
printf("请选择操作:\n");
i=getche();
switch(i){
/*根据选择进行操作*/
}
}
其他一些提示性操作……
6. 函数的调用关系图反映了演示程序的层次结构:
6
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
四、测试分析
1. 调试中所遇到的较重要问题的回顾:
1) 提出问题:所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是
换屏的,可是在这里就是无法实现。[www.61k.com]
解决问题: 输入clrscr();
2)提出问题:设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退
出系统。
分析问题:在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不
是这几个数字时,系统就不能做出正确判断。
解决问题:修改case语句,添加default语句提示出错,要求重新输入;
Default:{
clrscr(); /*清屏*/
printf("输入错误,请重新选择");
}
3)提出问题:当同一项目中有同一学校的两个人时,便不能正确输出或者输出相同人名。
分析问题:由于同时有两个相同学校编号的人存在,系统在输出时,不能确定那个是正确的,
或者用后来的覆盖以前的。
解决问题:用for函数实现从开始到结尾的遍历。
2. 算法的效率及改进设想
算法的效率:总的来讲,严重引响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。
改进设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。
五、用户手册
7
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
1) 运行可执行程序sport.exe;
2) 出现提示:
***********************************************
* 运动会分数统计系统 *
***********************************************
* 1.开始输入数据 *
* 2.退出系统 *
***********************************************
请选择操作:
选择1,进入数据录入;
3) 根据提示输入学校个数,男子项目个数及女子项目个数,如果输入超出范围,会出现提示:“输入错误,请重新输入!”并返回重新输入;
4) 出现如下提示:
奇数项目取前五名
偶数项目取前三名
请输入运动项目序(<=ntsp)
根据需要输入项目编号; 如果输入编号超出范围,会提示“没有这样的运动项目!请重新输入!” ,如果该项目已经输入过,则提示:“此运动项目已经输入过,请重新选择其他项目序号!” ;
5) 根据屏幕提示输入各个名次学校编号、学校名称和运动员姓名,如果输入学校编号超出范围会提示:“编号超出学校总数!\n请重新输入!”;
特别说明:如果两次对同一编号的学校输入不通的校名,将保留后来输入的校名;
6) 输入完毕,提示用户是否继续输入下一个项目数据,“y”是“n”否;
7) 选择否后进入下一界面:
***********************************************
* 运动会分数统计系统 *
***********************************************
* 1.成绩查询 *
* 2.全部重录(重新开始) *
* 3.退出 *
***********************************************
请选择继续操作:选择1进程成绩查询,选择2返回2);
8) 选择1后进入查询选择页面:
************************************************
* 运动会分数统计系统--查询 *
************************************************
* 1.各学校成绩单 *
* 2.团体总分 *
* 3.返回上一级 *
************************************************
请选择继续操作:
选择1按学校编号进行查询,选择2查询学校男女团体总分和团体总分表,选择3返回到上一界面;
9) 选择1后,提示用户输入查询学校编号,输入即显示改校成绩,包括项目编号、运动员姓名、分数和名次,并可根据提示选择其他操作;
************************************************
* 运动会分数统计系统--各学校成绩查询 *
************************************************
* 1.继续各学校成绩查询 *
8
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
* 2.团体总分查询 *
* 3.返回上一级菜单 *
* 4.退出系统 *
************************************************
编号为%d的学校的成绩如下:
项目编号 运动员姓名 名次 得分
** ** ** **
10) 选择2后,显示各学校编号、男子团体总分、女子团子总分和团体总分,并可根据提示选择其他操作,显示如下:
************************************************
* 运动会分数统计系统--团体总分查询 *
************************************************
* 1.各学校成绩查询 *
* 2.返回上一级菜单 *
* 3.退出 *
************************************************
比赛情况结果显示:
学校编号 学校名称 男子团体总分 女子团体总分 团体总分"
** ** ** ** **
六、测试结果:
输入学校数目:8,男子项目5,女子项目5;
输入成绩如下:(注:名次从左往右依次递增,其它同一)
项目编号:4 得分类型: 三级制
项目编号:5 得分类型:五级制
9
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
1、 从主菜单起的路径:1开始输入数据→进行数据输入→继续输入数据→1.查询成绩→2.团体
2、从1输入编号:1
3. 从25. 从 输入编号:9
输入学校编码超出范围,请重新输入!
6. 从4显示提示起的路径→4退出,退出系统.
七、心得体会
在此次设计中,明显感到自己所学知识不够,而且运用不是很熟练。(www.61k.com]在数据结构分析和使用上还
有待改进和提高。在今后的学习中,一定得认真学习,多做练习,多写程序。
对于指针的使用,由于之前在c语言的学习过程中,没有很好的掌握,在数据处理和调用过程中导致
调用失败,结果无法显示.
经过几天的学习,对数据结构的知识有了更深一步的了解,对c语言的知识也有了深一步的巩固,知
道了一个系统设计的大体步骤和方法,特别的是函数的调用问题有了更深的理解,由于调用的出现可以减
10
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
少很多不必要的麻烦,可同时也造成了系统处理的缓慢.
总之,作这个系统让我收获很多,给我将来的设计之路作好了很好的准备.
八、附录:
程序原代码如下:
/*包含的头文件有:*/
#include <malloc.h> /*分配size个字节的内存空间*/
#include <stdio.h> /*输入输出函数*/
#include <stdlib.h> /*动态存储分配函数或其他函数*/
#define NULL 0
#define MaxSize 30
/*变量的定义一:*/
struct athletestruct /*参赛运动员*/
{ char name[20];
int score; /*得分成绩*/
int range; /*得分名次*/
int item; /*得分项目*/
};
struct schoolstruct /*参赛学校*/
{ int count; /*计算实际运动员个数*/
int serial; /*学校编号*/
int menscore; /*男子团体总分*/
int womenscore; /*女子团体总分*/
int totalscore; /*团体总分*/
struct athletestruct athlete[MaxSize]; /*参赛运动员*/
struct schoolstruct *next; /*参赛学校*/
};
/*变量的定义二:*/
int nsc,msp,wsp; /*实际参赛学校个数,男子项目,女子项目*/ int ntsp; /*项目总数*/
int i,j; /*循环控制变量*/
int overgame; /*已结束的项目编号*/
int serial,range; /*获奖的学校编号 & 获奖名次*/
int n; /*用来判断项目类型(奇&偶)*/ struct schoolstruct *head,*pfirst,*psecond; /*用于开辟存储区域*/
int *phead=NULL,*pafirst=NULL,*pasecond=NULL; /*用于项目数组指针*/
/*A:输入模块*/
/* 建立链表,然后存储数据。[www.61k.com)*/
/*建立链表*/
cput ()
{ Is_Star_DoMain:
printf("\n请输入参赛学校总数(<= 20): ");
scanf("%d",&nsc);
if(nsc<=0||nsc>20)
{ printf("输入错误,请重新输入!\n");
goto Is_Star_DoMain;}
11
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
Is_Msp_DoMain:
printf("请输入男子项目总数(<=30): ");
scanf("%d",&msp);
if(msp<=0||msp>30)
{ printf("输入错误,请重新输入!\n");
goto Is_Msp_DoMain;}
Is_Wsp_DoMain:
printf("请输入女子项目总数(<=20): ");
scanf("%d",&wsp);
if(wsp<=0||wsp>20)
{printf("输入错误,请重新输入!\n");
goto Is_Wsp_DoMain;}
}
input ()
{ char answer; /*接受判断所有项目是否结束:'y'结束,'n'没结束*/ head = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));
head->next = NULL;
pfirst = head; /*工作指针*/
answer = 'y';
while ( answer == 'y' )
{
Is_Game_DoMain:
printf("\n奇数项目取前五名\n偶数项目取前三名");
printf("\n请输入运动项目序号(<=%d):",ntsp);
scanf("%d",pafirst);
overgame = *pafirst;
if ( pafirst != phead )
{ for ( pasecond = phead ; pasecond < pafirst ; pasecond ++ )
{ if ( overgame == *pasecond )
{ printf("\n*此运动项目已经输入过,请重新选择其他项目序号!\n");
goto Is_Game_DoMain;
} } }
pafirst = pafirst + 1;
if ( overgame > ntsp||overgame<=0 )
{ printf("\n没有这样的运动项目!");
printf("\n请重新输入!");
goto Is_Game_DoMain;
}
switch ( overgame%2 )
{ case 0: n = 3;break;
case 1: n = 5;break;
} for ( i = 1 ; i <= n ; i++ )
{
Is_Serial_DoMain:
printf("\n请输入第 %d名学校的编号(>0&<=%d): ",i,nsc);
scanf("%d",&serial);
if ( serial > nsc ) /*判断是否存在该校*/ { printf("\n编号超出学校总数!\n请重新输入!");
12
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
goto Is_Serial_DoMain;
}
if ( head->next == NULL ) /*建立第一个节点*/
{ create();
}
psecond = head->next ; /*遍历指针*/
while ( psecond != NULL ) /*遍历链表判断是否已存在该校*/ { if ( psecond->serial == serial )
{ pfirst = psecond;
pfirst->count = pfirst->count + 1;
goto Store_Data;
}
else
{ psecond = psecond->next;
}
}
create();
Store_Data: /*存储数据*/
pfirst->athlete[pfirst->count].item = overgame;
pfirst->athlete[pfirst->count].range = i;
pfirst->serial = serial;
printf("请输入学校名称: ");
scanf("%s",pfirst->athlete[pfirst->count].name);
}
printf("\n是否是否继续输入运动项目?(y&n) ");
answer = getch();
printf("\n"); }}
/*B:计算统计模块*/
/* 通过遍历链表,将各参赛学校的成绩统计出来并存入结构成员中,来修改链表中的数据。[www.61k.com)*/ /*计算*/
calculate()
{ pfirst = head->next;
while ( pfirst->next != NULL )
{ for (i=1;i<=pfirst->count;i++)
{ if ( pfirst->athlete[i].item % 2 == 0 ) /*偶数项目*/
{ switch (pfirst->athlete[i].range)
{ case 1:pfirst->athlete[i].score = 5;break;
case 2:pfirst->athlete[i].score = 3;break;
case 3:pfirst->athlete[i].score = 2;break;
} }
else /*奇数项目*/ { switch (pfirst->athlete[i].range)
{ case 1:pfirst->athlete[i].score = 7;break;
case 2:pfirst->athlete[i].score = 5;break;
case 3:pfirst->athlete[i].score = 3;break;
case 4:pfirst->athlete[i].score = 2;break;
case 5:pfirst->athlete[i].score = 1;break;
} }
13
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
if ( pfirst->athlete[i].item <=msp ) /*男子项目*/
{ pfirst->menscore = pfirst->menscore + pfirst->athlete[i].score; } else /*女子项目*/ { pfirst->womenscore = pfirst->womenscore + pfirst->athlete[i].score;
} }
pfirst->totalscore = pfirst->menscore + pfirst->womenscore;
pfirst = pfirst->next;
}}
/*C:输出模块*/
/* 遍历链表,将calculate()模块中的数据输出。[www.61k.com)*/
/*输出*/
School()
{ int a;
printf("\n************************************************\n");
printf("* 运动会分数统计系统--各学校成绩查询 *\n");
printf("************************************************\n");
printf("请输入要查询的学校编号:(1-%d)",nsc);
scanf("%d",&a);
if(a<=0||a>nsc)
{clrscr();
printf("输入学校编码超出范围,请重新输入!");
School();}
clrscr();
printf("************************************************\n");
printf("* 运动会分数统计系统--各学校成绩查询 *\n");
printf("************************************************\n");
printf("* 1.查询其他学校成绩 *\n");
printf("* 2.团体总分查询 *\n");
printf("* 3.返回上一级菜单 *\n");
printf("* 4.退出系统 *\n");
printf("************************************************\n");
printf("\n编号为%d的学校的成绩如下:\n",a);
printf("\n项目编号\t学校名称\t名次\t得分\n\n");
for (i=1;i<=ntsp;i++) /*运动员*/
{ for(j=1;j<=5;j++)
{ if(a==pfirst->athlete[j].serial)
printf("\n %d\t\t %s\t\t
pfirst->athlete[pfirst->count].name ,pfirst->athlete[j].range,pfirst->athlete[j].score);
} }
printf("\n请选择继续操作(1-4)\n");
i=getche();
switch(i)
{ case'1': /*查询成绩*/
{ clrscr();
School();
}
case'2': /*重新输入记录*/
{ clrscr(); %d\t %d\n",j,
14
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
Overall();
} } }
Overall()
{ printf("\n************************************************\n");
printf("* 运动会分数统计系统--团体总分查询 *\n");
printf("************************************************\n");
printf("* 1.各学校成绩查询 *\n");
printf("* 2.返回上一级菜单 *\n");
printf("* 3.退出 *\n");
printf("************************************************\n");
printf("\n比赛情况结果显示:\n学校编号\t学校名称\t\t男子团体总分\t女子团体总分\t团体总分"); pfirst = head->next;
while ( pfirst->next != NULL )
{ printf("\n %d\t %s\t %d\t\t %d\t\t %d",pfirst->serial,pfirst->athlete[pfirst->count].name,pfirst->menscore,pfirst->womenscore,pfirst->totalscore);
pfirst = pfirst->next;
}
pfirst = pfirst->next;
printf("\n\n请选择继续操作:\n");
i=getche();
switch(i)
{ case'1':
{ clrscr();
School(); } /*1.开始进行数据输入*/
break;
case'2': {clrscr(); Find(); /*2.退出系统*/ } case'3': /*重新输入记录*/
{ exit(3);
}
default:
{clrscr();
printf("输入错误,请重新选择");
Overall(); } } }
create()/*另外再一个建立链表。(www.61k.com)*/
{ /*前插建链表*/
pfirst = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));
pfirst->next = head->next ;
head->next = pfirst ;
/*节点的初始化*/
pfirst->count = 1;
pfirst->menscore = 0;
pfirst->womenscore = 0;
pfirst->totalscore = 0; }
Start()
15
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
{ clrscr();
printf("\n************************************************\n");
printf("* 运动会分数统计系统---输入记录 *\n");
printf("************************************************\n");
cput();
ntsp = msp + wsp;
/*for(i=1;i<=nsc;i++)
{printf("请输入第%d个学校的名字: ",i);
scanf("%s",&name); } */ /*运动总项目*/ /*以下段,用来解决特定问题。(www.61k.com]*/
phead = calloc(ntsp,sizeof(int));
pafirst = phead;
pasecond = phead; }
Inserts()
{ input();
calculate();/*计算*/
clrscr();
Secondout(); }
Firstout()
{ printf("\n************************************************\n");
printf("* 运动会分数统计系统 *\n");
printf("************************************************\n");
printf("* 1.开始输入数据 *\n");
printf("* 2.退出系统 *\n");
printf("************************************************\n");
printf("请选择操作:\n");
i=getche();
switch(i)
{ case'1':
{ clrscr();
Start(); } /*1.开始进行数据输入*/
break;
case'2':
exit(2);
default:
{ clrscr();
printf("输入错误,请重新选择");
Firstout(); } /*2.退出系统*/
} }
Secondout()
{ printf("\n************************************************\n");
printf("* 运动会分数统计系统 *\n");
printf("************************************************\n");
printf("* 1.成绩查询 *\n");
printf("* 2.全部重录(重新开始) *\n");
printf("* 3.退出 *\n");
printf("************************************************\n");
printf("请选择继续操作:\n");
16
输入分数选学校 数据结构实验——运动会分数统计
数据结构课程设计----运动会分数统计
i=getche();
switch(i)
{ case'1': /*查询成绩*/
{ clrscr();
Find(); }
case'2': /*重新输入记录*/
{ clrscr();
main(); }
case'3': /*重新输入记录*/
{ exit(2); }
default:
{ clrscr();
printf("输入错误,请重新选择");
Secondout(); } } }
Find()
{ printf("\n************************************************\n"); printf("* 运动会分数统计系统--查询 *\n"); printf("************************************************\n"); printf("* 1.各学校成绩查询 *\n"); printf("* 2.团体总分查询 *\n"); printf("* 3.返回上一级 *\n"); printf("************************************************\n"); printf("请选择继续操作:\n");
i=getche();
switch(i)
{ case'1': /*查询各学校成绩*/
{ clrscr();
School(); }
case'2': /*查询团体总分*/
{ clrscr();
Overall(); }
case'3':
{ clrscr();/*返回上一级菜单*/
Secondout(); }
default:
{clrscr();
printf("输入错误,请重新选择");
Find(); } } }
main() /*主函数:*/
{ Firstout();
Inserts();
}
17
三 : 2011展览数据报告补(1-2.5万平)-投资方经验方及网址
《2011年中国展览数据统计分析报告》的数据查询与补充分析
(1-2.5万平方米的展馆)
本文标题:数据结构实验报告-数据结构实验报告总结61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1