项目课内实训指导书Word文档格式.docx
《项目课内实训指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《项目课内实训指导书Word文档格式.docx(75页珍藏版)》请在冰点文库上搜索。
最后的成绩将分优秀、良好、中等、及格和不及格五个等级。
具体评判标准如下:
优秀:
实训认真、刻苦,有钻研精神,不无故缺席。
熟练掌握了本实训的关键知识点,具有良好的独立思考问题和解决问题的能力,具备了较好的运用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<
stdio.h>
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("
return0;
运行结果:
(二)、调试程序:
对一维数组中的元素进行逆序排列。
#defineN10
intmain(){
inta[N]={0,1,2,3,4,5,6,7,8,9},i,temp;
\ntheoriginalArrayis:
\n"
for(i=0;
N;
printf("
a[i]);
N/2;
i++){/*交换数组元素使之逆序*/
temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
\nthechangedArrayis:
(三)、调试程序:
在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的一个鞍点。
要求从键盘上输入一个二维数组,当鞍点存在时,把鞍点找出来。
#defineM3
#defineN4
inta[M][N],i,j,k;
\n请输入二维数组的数据:
M;
for(j=0;
j<
j++)
scanf("
%d"
&
a[i][j]);
i++){/*输出矩阵*/
printf("
a[i][j]);
i++){
k=0;
for(j=1;
j++)/*找出第i行的最大值*/
if(a[i][j]>
a[i][k])
k=j;
j++)/*判断第i行的最大值是否为该列的最小值*/
if(a[j][k]<
break;
if(j==M)/*在第i行找到鞍点*/
%d,%d,%d\n"
a[i][k],i,k);
return0;
(四)、调试程序:
利用指针输出二维数组的元素。
inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int*p;
for(p=a[0];
p<
a[0]+12;
p++){
if((p-a[0])%4==0)printf("
*p);
(五)、调试程序:
设有一个教师与学生通用的表格,教师的数据有姓名、年龄、职业、教研室四项,学生有姓名、年龄、专业、班级四项,编程输入人员的数据,再以表格输出。
#include<
structstudent{
charname[8];
/*姓名*/
intage;
/*年龄*/
charjob;
/*职业或专业,用s或t表示学生或教师*/
union{
intclass;
/*班级*/
charoffice[10];
/*教研室*/
}depa;
}stu[N];
intn;
\n请输入人员数(<
10人):
"
scanf("
n);
n;
i++){/*输入n个人员的信息*/
请输入第%d人员的信息:
(nameagejobclass/office)\n"
i+1);
scanf("
%s%d%c"
stu[i].name,&
stu[i].age,&
stu[i].job);
if(stu[i].job=='
s'
)
stu[i].depa.class);
else
%s"
stu[i].depa.office);
nameagejobclass/office\n"
i++){/*输出*/
%s%3d%3c%d\n"
stu[i].name,stu[i].age,stu[i].job,stu[i].depa.class);
%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"
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++)/*输入每个学生信息*/
{
请输入第%d名学生分数:
"
姓名:
stu[i].name);
编号:
stu[i].number);
数据结构:
stu[i].score[0]);
离散数学:
stu[i].score[1]);
大学英语:
stu[i].score[2]);
for(i=0;
i++)/*计算每个学生总分*/
stu[i].score[N]=0;
for(j=0;
stu[i].score[N]+=stu[i].score[j];
changesort(stu,M,N);
/*对总分进行排序*/
学生总分成绩排序表\n"
printf("
名次学号姓名数据结构离散数学大学英语总分\n"
k=0;
for(i=0;
M+1;
{
if(i>
0&
&
stu[i].score[N]!
=stu[i-1].score[N])
{
k++;
printf("
k);
%4d"
stu[i-1].number);
%s"
stu[i-1].name);
for(j=0;
N+1;
{
%6d"
stu[i-1].score[j]);
}
}
}
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;
n-1;
i++)/*选择排序法*/
k=i;
for(m=i+1;
m<
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;
选择交换成绩%d排序表"
j+1);
名次学号姓名分数\n"
k=1;
for(i=0;
k<
N&
a[i].score[j]!
=a[i-1].score[j])
%4d"
a[i].number);
a[i].name);
a[i].score[j]);
}
简单选择排序:
请输入第1名学生分数:
史孟晨
01
87
90
78
请输入第2名学生分数:
袁欣
02
80
92
请输入第3名学生分数:
赵宇
03
88
76
95
请输入第4名学生分数:
滕芷
04
79
84
请输入第5名学生分数:
张一析
05
68
91
请输入第6名学生分数:
白晓彤
06
学生总分成绩排序表
名次学号姓名数据结构离散数学大学英语总分
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、阅读下面程序,在横线处填写函数的基本功能。
并运行程序,写出结果。
malloc.h>
#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