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;iif(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;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,m,k;
structstudenttemp;
while(flag)
{
flag=0;
for(i=0;i{
k=i;
for(m=i+1;mif(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