(完整word版)数据结构实验报告及心得体会

(完整word版)数据结构实验报告及心得体会
(完整word版)数据结构实验报告及心得体会

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) 实验环境(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;ia[i+1].score[j])

{ temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

flag=1;

}

for(i=0;i

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

{ if(i>0&&a[i].score[j]!=a[i-1].score[j])

k++;

p rintf(" %4d ",k);

p rintf("%4d",a[i].number);

p rintf(" %s",a[i].name);

p rintf(" %6d",a[i].score[j]);

p rintf("\n");

}

}

main()

{ int i,j,k;

for (i=0;i

{ printf("请输入第 %d 名学生分数: ",i+1);printf("\n"); printf("姓名: ");

s canf("%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=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;j

printf(" %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

学生总分成绩排序表

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

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 滕芷79

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 白晓彤90

Press any key to continue

#include "stdio.h"

#include "string.h"

#define M 6

#define N 3

void changesort(struct student a[],int n,int j);

void print_score(struct student a[],int n,int j);

struct student

{

char name[10];

int number;

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

}stu[M];

main()

{

int i,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 名同学成绩*/

}

void changesort(struct student a[],int n,int j)

{

int flag=1,i;

struct student temp;

while(flag)

{

flag=0;

for(i=1;i

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

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

{

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

学生总分成绩排序表

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

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 23

7 奇偶交换成绩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 张一析91 Press any key to continue

#include "stdio.h"

#include "string.h"

#define M 6

#define N 3

void changesort(struct student a[],int n,int j);

void print_score(struct student a[],int n,int j);

struct student

{

char name[10];

int number;

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

}stu[M];

main()

{

int i,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 名同学成绩*/

}

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

}

}

}

}

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

{

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

学生总分成绩排序表

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

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 23

7 选择交换成绩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 张一析91 Press any key to continue

#include "stdio.h"

#include "string.h"

#define M 6

#define N 3

void changesort(struct student a[],int n,int j);

void print_score(struct student a[],int n,int j);

struct student

{

char name[10];

int number;

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

}stu[M];

main()

{

int i,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 名同学成绩*/

}

void changesort(struct student a[],int n,int j)

{

{

int flag=1,i;

struct student temp;

while(flag)

{

flag=0;

for(i=0;i

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

{

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 名学生分数:

姓名: 赵宇

相关主题
相关文档
最新文档