项目课内实训指导书.docx

上传人:b****5 文档编号:14398748 上传时间:2023-06-23 格式:DOCX 页数:76 大小:405.81KB
下载 相关 举报
项目课内实训指导书.docx_第1页
第1页 / 共76页
项目课内实训指导书.docx_第2页
第2页 / 共76页
项目课内实训指导书.docx_第3页
第3页 / 共76页
项目课内实训指导书.docx_第4页
第4页 / 共76页
项目课内实训指导书.docx_第5页
第5页 / 共76页
项目课内实训指导书.docx_第6页
第6页 / 共76页
项目课内实训指导书.docx_第7页
第7页 / 共76页
项目课内实训指导书.docx_第8页
第8页 / 共76页
项目课内实训指导书.docx_第9页
第9页 / 共76页
项目课内实训指导书.docx_第10页
第10页 / 共76页
项目课内实训指导书.docx_第11页
第11页 / 共76页
项目课内实训指导书.docx_第12页
第12页 / 共76页
项目课内实训指导书.docx_第13页
第13页 / 共76页
项目课内实训指导书.docx_第14页
第14页 / 共76页
项目课内实训指导书.docx_第15页
第15页 / 共76页
项目课内实训指导书.docx_第16页
第16页 / 共76页
项目课内实训指导书.docx_第17页
第17页 / 共76页
项目课内实训指导书.docx_第18页
第18页 / 共76页
项目课内实训指导书.docx_第19页
第19页 / 共76页
项目课内实训指导书.docx_第20页
第20页 / 共76页
亲,该文档总共76页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

项目课内实训指导书.docx

《项目课内实训指导书.docx》由会员分享,可在线阅读,更多相关《项目课内实训指导书.docx(76页珍藏版)》请在冰点文库上搜索。

项目课内实训指导书.docx

项目课内实训指导书

项目(课内实训)指导书

 

系别:

计算机系

专业:

网络工程

课程:

数据结构

制订人:

理艳荣

审核人:

制订时间:

2019年3月

 

第一部分数据结构实验的目的、要求

一、实验目的

上机实践是各位对本门课程所学知识的一种全面、综合的能力训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节,也是对课堂教学与实践教学效果的一种检验。

通常,实验题中的问题比平时的习题复杂得多,也更接近实际。

实验着眼于原理与应用的结合,使你们学会如何把书上学到的知识运用于解决实际问题的过程中去,培养从事软件开发设计工作所必需的基本技能;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。

平时的练习较偏重于如何编写功能单一的“小”算法,而实验题是软件设计的综合训练,包括问题分析(需求分析)、总体结构设计和用户界面设计(概要设计)、程序设计基本技能和技巧等,即一整套软件工程规范的训练和科学作风的培养。

此外,还有很重要的一点是:

机器是比任何教师都严厉的主考者。

为了达到上述目的,第二部分安排了实验单元内容,各单元的训练重点在于基本的数据结构,而不强调面面俱到。

各实验单元与教科书的各章具有紧密的对应关系。

 二、要求:

⒈做好每一次上机前的准备以提高上机效率:

①预先认真阅读相关实验内容,做到心中有明确的目的要求和任务,要有备而来,应该自己独立的思考和设计你的算法和程序,并争取在规定的时间内如期完成上机工作任务。

对于个别目前基础较差的同学,实在是没法完成任务的建议你先参考其他同学的算法,勤学好问,最终自己独立完成,以增强你的感性认识,强化你的实践基础,提高你的实践能力。

②按照实验内容规定的习题题目,事先在实验预习报告上编写好源程序及运行程序所需的典型数据,并经人工静态检查认为无误;手编程序应书写整齐,应在每个题目之间留出一定的空间,以备记录上机调试情况和运行结果等;对程序中自己有疑问的地方,应作出记号,以便上机时给以注意。

③将想要上机验证的问题草拟提纲;制定一个简捷的程序调试计划。

 ⒉上机时输入和调式自己所编写的程序。

对“出错信息”,应善于自己分析判断,并充分利用开发工具提供的错误信息和调试手段解决出现的问题,及时修改与完善算法、源程序,随时记录有价值的内容。

解决问题是学习调式程序的良好机会。

切不可不编程序或抄别人的程序去上机,应从养成严谨的科学作风。

 ⒊程序调试通过后,应运行程序并根据事先准备的典型数据验证结果,在运行时要注意在输入不同数据时所得到的不同结果。

 ⒋为便于教师、助教检查和以后复习,请不要删除已通过的程序,包括有问题待答疑的程序,应保存在自己的工作目录内。

源程序名应能反映哪一次实验的哪一个题目,如Lab1_1.c表示实验一的第1题,……,若有未完成调试的源程序,可以作存盘保存处理,待课后继续完成。

5、几乎每个实验都有超出《数据结构》课程标准的内容,是为有能力深入学习或考研的同学准备的,教师与学生可根据实际情况做取舍。

 三、考核或评价标准

实训成绩将主要根据学生对待实训的态度、对关键知识点和编程技巧的掌握程度、实训报告的内容、答辩情况等进行综合评定。

最后的成绩将分优秀、良好、中等、及格和不及格五个等级。

具体评判标准如下:

优秀:

实训认真、刻苦,有钻研精神,不无故缺席。

熟练掌握了本实训的关键知识点,具有良好的独立思考问题和解决问题的能力,具备了较好的运用C语言处理数据结构相应类型能力,编制的程序运行正确。

实训记录内容丰富、齐全,答辩时能清晰明了地阐明问题,回答问题反映敏捷、思路清晰。

优秀的分数段为100分——90分。

良好:

能认真对待实训,不无故缺席。

掌握了本实训的关键知识点,具备了较好的运用C语言处理数据结构相应类型能力,编写的程序运行正确。

实训记录内容齐全,答辩时能清晰明了地阐明问题,能正确回答全部问题。

良好的分数段为89分——80分。

中等:

能认真对待实训,不无故缺席。

基本掌握了本实训的关键知识点,具备了一定的运用C语言处理数据结构相应类型能力,编写的程序运行基本正确,无致命错误。

实训记录内容较齐全,答辩时能正确回答大部分问题。

中等的分数段为79分——70分。

及格:

对待实训不够认真,有少量迟到、早退或无故缺席现象。

基本掌握了本实训的主要内容,具有了用运用C语言处理数据结构相应类型能力,但掌握不全面、扎实,编写的程序总体结构符合要求,基本能正常运行,但还存在少量错误。

实训记录内容基本齐全,答辩时能在教师提示下正确回答大部分问题。

及格分数段为69分——60分。

不及格:

对待实训马虎、敷衍,经常迟到、早退或无故缺席。

不能正确理解本实训的主要内容,不具备基本的运用C语言处理数据结构相应类型能力,编制的程序不能正常运行,或是抄袭他人程序,应付答辩。

答辩时即使经教师提示仍不能正确回答大部分问题。

不及格分数段小于60分。

第二部分数据结构实验内容

预备实验C语言的函数数组指针结构体知识

一、实验目的

1、复习C语言中函数、数组、指针、结构体与共用体等的概念。

2、熟悉利用C语言进行程序设计的一般方法。

3、为其它实验提供答题参考。

4、同学们可以把本小节程序直接复制到MicrosoftVisualC++6.0环境中运行即可。

二、实验预习

说明以下C语言中的概念

1、函数:

2、数组:

3、指针:

4、结构体

5、共用体

三、实验内容和要求

(一)、调试程序:

输出100以内所有的素数(用函数实现)。

#include

intisprime(intn){/*判断一个数是否为素数*/

intm;

for(m=2;m*m<=n;m++)

if(n%m==0)return0;

return1;

}

intmain(){/*输出100以内所有素数*/

inti;printf("\n");

for(i=2;i<100;i++)

if(isprime(i)==1)printf("%4d",i);

printf("\n");

return0;

}

运行结果:

 

(二)、调试程序:

对一维数组中的元素进行逆序排列。

#include

#defineN10

intmain(){

inta[N]={0,1,2,3,4,5,6,7,8,9},i,temp;

printf("\ntheoriginalArrayis:

\n");

for(i=0;i

printf("%4d",a[i]);

for(i=0;i

temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

}

printf("\nthechangedArrayis:

\n");

for(i=0;i

printf("%4d",a[i]);

printf("\n");

return0;

}

运行结果:

(三)、调试程序:

在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的一个鞍点。

要求从键盘上输入一个二维数组,当鞍点存在时,把鞍点找出来。

#include

#defineM3

#defineN4

intmain(){

inta[M][N],i,j,k;

printf("\n请输入二维数组的数据:

\n");

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

for(i=0;i

for(j=0;j

printf("%4d",a[i][j]);

printf("\n");

}

for(i=0;i

k=0;

for(j=1;j

if(a[i][j]>a[i][k])

k=j;

for(j=0;j

if(a[j][k]

break;

if(j==M)/*在第i行找到鞍点*/

printf("%d,%d,%d\n",a[i][k],i,k);

}

printf("\n");

return0;

}

运行结果:

 

(四)、调试程序:

利用指针输出二维数组的元素。

#include

intmain(){

inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int*p;

for(p=a[0];p

if((p-a[0])%4==0)printf("\n");

printf("%4d",*p);

}

printf("\n");

return0;

}

运行结果:

 

(五)、调试程序:

设有一个教师与学生通用的表格,教师的数据有姓名、年龄、职业、教研室四项,学生有姓名、年龄、专业、班级四项,编程输入人员的数据,再以表格输出。

#include

#defineN10

structstudent{

charname[8];/*姓名*/

intage;/*年龄*/

charjob;/*职业或专业,用s或t表示学生或教师*/

union{

intclass;/*班级*/

charoffice[10];/*教研室*/

}depa;

}stu[N];

intmain(){

inti;intn;

printf("\n请输入人员数(<10人):

");

scanf("%d",&n);

for(i=0;i

printf("请输入第%d人员的信息:

(nameagejobclass/office)\n",i+1);

scanf("%s%d%c",stu[i].name,&stu[i].age,&stu[i].job);

if(stu[i].job=='s')

scanf("%d",&stu[i].depa.class);

else

scanf("%s",stu[i].depa.office);

}

printf("nameagejobclass/office\n");

for(i=0;i

if(stu[i].job=='s')

printf("%s%3d%3c%d\n",stu[i].name,stu[i].age,stu[i].job,stu[i].depa.class);

else

printf("%s%3d%3c%s\n",stu[i].name,stu[i].age,stu[i].job,stu[i].depa.office);

}

}

输入的数据:

2

Wang,19,s,99061

Li36tcomputer

运行结果:

(六)、设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现如下程序(算法)。

1.输入学生的学号、姓名和N门课程的成绩(输入提示和输出显示使用汉字系统),输出实验结果。

2.计算每个学生本学期N门课程的总分,输出总分和N门课程成绩排在前3名学生的学号、姓名和成绩。

3.按学生总分和N门课程成绩关键字升序用选择排序排列名次,总分相同者同名次。

//Seletsort.c

#include"stdio.h"

#include"string.h"

#defineM6

#defineN3

voidchangesort(structstudenta[],intn,intj);

voidprint_score(structstudenta[],intn,intj);

structstudent

{

charname[10];

intnumber;

intscore[N+1];/*score[N]为总分,score[0]-score[2]为学科成绩*/

}stu[M];

main()

{

inti,j,k;

for(i=0;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

{

stu[i].score[N]=0;

for(j=0;j

stu[i].score[N]+=stu[i].score[j];

}

changesort(stu,M,N);/*对总分进行排序*/

printf("学生总分成绩排序表\n");

printf("名次学号姓名数据结构离散数学大学英语总分\n");

k=0;

for(i=0;i

{

if(i>0&&stu[i].score[N]!

=stu[i-1].score[N])

{

k++;

printf("%4d",k);

printf("%4d",stu[i-1].number);

printf("%s",stu[i-1].name);

for(j=0;j

{

printf("%6d",stu[i-1].score[j]);

}

}

printf("\n");

}

changesort(stu,M,0);/*对数据结构成绩进行排序*/

print_score(stu,M,0);/*输出数据结构前3名同学成绩*/

changesort(stu,M,1);/*对离散数学成绩进行排序*/

print_score(stu,M,1);/*输出离散数学前3名同学成绩*/

changesort(stu,M,2);/*对大学英语成绩进行排序*/

print_score(stu,M,2);/*输出大学英语前3名同学成绩*/

}

voidchangesort(structstudenta[],intn,intj)

{

intflag=1,i,m,k;

structstudenttemp;

while(flag)

{

flag=0;

for(i=0;i

{

k=i;

for(m=i+1;m

if(a[m].score[j]>a[k].score[j])

{

k=m;

temp=a[i];

a[i]=a[k];

a[k]=temp;

flag=1;

}

}

}

}

voidprint_score(structstudenta[],intn,intj)

{

inti,k;

printf("选择交换成绩%d排序表",j+1);

printf("\n");

printf("名次学号姓名分数\n");

k=1;

for(i=0;k

{

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");

}

}

简单选择排序:

请输入第1名学生分数:

姓名:

史孟晨

编号:

01

数据结构:

87

离散数学:

90

大学英语:

78

请输入第2名学生分数:

姓名:

袁欣

编号:

02

数据结构:

78

离散数学:

80

大学英语:

92

请输入第3名学生分数:

姓名:

赵宇

编号:

03

数据结构:

88

离散数学:

76

大学英语:

95

请输入第4名学生分数:

姓名:

滕芷

编号:

04

数据结构:

79

离散数学:

84

大学英语:

88

请输入第5名学生分数:

姓名:

张一析

编号:

05

数据结构:

78

离散数学:

68

大学英语:

91

请输入第6名学生分数:

姓名:

白晓彤

编号:

06

数据结构:

88

离散数学:

76

大学英语:

90

学生总分成绩排序表

名次学号姓名数据结构离散数学大学英语总分

13赵宇887695259

21史孟晨879078255

36白晓彤887690254

44滕芷798488251

52袁欣788092250

65张一析786891237

选择交换成绩1排序表

名次学号姓名分数

13赵宇88

16白晓彤88

21史孟晨87

34滕芷79

选择交换成绩2排序表

名次学号姓名分数

11史孟晨90

24滕芷84

32袁欣80

选择交换成绩3排序表

名次学号姓名分数

13赵宇95

22袁欣92

35张一析91

Pressanykeytocontinue

输入的数据及运行结果截屏:

 

四、心得体会

本学期开设的《数据结构》课程已经告一段落,现就学习体会进行学习总结。

这是一门纯属于设计的科目,它需用把理论变为上机调试。

刚开始学的时候确实有很多地方很不理解,每次上课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。

老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序。

这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。

刚开始学的时候确实有很多地方我很不理解,每次上上机课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。

老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。

TC里检查错误都是用英文来显示出来的,经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。

此次的程序设计能够成功,是我和我的同学三个人共同努力作用的结果。

在这一段努力学习的过程中,我们的编程设计有了明显的提高。

其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。

现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。

只要努力去学习,就会灵活的去应用它。

以上便是我对《数据结构》这门课的学习总结,我会抓紧时间将没有吃透的知识点补齐,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进!

实验一顺序表与链表

一、实验目的

1、掌握线性表中元素的前驱、后续的概念。

2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。

3、对线性表相应算法的时间复杂度进行分析。

4、理解顺序表、链表数据结构的特点(优缺点)。

二、实验预习

说明以下概念(到主要参考教材上查找答案)

1、线性表:

2、顺序表:

3、链表:

三、实验内容和要求

1、阅读下面程序,在横线处填写函数的基本功能。

并运行程序,写出结果。

#include

#include

#defineERROR0

#defineOK1

#defineINIT_SIZE5/*初始分配的顺序表长度*/

#defineINCREM5/*溢出时,顺序表长度的增量*/

typedefintElemType;/*定义表元素的类型*/

typedefstructSqlist{

ElemType*slist;/*存储空间的基地址*/

intlength;/*顺序表的当前长度*/

intlistsize;/*当前分配的存储空间*/

}Sqlist;

intInitList_sq(Sqlist*L);/**/

intCreateList_sq(Sqlist*L,intn);/**/

intListInsert_sq(Sqlist*L,inti,ElemTypee);/**/

intPrintList_sq(Sqlist*L);/*输出顺序表的元素*/

intListDelete_sq(Sqlist*L,inti);/*删除第i个元素*/

intListLocate(Sqlist*L,ElemTypee);/*查找值为e的元素*/

intInitList_sq(Sqlist*L){

L->slist=(ElemType*)malloc(I

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2