数据结构实验报告及心得体会1.docx
《数据结构实验报告及心得体会1.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告及心得体会1.docx(8页珍藏版)》请在冰豆网上搜索。
数据结构实验报告及心得体会1
数据结构实验报告及心得体会
2011~2012第一学期数据结构实验报告
班级:
信管一班
学号:
201051018
姓名:
史孟晨
实验报告题目及要求
一、实验题目
设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。
1.输入学生的学号、姓名和N门课程的成绩(输入提示和输出显示使用汉字系统),
输出实验结果。
(15分)
2.计算每个学生本学期N门课程的总分,输出总分和N门课程成绩排在前3名学
生的学号、姓名和成绩。
3.按学生总分和N门课程成绩关键字升序排列名次,总分相同者同名次。
二、实验要求
1.修改算法。
将奇偶排序算法升序改为降序。
(15分)
2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。
(45分))
3.编译、链接以上算法,按要求写出实验报告(25)。
4.修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。
5.用A4纸打印输出实验报告。
三、实验报告说明
实验数据可自定义,每种排序算法数据要求均不重复。
(1)实验题目:
《N门课程学生成绩名次排序算法实现》;
(2)实验目的:
掌握各种排序算法的基本思想、实验方法和验证算法的准确性;
(3)实验要求:
对算法进行上机编译、链接、运行;
(4)实验环境(WindowsXP-sp3,Visualc++);
(5)实验算法(给出四种排序算法修改后的全部清单);
(6)实验结果(四种排序算法模拟运行后的实验结果);
(7)实验体会(文字说明本实验成功或不足之处)。
三、实验源程序(算法)
Score.c
#include"stdio.h"
#include"string.h"
#defineM6
#defineN3
structstudent
{charname[10];
intnumber;
intscore[N+1];/*score[N]为总分,score[0]-score[2]为学科成绩*/}stu[M];
voidchangesort(structstudenta[],intn,intj)
{intflag=1,i;
structstudenttemp;
while(flag)
{flag=0;
for(i=1;ia[i+1].score[j])
{temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
flag=1;
}
for(i=0;iif(a[i].score[j]>a[i+1].score[j])
{temp=a[i];
a[i]=a[i+1];
a[i+1]=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");
}
}
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;jstu[i].score[N]+=stu[i].score[j];
}
changesort(stu,M,N);/*对总分进行排序*/
printf("学生总分成绩排序表\n");
printf("名次学号姓名数据结构离散数学大学英语总分\n");k=1;
for(i=0;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;jprintf("%6d",stu[i].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名同学成绩*/
}
源代码结果:
请输入第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
学生总分成绩排序表
名次学号姓名数据结构离散数学大学英语总分
15张一析786891237
22袁欣788092250
34滕芷798488251
46白晓彤887690254
51史孟晨879078255
63赵宇887695259奇偶交换成绩1排序表
名次学号姓名分数
15张一析78
12袁欣78
24滕芷79
31史孟晨87
奇偶交换成绩2排序表
名次学号姓名分数
15张一析68
26白晓彤76
23赵宇76
32袁欣80
奇偶交换成绩3排序表
名次学号姓名分数
11史孟晨78
24滕芷88
36白晓彤90
Pressanykeytocontinue
#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;jstu[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;
structstudenttemp;
while(flag)
{
flag=0;
for(i=1;iif(a[i].score[j]{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
flag=1;
}
for(i=0;iif(a[i].score[j]{
temp=a[i];
a[i]=a[i+1];
a[i+1]=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张一析78689123
7奇偶交换成绩1排序表
名次学号姓名分数
13赵宇88
16白晓彤88
21史孟晨87
34滕芷79
奇偶交换成绩2排序表
-全文完-