欢迎来到天天文库
浏览记录
ID:15022428
大小:188.00 KB
页数:14页
时间:2018-07-31
《20151020151 李永飞 数据结构实验2报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据结构实验报告——实验2学号:20151020151姓名:李永飞得分:______________一、实验目的1、复习结构体、数组、指针;2、掌握数组的静态创建与动态创建;3、了解顺序存储的基本访问方法。二、实验内容1、(必做题)每个学生的成绩信息包括:学号、语文、数学、英语、总分、加权平均分;采用动态方法创建数组用于存储若干学生的成绩信息;输入学生的学号、语文、数学、英语成绩;计算学生的总分和加权平均分(语文占30%,数学占50%,英语占20%);输出学生的成绩信息。2、(必做题)可以在数组末尾追加新学生的成绩信息;可以根据学号,删除该学生的成绩信息。3、(选做题)可以根据学
2、号或总分,升序排序学生的成绩信息。三、算法描述(采用自然语言描述)1、首先定义好学生细信息的结构体,包含学号、语文成绩、数学成绩、英语成绩、加权平均分、总分,数据类型分别为long,int,int,int,floa,float。定义好结构体以后,定义函数(inpute_info)用于输入学生信息并且计算总分和加权平均分,用for循环一次输入每个学生的信息,输入完各科成绩以后,累加得到总分,计算加权平均分用每科成绩乘上相应的权重计算出加权平均分。2、学生结构体定义和1一样,不同的是在第一次输入时用malloc申请N个学生结构体大小的空间,学生信息的输入和1中一样,输入完以后显示在界面
3、,然后用户选择是否需要添加学生信息,选择添加的话则用realloc申请空间分配,考虑到realloc申请分配空间有三种情况:(1)申请分配空间减少,直接返回原指针,改变索引。(2)申请分配的空间在当前内存块可以满足,返回原指针,扩充空间。(3)申请的空间大小当前内存空间不能满足,则在堆中寻找新的空间将原来的数据拷贝到新的空间,返回新的指针,释放旧的空间。由于返回不同的指针会影响最后输出学生信息,所以直接申请5个新的空间,这样会在堆中寻找新的分配空间返回新的指针便于操作。添加好新的学生信息以后,用户可以选择是否删除学生信息,选择删除则提示输入要删除的学号,如果存在该学生则删除,然后将
4、后边的记录向前移动一个,realloc申请减少一个结构体的空间。最后将所有学生信息输出。四、详细设计(画出程序流程图)141、学生信息输入开始输入人数n输入学生学号、成绩计算总分和加权平均分输出信息结束2、学生信息的动态添加和删除开始输入人数n输入学生学号、成绩计算总分和加权平均分输出信息14是否添加?是Realloc动态申请空间,并输入学生信息输出信息否是否删除?否是删除学生信息,realloc申请空间减小输出所有信息结束五、程序代码(给出必要注释)1、程序代码如下:#include#includetypedefstructinfo_stu{
5、//定义学生结构体//charnum[10];//学号的数据类型为char数组longnum;14intchinese;//语文成绩intintmath;intenglish;floatsum;//总分floatavg;//加权平均分}student;voidinput_info(intn,student*stu){inti;for(i=0;i6、生的语文成绩(0-100):",i+1);scanf("%d",&stu[i].chinese);//输入语文成绩while(stu[i].chinese<07、8、stu[i].chinese>100){//如果成绩不是0-100之间则提示错误并且重新输入printf("你输入的成绩不合法,请重新输入!");scanf("%d",&stu[i].chinese);}printf("请输入第%d个学生的英语成绩(0-100):",i+1);scanf("%d",&stu[i].english);while(stu[i].english<09、10、stu[i].english>10011、){printf("你输入的成绩不合法,请重新输入!");scanf("%d",&stu[i].english);}printf("请输入第%d个学生的数学成绩(0-100):",i+1);scanf("%d",&stu[i].math);while(stu[i].math<012、13、stu[i].math>100){printf("你输入的成绩不合法,请重新输入!");14scanf("%d",&stu[i].math);}stu[i].sum=stu[i].chi
6、生的语文成绩(0-100):",i+1);scanf("%d",&stu[i].chinese);//输入语文成绩while(stu[i].chinese<0
7、
8、stu[i].chinese>100){//如果成绩不是0-100之间则提示错误并且重新输入printf("你输入的成绩不合法,请重新输入!");scanf("%d",&stu[i].chinese);}printf("请输入第%d个学生的英语成绩(0-100):",i+1);scanf("%d",&stu[i].english);while(stu[i].english<0
9、
10、stu[i].english>100
11、){printf("你输入的成绩不合法,请重新输入!");scanf("%d",&stu[i].english);}printf("请输入第%d个学生的数学成绩(0-100):",i+1);scanf("%d",&stu[i].math);while(stu[i].math<0
12、
13、stu[i].math>100){printf("你输入的成绩不合法,请重新输入!");14scanf("%d",&stu[i].math);}stu[i].sum=stu[i].chi
此文档下载收益归作者所有