《数据结构实验报告及心得体会(共28页).doc》由会员分享,可在线阅读,更多相关《数据结构实验报告及心得体会(共28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上20112012第一学期数据结构实验报告班级:信管一班 学号: 姓名:史孟晨实验报告题目及要求 一、实验题目设某班级有M(6)名学生,本学期共开设N(3)门课程, 要求实现并修改如下程序(算法)。1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统),输出实验结果 。(15分)2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学生的学号、姓名和成绩。3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求1修改算法。将奇偶排序算法升序改为降序。(15分)2用选择排序、冒泡排序、插入排
2、序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)3编译、链接以上算法,按要求写出实验报告(25)。4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。5用A4纸打印输出实验报告。三、实验报告说明实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:N门课程学生成绩名次排序算法实现; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c+); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结
3、果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。三、实验源程序(算法)Score.c#include stdio.h#include string.h#define M 6#define N 3struct student char name10; int number; int scoreN+1; /*scoreN为总分,score0-score2为学科成绩*/ stuM;void changesort(struct student a,int n,int j) int flag=1,i; struct student temp; while(fl
4、ag) flag=0; for(i=1;iai+1.scorej) temp=ai; ai=ai+1; ai+1=temp; flag=1; for(i=0;iai+1.scorej) temp=ai; ai=ai+1; ai+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;kN&i0&ai.scorej!=ai-1.scorej) k+;
5、 printf( %4d ,k); printf(%4d,ai.number); printf( %s,ai.name); printf( %6d,ai.scorej); printf(n); main() int i,j,k; for (i=0;iM;i+) /*输入每个学生信息*/ printf(请输入第 %d 名学生分数: ,i+1);printf(n); printf(姓 名: ); scanf(%s,stui.name); printf(编 号: ); scanf(%4d,&stui.number); printf(数据结构: ); scanf(%4d,&stui.score0);
6、printf(离散数学: ); scanf(%4d,&stui.score1); printf(大学英语: ); scanf(%4d,&stui.score2); for(i=0;iM;i+) /*计算每个学生总分*/ stui.scoreN=0; for(j=0;jN;j+) stui.scoreN+=stui.scorej; changesort(stu,M,N); /*对总分进行排序*/ printf( 学生总分成绩排序表n); printf( 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n); k=1; for(i=0;i0&stui.scoreN!=stui-1.scor
7、eN) k+; printf(%4d,k); printf( %4d,stui.number); printf( %s,stui.name); for(j=0;jN+1;j+) printf( %6d,stui.scorej); 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
8、,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 名学生分数:姓 名: 张一析编 号:
9、05数据结构: 78离散数学: 68大学英语: 91请输入第 6 名学生分数:姓 名: 白晓彤编 号: 06数据结构: 88离散数学: 76大学英语: 90 学生总分成绩排序表 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分 1 5 张一析 78 68 91 237 2 2 袁欣 78 80 92 250 3 4 滕芷 79 84 88 251 4 6 白晓彤 88 76 90 254 5 1 史孟晨 87 90 78 255 6 3 赵宇 88 76 95 259 奇偶交换 成绩 1 排序表 名 次 学 号 姓 名 分 数 1 5 张一析 78 1 2 袁欣 78 2 4 滕芷 7
10、9 3 1 史孟晨 87 奇偶交换 成绩 2 排序表 名 次 学 号 姓 名 分 数 1 5 张一析 68 2 6 白晓彤 76 2 3 赵宇 76 3 2 袁欣 80 奇偶交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 1 史孟晨 78 2 4 滕芷 88 3 6 白晓彤 90Press any key to continueChange.c#include stdio.h#include string.h#define M 6#define N 3void changesort(struct student a,int n,int j);void print_score(str
11、uct student a,int n,int j);struct student char name10; int number; int scoreN+1;/*scoreN为总分,score0-score2为学科成绩*/ stuM;main() int i,j,k; for (i=0;iM;i+)/*输入每个学生信息*/ printf(请输入第 %d 名学生分数: ,i+1);printf(n); printf(姓 名: ); scanf(%s,stui.name); printf(编 号: );scanf(%4d,&stui.number); printf(数据结构: );scanf(%
12、4d,&stui.score0); printf(离散数学: );scanf(%4d,&stui.score1);printf(大学英语: );scanf(%4d,&stui.score2); for(i=0;iM;i+)/*计算每个学生总分*/ stui.scoreN=0; for(j=0;jN;j+) stui.scoreN+=stui.scorej; changesort(stu,M,N);/*对总分进行排序*/printf( 学生总分成绩排序表n); printf( 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n); k=0; for(i=0;i0&stui.scoreN!
13、=stui-1.scoreN) k+; printf(%4d,k);printf( %4d,stui-1.number);printf( %s,stui-1.name);for(j=0;jN+1;j+)printf( %6d,stui-1.scorej); printf(n); changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/ changesort(stu,M,1); /*对离散数学成绩进行排序*/ print_score(stu,M,1); /*输出离散数学前 3 名同学成绩*/ ch
14、angesort(stu,M,2); /*对大学英语成绩进行排序*/ print_score(stu,M,2); /*输出大学英语前 3 名同学成绩*/ void changesort(struct student a,int n,int j) int flag=1,i;struct student temp; while(flag) flag=0; for(i=1;in-1;i+=2) /*对所有奇数项进行一遍比较*/ if (ai.scorej ai+1.scorej) temp=ai; ai=ai+1; ai+1=temp; flag=1; for(i=0;in-1;i+=2) /*对所
15、有偶数项进行一遍比较*/ if (ai.scorej ai+1.scorej) temp=ai; ai=ai+1; ai+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;kN&i0&ai.scorej!=ai-1.scorej) k+; printf( %4d ,k); printf(%4d,ai.number); printf( %s,ai
16、.name); printf( %6d,ai.scorej); 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大学
17、英语: 91请输入第 6 名学生分数:姓 名: 白晓彤编 号: 06数据结构: 88离散数学: 76大学英语: 90 学生总分成绩排序表 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分 1 3 赵宇 88 76 95 259 2 1 史孟晨 87 90 78 255 3 6 白晓彤 88 76 90 254 4 4 滕芷 79 84 88 251 5 2 袁欣 78 80 92 250 6 5 张一析 78 68 91 237 奇偶交换 成绩 1 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 88 1 6 白晓彤 88 2 1 史孟晨 87 3 4 滕芷 79 奇偶交换 成绩
18、 2 排序表 名 次 学 号 姓 名 分 数 1 1 史孟晨 90 2 4 滕芷 84 3 2 袁欣 80 奇偶交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 95 2 2 袁欣 92 3 5 张一析 91Press any key to continueSeletsort.c#include stdio.h#include string.h#define M 6#define N 3void changesort(struct student a,int n,int j);void print_score(struct student a,int n,int j);st
19、ruct student char name10; int number; int scoreN+1;/*scoreN为总分,score0-score2为学科成绩*/ stuM;main() int i,j,k; for (i=0;iM;i+)/*输入每个学生信息*/ printf(请输入第 %d 名学生分数: ,i+1);printf(n); printf(姓 名: ); scanf(%s,stui.name); printf(编 号: );scanf(%4d,&stui.number); printf(数据结构: );scanf(%4d,&stui.score0); printf(离散数学
20、: );scanf(%4d,&stui.score1);printf(大学英语: );scanf(%4d,&stui.score2); for(i=0;iM;i+)/*计算每个学生总分*/ stui.scoreN=0; for(j=0;jN;j+) stui.scoreN+=stui.scorej; changesort(stu,M,N);/*对总分进行排序*/printf( 学生总分成绩排序表n); printf( 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n); k=0; for(i=0;i0&stui.scoreN!=stui-1.scoreN) k+; printf(%4
21、d,k);printf( %4d,stui-1.number);printf( %s,stui-1.name);for(j=0;jN+1;j+)printf( %6d,stui-1.scorej); 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); /*对大学英语成绩进
22、行排序*/ print_score(stu,M,2); /*输出大学英语前 3 名同学成绩*/ void changesort(struct student a,int n,int j) int flag=1,i,m,k;struct student temp; while(flag) flag=0; for(i=0;in-1;i+) /*选择排序法*/ k=i;for(m=i+1;mak.scorej)k=m;temp=ai;ai=ak;ak=temp;flag=1; void print_score(struct student a,int n,int j) int i,k; printf
23、( 选择交换 成绩 %d 排序表,j+1); printf(n); printf( 名 次 学 号 姓 名 分 数n); k=1; for(i=0;kN&i0&ai.scorej!=ai-1.scorej) k+; printf( %4d ,k); printf(%4d,ai.number); printf( %s,ai.name); printf( %6d,ai.scorej); printf(n); 简单选择:请输入第 1 名学生分数:姓 名: 史孟晨编 号: 01数据结构: 87离散数学: 90大学英语: 78请输入第 2 名学生分数:姓 名: 袁欣编 号: 02数据结构: 78离散数学
24、: 80大学英语: 92请输入第 3 名学生分数:姓 名: 赵宇编 号: 03数据结构: 88离散数学: 76大学英语: 95请输入第 4 名学生分数:姓 名: 滕芷编 号: 04数据结构: 79离散数学: 84大学英语: 88请输入第 5 名学生分数:姓 名: 张一析编 号: 05数据结构: 78离散数学: 68大学英语: 91请输入第 6 名学生分数:姓 名: 白晓彤编 号: 06数据结构: 88离散数学: 76大学英语: 90 学生总分成绩排序表 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分 1 3 赵宇 88 76 95 259 2 1 史孟晨 87 90 78 255 3
25、 6 白晓彤 88 76 90 254 4 4 滕芷 79 84 88 251 5 2 袁欣 78 80 92 250 6 5 张一析 78 68 91 237 选择交换 成绩 1 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 88 1 6 白晓彤 88 2 1 史孟晨 87 3 4 滕芷 79 选择交换 成绩 2 排序表 名 次 学 号 姓 名 分 数 1 1 史孟晨 90 2 4 滕芷 84 3 2 袁欣 80 选择交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 95 2 2 袁欣 92 3 5 张一析 91Press any key to continueB
26、ubblesort.c#include stdio.h#include string.h#define M 6#define N 3void changesort(struct student a,int n,int j);void print_score(struct student a,int n,int j);struct student char name10; int number; int scoreN+1;/*scoreN为总分,score0-score2为学科成绩*/ stuM;main() int i,j,k; for (i=0;iM;i+)/*输入每个学生信息*/ prin
27、tf(请输入第 %d 名学生分数: ,i+1);printf(n); printf(姓 名: ); scanf(%s,stui.name); printf(编 号: );scanf(%4d,&stui.number); printf(数据结构: );scanf(%4d,&stui.score0); printf(离散数学: );scanf(%4d,&stui.score1);printf(大学英语: );scanf(%4d,&stui.score2); for(i=0;iM;i+)/*计算每个学生总分*/ stui.scoreN=0; for(j=0;jN;j+) stui.scoreN+=s
28、tui.scorej; changesort(stu,M,N);/*对总分进行排序*/printf( 学生总分成绩排序表n); printf( 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n); k=0; for(i=0;i0&stui.scoreN!=stui-1.scoreN) k+; printf(%4d,k);printf( %4d,stui-1.number);printf( %s,stui-1.name);for(j=0;jN+1;j+)printf( %6d,stui-1.scorej); printf(n); changesort(stu,M,0); /*对数据结构
29、成绩进行排序*/ 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 名同学成绩*/ void changesort(struct student a,int n,int j) int flag=1,i;struct student temp; while(flag)
30、 flag=0; for(i=0;in;i+) /*冒泡排序法*/ if (ai.scorej ai+1.scorej) temp=ai; ai=ai+1; ai+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;kN&i0&ai.scorej!=ai-1.scorej) k+; printf( %4d ,k); printf(%4d,ai.number); printf( %s,ai.name); printf( %6d,ai.scorej); printf(n); 运行结果:请输入第 1 名学生分数:姓 名: 史孟晨编 号: 01数据结构: 87离散数学: 90大学英语: 78请输入第 2 名学