建立一个顺序表,表中元素为学生,每个学生信息包含姓名、学号和成绩三部分,对该表实现输出、插入、删除、
利用顺序表完成一个学生成绩管理系统

利⽤顺序表完成⼀个学⽣成绩管理系统 1//利⽤顺序表完成⼀个学⽣成绩管理系统2package classwork_5;34public class student {5private String name;//名字6private int id;//学号7private String state;//是否在籍8private double gpa;//在校绩点成绩9public student() {1011 }12public student(String name, int id, String state, double gpa) { = name;14this.id = id;15this.state = state;16this.gpa = gpa;17 }18public String getName() {19return name;20 }21public void setName(String name) { = name;23 }24public int getId() {25return id;26 }27public void setId(int id) {28this.id = id;29 }30public String getState() {31return state;32 }33public void setState(String state) {34this.state = state;35 }36public double getGpa() {37return gpa;38 }39public void setGpa(double d) {40this.gpa = d;41 }42 @Override43public String toString() {44return "" + name + "\t\t" + id + "\t\t" + state + "\t\t" + gpa;45 }4647}484950package classwork9;5152import java.util.ArrayList;53import java.util.List;54import java.util.Scanner;5556import classwork_5.student;5758public class stumanager {59private Scanner in = new Scanner(System.in);60private List<student> stu = new ArrayList<student>();6162// 初始化,先往学⽣管理系统⾥⾯存⼊⼀些学⽣信息63public void init() {64 student s1 = new student("⼩明", 2019216588, "在籍", 4.4);65 student s2 = new student("⼩红", 2019219888, "在籍", 1.2);66 student s3 = new student("⼩刚", 2019212188, "在籍", 3.4);67 stu.add(s1);68 stu.add(s2);69 stu.add(s3);70 }7172public void menu() {73 System.out.println("*******欢迎使⽤学⽣管理系统*******");74 System.out.println("请根据提⽰选择");75 System.out.println("1.添加学⽣信息");76 System.out.println("2.删除学⽣信息");77 System.out.println("3.修改学⽣信息");78 System.out.println("4.查询学⽣并输出");79 System.out.println("5.所有学⽣信息");8081int choice = in.nextInt();82switch (choice) {83case 1:84 addstu();85break;86case 2:87 delstu();88break;89case 3:90 amendstu();91break;92case 4:93 findstu();94break;95case 5:96 show();97break;98default:99 }100 }101102public void iscontinuemenu() {103 System.out.println("是否返回到主菜单(y/n)");104 String iscon = in.next();105if ("y".equals(iscon)) {106 menu();107 }108 }109110private void addstu() {111 System.out.println("增加学⽣信息");112 System.out.println("请输⼊学⽣名");113 String name = in.next();114 System.out.println("请输⼊学⽣学号");115int id = in.nextInt();116 System.out.println("请输⼊学⽣的⼊学年份");117int year = in.nextInt();118 String y = "";119if (year <= 2020 && year >= 2017) {120 y = "在籍";121 } else {122 y = "不在籍";123 }124 System.out.println("请输⼊学⽣绩点");125double gpa = in.nextDouble();126 student st = new student(name, id, y, gpa);127 stu.add(st);128 System.out.println("已添加完毕请返回主菜单查看"); 129 iscontinuemenu();130 }131132// 删除学⽣信息,根据学号删除133private void delstu() {134 System.out.println("请输⼊要删除的学号");135int a = in.nextInt();136for (int loop = 0; loop < stu.size(); loop++) {137if (((student) stu.get(loop)).getId() == a) {138 stu.remove(loop);139 System.out.println("删除成功!");140break;141 }142 }143144 System.out.println("已删除完毕请返回主菜单查看");145 iscontinuemenu();146 }147148// 修改学⽣信息amend149150private void amendstu() {151 System.out.println("请输⼊要修改学⽣信息的学号");152int a = in.nextInt();153int loop;154for (loop = 0; loop < stu.size(); loop++) {155if (((student) stu.get(loop)).getId() == a) {156break;157 }158 }159160 System.out.println("请输⼊新名字,学号,绩点");161 String name1 = in.next();162int id = in.nextInt();163double gpa = in.nextDouble();164 ((student) stu.get(loop)).setName(name1);165 ((student) stu.get(loop)).setId(id);166 ((student) stu.get(loop)).setGpa(gpa);167 System.out.println("已修改完毕请返回主菜单查看");168 iscontinuemenu();169 }170171// 查询学⽣信息,根据学号查询172private void findstu() {173 System.out.println("请输⼊要查询学⽣的学号");174175int a = in.nextInt();176int loop;177for (loop = 0; loop < stu.size(); loop++) {178if (((student) stu.get(loop)).getId() == a) {179 System.out.println(((student) stu.get(loop)));180break;181 }182 }183 iscontinuemenu();184185 }186187// 查看所有学⽣信息188private void show() {189 System.out.println("姓名\t\t学号\t\t\t在籍状态\t\t在校成绩"); 190191for (student x : stu) {192 System.out.print(x + " ");193 System.out.println();194 }195 iscontinuemenu();196 }197198}199200package classwork9;201202public class stuman_test {203204public static void main(String[] args) {205 stumanager a=new stumanager();206 a.init();207 a.menu();208209 }210211 }。
最新Linux及C考试题附答案

华清远见嵌入式学院《Linux及C》考试题(A卷)1-5 CBCDB6-10 DBADD11-15 CCCAA16-20 C ADD C D A21-23 DBA一、选择题(23题,每空2分,共46分)1.常见的Linux发行版本有很多,下面不是Linux发行版本的是( C)。
[A] Red Hat Linux [B] Ubuntu Linux [C] unix [D] 红旗2.下面不是对Linux操作系统特点描述的是( B )。
[A] 良好的可移植性[B] 稳定性低[C] 多用户[D] 多任务3.嵌套创建目录的命令可以使用( C )。
[A] mkdir –h [B] help mkdir [C] mkdir -p [D] man mkdir4.假设目录中存在若干文件file_num.txt(num表示文件编号,1~8),使用以下( D )通配符可以挑选出其中的编号为1、2、3、5、6、7的文件。
[A] file_*.txt [B] flie_?.txt [C] file_[1-7].txt [D] file_[^48].txt5.文件权限r-x-w-r--对应的八进制表示形式为( B )[A] 0536 [B] 0524 [C] 0656 [D] 05346.目前流行的两种软件包管理机制,Debian使用( D )软件包。
[A] zip [B] rpm [C] tar [D] deb7.下述程序第二次的输出结果为( B )。
int main(void){extern int a;int b=0;static int c;a+=3;other();b+=3;other();}int a=5;other(){int b=3;static int c=2;a+=5; b+=5; c+=5;printf("%d,%d,%d\n",a,b,c);c=b;}[A] 13,0,13[B] 18,8,13 [C] 13,8,13[D] 18,8,08.C语言程序的三种基本程序是( A )。
使用access建立学生信息管理数据库系统设计与开发

使用access建立学生信息管理数据库系统设计与开发1. 引言1.1 概述:学生信息管理在现代教育领域中起着至关重要的作用。
随着教育数据量的不断增加,传统的手工管理方式已无法满足快速准确的信息处理需求。
因此,利用计算机技术来构建学生信息管理数据库系统成为了一种更加高效和可靠的管理方式。
本文将介绍如何使用Access软件进行学生信息管理数据库系统设计与开发。
1.2 文章结构:本文共分为五个部分,具体内容如下:第一部分是引言部分,首先对整篇文章进行概述,并介绍文章的结构和目标。
第二部分是学生信息管理数据库系统设计与开发部分。
这一部分主要介绍了关于数据库系统的基本知识和原则,并详细讲解了数据表的设计以及表之间关系和连接的设计。
第三部分是关于Access数据库的使用及配置。
在这一部分中,我们将会简要介绍Access软件,并演示如何创建新数据库以及设置数据表和字段属性。
第四部分是关于学生信息管理功能实现与开发。
这一部分将详细说明如何通过编程实现添加、查询、修改和删除学生信息等功能。
最后,第五部分是结论与展望。
我们将总结全文内容,并探讨学生信息管理数据库系统的可拓展性分析和未来发展方向。
1.3 目的:本文章旨在帮助读者了解学生信息管理数据库系统的设计与开发过程。
通过使用Access软件,我们可以实现高效、准确地管理和处理大量教育数据,提高教育行政工作的效率。
读者将能够学习到如何进行数据库系统设计以及利用编程实现各项功能。
希望本文对相关领域的研究人员、教育工作者和开发人员有所启发,为他们在学生信息管理方面提供一定的参考和指导。
2. 学生信息管理数据库系统设计与开发2.1 数据库系统介绍在学生信息管理中,使用数据库系统可以方便地存储和管理大量的学生数据。
数据库系统能够提供高效的数据检索和更新功能,同时也具备安全性和可靠性。
2.2 数据表设计在设计学生信息管理数据库系统时,需要考虑到各种学生相关的信息,例如学号、姓名、班级、性别、出生日期等等。
建立一个顺序表,表中元素为学生,每个学生信息包含姓名、学号和成绩三部分,对该表实现输出、插入、删除、

云南大学物理实验教学中心实验报告课程名称:计算机软件技术基础实验项目:实验二、线性表(顺序存储)及其应用学生姓名:学号:学院系级专业成绩指导教师:实验时间:年日时分至时分实验地点:实验类型:教学(演示□验证□综合█设计□)学生科研□课外开放□测试□其它□一、实验目的:掌握顺序表的建立及基本操作。
二、问题:建立一个顺序表,表中元素为学生,每个学生信息包含姓名、学号和成绩三部分,对该表实现:①输出、②插入、③删除、④查找功能,并计算出平均成绩和总成绩。
三、程序的编写与调试1、原程序:#include <iostream>using namespace std;typedef struct{ long double num; char name[10]; int score; } STUDENT; class sq_LList{ private:int mm;int nn;STUDENT *v;public:sq_LList(int);void prt_sq_LList();void ins_sq_LList(int, STUDENT);void del_sq_LList(int);void sea_num_sq_LList(int);voidvoid cal_sq_LList(int);};/*输出*/sq_LList ::sq_LList(int m){ mm=m;v=new STUDENT [mm];v[0].num=970156; strcpy(v[0].name,"张小明"); v[0].score=87; v[1].num=970157; strcpy(v[1].name,"李小青"); v[1].score=96;v[2].num=970158; strcpy(v[2].name,"刘华");v[2].score=85; v[3].num=970159; strcpy(v[3].name,"王伟");v[3].score=93; v[4].num=970160; strcpy(v[4].name,"李启明"); v[4].score=88;nn=5;}void sq_LList ::prt_sq_LList(){ int i;for(i=0; i<nn; i++){ cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<" "<<"分数: "<<v[i].score<<endl;}}/*插入*/void sq_LList ::ins_sq_LList(int i, STUDENT b){ int k;if(nn==mm){cout<<"overflow"; return ;}if(i>nn) i=nn+1;if(i<1) i=1;for(k=nn; k>=i; k--)v[k]=v[k-1];v[i-1]=b; nn=nn+1;}/*删除*/void sq_LList ::del_sq_LList(int i){ int k;if(nn==0){cout<<"underflow"<<endl; return ;}if((i<1)||(i>nn)){cout<<"Not this element in the list!"<<endl; return ;}for(k=i; k<nn; k++)v[k-1]=v[k];nn=nn-1;}/*按学号查找*/void sq_LList ::sea_num_sq_LList(int i){ int k,t ;____t=0;for(i=0;i<nn;i++){ if(v[i].num==k){ t=t+1;cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<" "<<"分数: "<<v[i].score<<endl;}}if(t==0)cout<<"No this student in the list!"<<endl;}/*按姓名查找*/void sq_LList ::sea_name_sq_LList(int i, char y[]){ int t;____t=0;for(i=0;i<nn;i++){ if(strcmp(y,v[i].name)=0){t=t+1cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<" "<<"分数: "<<v[i].score<<endl;}}if(t==0) cout<<"No this student in the list!"<<endl }/*计算*/void sq_LList ::cal_sq_LList(int m){ int i;float sum,avr;{ sum=0;for(i=0;i<nn;i++){sum=sum+v[i].score;avr=sum/(i+1);}}cout<<"总分:"<<sum<<endl;cout<<"平均分:"<<avr<<endl;}int main(){ int mx; sq_LList s1(100);while (1){ cout<<"1.输出 2.插入 3.删除 4.查找 5.计算 0.退出\n";cout<<"输入0-5:";cin>>mx;switch(mx){ case 1: s1.prt_sq_LList(); break;case 2: int i; STUDENT b;cout<<"输入插入点位置和插入元素值:";cin>>i>>b.num>>>>b.score;s1.ins_sq_LList(i,b); s1.prt_sq_LList(); break; case 3: cout<<"请输入删除学生的位置:";cin>>i;s1.del_sq_LList(i);s1.prt_sq_LList(); break; case 4: int main(){ int mx;while (1){cout<<"1.按学号查找 2.按姓名查找 0.返"<<endl;cout<<"输入0-2:";cin>>mx;switch (mx){casecout<<"请输入要查找学生的学号:";s1.sea_num_sq_LList(i); break;casecout<<"请输入要查找学生的姓名:";s1.sea_name_sq_LList(); break;case 0: cout<<"返回"<<endl; return ;}}return 0;} break;case 5: s1.cal_sq_LList(); break;case 0: cout<<"程序结束"<<endl; return 0;}}return 0;2、正确程序:#include <iostream>using namespace std;typedef struct{ long double num; char name[10]; int score; } STUDENT; class sq_LList{ private:int mm;int nn;STUDENT *v;public:sq_LList(int);void prt_sq_LList();void ins_sq_LList(int, STUDENT);void del_sq_LList(int);void sea_num_sq_LList(int);void sea_name_sq_LList();void cal_sq_LList(int);/*输出*/sq_LList ::sq_LList(int m){ mm=m;v=new STUDENT [mm];v[0].num=970156; strcpy(v[0].name,"张小明"); v[0].score=87; v[1].num=970157; strcpy(v[1].name,"李小青"); v[1].score=96;v[2].num=970158; strcpy(v[2].name,"刘华");v[2].score=85; v[3].num=970159; strcpy(v[3].name,"王伟");v[3].score=93; v[4].num=970160; strcpy(v[4].name,"李启明"); v[4].score=88;nn=5;}void sq_LList ::prt_sq_LList(){ int i;for(i=0; i<nn; i++){ cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<" "<<"分数: "<<v[i].score<<endl;}}/*插入*/void sq_LList ::ins_sq_LList(int i, STUDENT b){ int k;if(nn==mm){cout<<"overflow"; return ;}if(i>nn) i=nn+1;if(i<1) i=1;for(k=nn; k>=i; k--)v[k]=v[k-1];v[i-1]=b; nn=nn+1;}/*删除*/void sq_LList ::del_sq_LList(int i){ int k;if(nn==0){cout<<"underflow"<<endl; return ;}if((i<1)||(i>nn)){cout<<"Not this element in the list!"<<endl; return ;}for(k=i; k<nn; k++)v[k-1]=v[k];nn=nn-1;}/*按学号查找*/void sq_LList ::sea_num_sq_LList(int i){ int k,t ;cin>>k;t=0;for(i=0;i<nn;i++){ if(v[i].num==k){ t=t+1;cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<" "<<"分数: "<<v[i].score<<endl;}}if(t==0)cout<<"No this student in the list!"<<endl;}/*按姓名查找*/void sq_LList ::sea_name_sq_LList(){ char y[10]; int i,t;cin>>y;t=0;for(i=0;i<nn;i++){ if(strcmp(y,v[i].name)==0){t=t+1;cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<" "<<"分数: "<<v[i].score<<endl;}}if(t==0) cout<<"No this student in the list!"<<endl; }/*计算*/void sq_LList ::cal_sq_LList(int m){ int i;float sum,avr;{ sum=0;for(i=0;i<nn;i++){sum=sum+v[i].score;avr=sum/(i+1);}}cout<<"总分:"<<sum<<endl;cout<<"平均分:"<<avr<<endl;}int main(){ int mx; sq_LList s1(100);while (1){ cout<<"1.输出 2.插入 3.删除 4.查找 5.计算 0.退出\n";cout<<"输入0-5:";cin>>mx;switch(mx){ case 1: s1.prt_sq_LList(); break;case 2: int i; STUDENT b;cout<<"输入插入点位置和插入元素值:";cin>>i>>b.num>>>>b.score;s1.ins_sq_LList(i,b); s1.prt_sq_LList(); break; case 3: cout<<"请输入删除学生的位置:";cin>>i;s1.del_sq_LList(i);s1.prt_sq_LList(); break; case 4:{ int mx;while (1){cout<<"1.按学号查找 2.按姓名查找 0.返"<<endl;cout<<"输入0-2:";cin>>mx;switch (mx){case 1: cout<<"请输入要查找学生的学号:";s1.sea_num_sq_LList(i); break;case 2: cout<<"请输入要查找学生的姓名:";s1.sea_name_sq_LList(); break;case 0: cout<<"返回"<<endl; return 0;}}return 0;} break;case 5: s1.cal_sq_LList(i); break;case 0: cout<<"程序结束"<<endl; return 0;}}return 0;}四、实验总结通过此次试验,我对线性表(顺序存储)有了全面的认识,知道了什么是线性表,以及线性表有什么作用;并学会了如何根据要求建立一个实际的线性表,包括线性表的输出、插入、删除、查。
单链表应用示例

学生成绩管理以单链表作为存储结构,设计和实现某班某门课程成绩管理的完整程序。
程序要求完成如下功能:(1)创建成绩链表,学生数据包含学生的学号、姓名和成绩。
(2)可以在指定学号学生前插入学生成绩数据。
(3)可以删除指定学号的学生数据。
(4)可以计算学生的总数。
(5)可以按学号和姓名查找学生。
(6)可以显示所有学生的成绩。
(7)可以把学生成绩按从高到低的顺序排列。
此处的设计思想基本与顺序表相同,只是对保存学生成绩的线性表采用不同的存储结构实现。
本例中用到的学生数据也是程序运行时由用户从键盘输入,保存到一个单链表中。
学生结构体类型的定义与顺序表应用举例处的定义相同,用C语言描述如下:typedef struct Student /*学生类型定义*/{ int score; /*成绩*/char sno[5],sname[8]; /*学号,姓名*/}Student;当学生的学号为“#”时,也是表示数据输入的结束。
单链表中保存的数据元素均为学生Student类型,则单链表定义如下:typedef struct Node /*结点类型定义*/{ Student studentInfo; /*学生信息*/struct Node *next; /*指向后继元素的指针域*/}LinkList;对学生的成绩按从高到低排序时,使用的也是直接插入排序思想。
此外,为了排序后还能在原单链表上继续进行操作,这里是把单链表中的内容复制到一个新单链表中,对新单链表排序,原单链表不变。
下面是以单链表作为存储结构实现的学生某门课程成绩管理的完整C语言程序。
#include<string.h>#include<malloc.h>#include <stdlib.h>#include <stdio.h>typedef struct Student /*学生类型定义*/{ int score; /*成绩*/char sno[5],sname[8]; /*学号,姓名*/}Student;typedef struct Node /*结点类型定义*/{ Student studentInfo; /*学生信息*/struct Node *next; /*指向后继元素的指针域*/}LinkList;void display(LinkList *p) /*在屏幕上显示一个学生的成绩信息*/{ printf("\n\n\nno\t\tname\t\tscore: ");printf("\n%s",p->studentInfo.sno); /*打印学号*/printf("\t\t ");printf("%s",p->studentInfo.sname); /*打印姓名*/printf("\t\t ");printf("%-4d\n",p->studentInfo.score); /*打印成绩*/}void displayAll(LinkList *L) /*在屏幕上显示所有学生的成绩信息*/ { LinkList *p;p=L->next;printf("\n\n\nno\t\tname\t\tscore: ");while(p){ printf("\n%s",p->studentInfo.sno); /*打印学号*/printf("\t\t ");printf("%s",p->studentInfo.sname); /*打印姓名*/printf("\t\t ");printf("%-4d\n",p->studentInfo.score);/*打印成绩*/p=p->next;}}LinkList *inputdata( ) /*输入学生信息*/{ LinkList *s=NULL ; /*s是指向新建结点的指针*/ char sno[5]; /*存储学号的数组*/printf("\n ");printf(" no: ");scanf("%s",sno); /*输入学号*/if(sno[0]=='#') /*#结束输入*/return s;s=( LinkList *)malloc(sizeof(LinkList));strcpy(s->studentInfo.sno,sno);if(strlen(sno)>4) /*如果sno字符个数大于等于5,因为字符串没有'\0'结束标志,在读数据时将把姓名字符一起读到sno数组,因此做了如下处理*/ s->studentInfo.sno[4]='\0';printf(" name: ");scanf("%s",s->studentInfo.sname); /*输入姓名*/printf("score: ");scanf("%d",&s->studentInfo.score);/*输入成绩*/return s;}LinkList *createTailList( ) /*以尾插法建立带头结点的学生信息单链表*/{ LinkList *L,*s, *r; /*L头指针,r尾指针,s是指向新建结点的指针*/ L=( LinkList *)malloc(sizeof (LinkList)); /*建立头结点,申请结点存储空间*/r=L; /*尾指针指向头结点*/printf("\请输入学生成绩,当学号no为\"#\"时结束:\n\n ");while (1) /*逐个输入学生的成绩*/{ s=inputdata( );if(!s) break; /*s为空时结束输入*/r->next=s; /*把新结点插入到尾指针后*/r=s; /*r 指向新的尾结点*/ }r->next=NULL; /*尾指针的指针域为空*/displayAll(L); /*显示所有学生信息*/return L;}Void locateElemByno(LinkList *L, char ch[5]) /*按学号查找学生的算法*/{ LinkList *p=L->next; /*从第一个结点开始查找*/ while ( p && (strcmp(p->studentInfo.sno,ch)!=0))/*p不空且输入学号与链表中学号不等*/ p = p ->next;if (!p){ printf("\n\n\tDon't find the student!\n" );}else{ display(p); /*显示查找到的学生信息*/}}void locateElemByname(LinkList *L, char sname[8])/*按姓名查找学生的算法*/{ LinkList *p=L->next; /*从第一个结点开始查找*/ while ( p&& (strcmp(p->studentInfo.sname,sname)!=0)) /*p不空且输入姓名与链表中姓名不等*/ p = p ->next;if (!p){ printf("\n\n\tDon't find the student!\n" ); }else{display(p); /*显示查找到的学生信息*/}}int lengthList (LinkList *L) /*求学生总人数的算法*/{ LinkList * p=L->next; /* p指向第一个结点*/int j=0;while (p){ p=p->next; j++ ;} /* p所指的是第j 个结点*/return j;}void insertElem ( LinkList *L, char ch[5]) /*在带头结点的单链表L中指定学号前插入学生*/ { LinkList *p,*s;p=L; /*从头结点开始查找学号为ch的结点的前趋结点p */while ((p->next) && (strcmp(p->next->studentInfo.sno,ch)!=0))p = p ->next;s=inputdata(); /*输入欲插入学生信息*/s->next=p->next;p->next=s;}void deleteElem (LinkList *L, char ch[5]) /*删除给定学号的学生信息的算法*/{ LinkList *p,*q;p=L;while ( (p->next)&&(strcmp(p->next->studentInfo.sno,ch)!=0 )){ p=p->next; /*从头结点开始查找学号为ch的结点的前趋结点p*/}if (!p->next) /* 已经扫描到表尾也没找到*/{ printf("\n\n\tDon't find the student!\n" );}else{ q=p->next; /*q指向学号为ch的结点*/printf("\n\ndeleted student's information:");display(q);p->next=q->next; /*改变指针*/free(q); /*释放q占用空间*/printf("\n\nall student's information :");displayAll(L);}}void insertSort(LinkList *L) /*用直接插入排序思想把学生的成绩按从高到低排序,结果保存在新有序链表中,原链表不变*/{ L inkList *L1,*p; /*L1有序链表的表头,p插入位置前结点*/ LinkList *q,*s; /*q欲插入L1中的结点*/int len;len=lengthList (L) ;L1=( LinkList *)malloc(sizeof (LinkList)); /*建立头结点,申请结点存储空间*/if (L->next) /*链表L非空*/{ /*生成有序链表的第一个结点*/s=( LinkList *)malloc(sizeof (LinkList)); /*建立结点,申请结点存储空间*/strcpy(s->studentInfo .sno ,L->next->studentInfo.sno);strcpy(s->studentInfo .sname,L->next->studentInfo.sname);s->studentInfo .score =L->next->studentInfo.score;s->next =NULL;L1->next=s; /*只有原单链表的第一个结点的有序链表L1*/q=L->next->next; /*原单链表的第二个结点,q即要插入有序链表L1中的结点*/ }else{ printf("\nthe student link list is empty\n");return;}while(q) /*链表L中有结点*/{ p=L1 ; /*从链表L1的第一个结点开始比较*/while((p->next) && (p->next->studentInfo.score>=q->studentInfo.score))p=p->next ; /*查找插入位置前结点*//*生成欲插入有序链表中的结点*/s=( LinkList *)malloc(sizeof (LinkList));/*建立结点,申请结点存储空间*/strcpy(s->studentInfo .sno ,q->studentInfo.sno);strcpy(s->studentInfo .sname ,q->studentInfo.sname);s->studentInfo .score =q->studentInfo.score;if(!p->next) /*p是有序链表的最后一个结点*/{ s->next =NULL ;p->next =s;}else{ s->next =p->next ;p->next =s;}q=q->next; /*下一个欲插入有序链表的结点*/ }/*while(!q)*/displayAll(L1); /*显示生成的有序链表*/}void main(){ printf("=============================================\n\n");printf(" 带头结点的学生成绩管理程序\n\n");printf("=============================================\n\n");LinkList *L;char ch[5],sname[8];int b=1;while(b){ int a;printf("\n\n");printf(" <1>创建(带头尾插)<2>指定学号前插入<3>按学号删除\n ");printf("<4>计算学生总数<5> 按学号查找<6> 按姓名查找\n");printf(" <7>显示所有学生<8>成绩排序<9> 退出\n");printf("\n请输入功能选项:");scanf("%d",&a);switch(a){case 1:L=CreateTailList();break;case 2:printf("\n输入欲在哪个学号前插入数据:");scanf("%s",ch);insertElem(L, ch) ;break;case 3:printf("\n输入欲删除学生的学号:");scanf("%s",ch);deleteElem(L, ch) ;break;case 4:printf(" \n学生总数为:%d \n",lengthList (L) );break;case 5:printf("\n输入欲查找学生的学号:");scanf("%s",ch);locateElemByno(L, ch) ;break;case 6:printf("\n输入欲查找学生的姓名:");scanf("%s",sname);locateElemByname(L, sname );break;case 7:displayAll(L);break;case 8:insertSort(L);break;case 9:printf("\n已退出\n");b=0;break;};}}上机运行程序后,程序执行结果如图2.31(a)~(i)所示。
顺序表的基本操作与应用实验报告

实验报告课程名称数据结构实验名称顺序表基本操作与应用姓名专业班级学号试验日期试验地点E3-502指导老师邹汉斌成绩一、实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。
3.掌握对多函数程序的输入、编辑、调试和运行过程。
二、实验要求1.预习C语言中结构体的定义与基本操作方法。
2.对顺序表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容:1.编写程序实现顺序表的下列基本操作:(1) 初始化顺序表La;(2) 将La置为空表;(3) 销毁La (4) 在La中插入一个新的元素;(5) 删除La中的某一元素;(6) 在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0 ;(7) 打印输出La中的元素值。
2.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能:(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 根据姓名进行查找,返回此学生的学号和成绩;(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);(5) 给定一个学生信息,插入到表中指定的位置;(6) 删除指定位置的学生记录;(7) 统计表中学生个数。
实验提示:第2题可在第1题的基础上将数据结构的定义修改成下面形式后,程序适当修改即可。
学生信息的定义:typedef struct {char no[8]; //8位学号char name[20]; //姓名int score; //成绩}Student;typedef Student ElemType;顺序表的定义typedef struct {ElemType *elem; //指向数据元素的基地址int length; //线性表的当前长度}SqList;四、思考与提高1.编写程序完成下面的操作:(每位同学必做)(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列;(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列;(3)假设两个顺序线性表La和Lb 分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。
顺序表实现学生信息管理

实验1 利用顺序表实现学生信息管理1.实验目的·掌握顺序表结构的实现方式;·掌握顺序表常用算法的实现;·熟悉利用顺序表解决问题的一般思路;领会顺序表结构的优点与不足。
2.实验内容与要求以学生信息为数据元素建立顺序表。
一个学生的信息包括学号、姓名、性别、班级和联系电话。
程序用户可通过数字键选择信息浏览、插入信息、删除信息等功能。
对程序的具体要求如下:(1)程序启动后,显示下列选项信息:1—信息浏览2—插入信息3—删除信息4-修改信息0—退出程序(2)输入数字“1”显示所有学生信息列表。
(3)输入数字“2”进入插入信息功能模块。
程序依次提示并由用户输入学号、姓名、性别、班级和联系电话,最终实现在线性表头部插入一个学生信息。
(4)输入数字“3”进入删除信息功能模块。
程序提示并由用户输入学号,最终实现按照学号删除某个学生信息。
(5)输入数字“4”进入修改信息功能模块。
程序提示并由用户输入学号,最终实现按照学号修改某个学生信息。
(6)通过输入数字“0”使得程序结束。
(7)当用户执行浏览、插入、删除功能后,程序应继续提示用户通过数字键选择相应功能,直到用户输入数字“0”程序才结束。
3.实验编程指导(1)可仿照本章顺序表的定义形式,建立学生信息结点数据,并进一步建立一个长度为5的顺序表。
(2)参考本章中顺序表的算法描述和算法的实现,在本程序中增加顺序表的插入、删除等算法实现函数。
(3)编写主函数,可通过在while循环结构中嵌入switch分支结构实现操作选择功能。
(4)完善插入、删除功能。
实现插入信息的录入、删除记录的定位等细节。
(5)完善用户操作界面,给出详细的操作提示。
4.实验报告要求实验报告要求以word文件形式发到老师邮箱。
内容包括:(1)报告封面包括实验名称、班级、姓名、学号以及实验完成日期。
(2)各程序模块名称及功能说明。
并绘制出主要功能函数的程序流程图。
(3)个人小结。
大学数据库期末复习资料-第六第七章补充复习题

20XX年复习资料复资料专业:_____________班级:_____________科目老师:__________第6章关系数据理论一.选择题1. 对关系模式进行规范化的主要目的是BA. 提高数据操作效率B.维护数据的一致性C.加强数据的安全性D.为用户提供更快捷的数据操作2. 关系模式中的插入异常是指DA. 插入的数据违反了实体完整性约束B. 插入的数据违反了用户定狡的完整性约束C. 插入了不该插入的数据D. 应该被插入的数据不能被插入3. 如果有函数依赖XTY,并且对X的任意真子集X',都有X' 宀Y,则称CA. X完全函数依赖于YB. X部分函数依赖于YC. Y完全函数依赖于XD. Y部分函数依赖于X4. 如果有函数依赖XTY,并且对X的某个真子集X',有X' TY成立,则称BA. Y完全函数依赖于XB. Y部分函数依赖于XC. X完全函数依赖于丫D. X部分函数依赖于Y5. 若XTY和YTZ在关系模式R上成立,则XTZ在R上也成立。
该推理规则称为CA. 自反规则B.增广规则C.传递规则D.伪传递规则6. 若关系模式R中属性A仅出现在函数依赖的左部,则A为AA. L类属性B. R类属性C. N类属性D. LR类属性7. 若关系模式R中属性A是N类属性,则A DA. 一定不包含在R任何候选码中B. 可能包含也可能不包含在R的候选码中C. 一定包含在R的某个候选码中D. 一定包含在R的任何候选码中& 设F是某关系模式的极小函数依赖集。
下列关于F的说法,错误的是BA. F中每个函数依赖的右部都必须是单个属性B. F中每个函数依赖的左部都必须是单个属性C. F中不能有冗余的函数依赖D. F中每个函数依赖的左部不能有冗余属性9.有关系模式:学生(学号,姓名,所在系,系主任),设一个系只有一个系主任,则该关系模式至少属于BA.第一范式B.第二范式C.第三范式D. BC范式20XXXX.设有关系模式R(X, Y, Z),其F二{YT乙YTX, X-4YZ),则该关系模式至少属于A. 第一范式 C.第三范式20XXXX.下列关于关系模式与范式的说法,错误的是DA. 任何一个只包含两个属性的关系模式一定属于3NFB. 任何一个只包含两个属性的关系模式一定属于BCNFC. 任何一个只包含两个属性的关系模式一定属于2NFD. 任何一个只包含三个属性的关系模式一定 属于3NF20XXXX.有关系模式:借书(书号,书名,库存量,读者号,借书日期,还书日期), 设一个读者可以多次借阅同一本书,但对一种书(用书号唯一标识)不能同时借多本。
数据结构1-3习题答案

课堂练习
1、在什么情况下用顺序表比链表好? 、在什么情况下用顺序表比链表好 2、画出执行下列各行语句后各指针及链表的 示意图。 示意图。 、 L=(LinkList) malloc (sizeof(LNode));//等价于 等价于L=new LNode; 等价于 P=L; For(i=1;i<=4;i++) { P->next=(LinkList) malloc (sizeof(LNode)); P=P->next; P->data=i*2-1;} P->next=NULL; For(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2); For(i=1;i<=3;i++) Del_LinkList(L,i);
在下面两列中,左侧是算法(关于问题规模) 2.8 在下面两列中,左侧是算法(关于问题规模) 的执行时间,右侧是一些时间复杂度。 的执行时间,右侧是一些时间复杂度。请用连 线的方式表示每个算法的时间复杂度。 线的方式表示每个算法的时间复杂度。 100n3 6n2-12n+1 1024 n+2log2n n(n+1)(n+2)/6 2n+1+100n
判断下述计算过程是否是一个算法: 2.4 判断下述计算过程是否是一个算法: Step1: 开始 Step2: n<=0; Step3: n=n+1; 重复步骤3; Step4: 重复步骤3; 结束; Step5: 结束; 该计算过程不是一个算法, 答:该计算过程不是一个算法,因为其不满足算法的 有穷性。 有穷性。
回顾
第一章知识要点: 第一章知识要点: • 基本概论:数据、数据元素、数据项、数据对象 基本概论:数据、数据元素、数据项、 • 数据结构(D,S) 数据结构(D,S)
数据库原理与应用试题--含答案

一、判断题[数据库系统概论]2(F)与用文件系统来管理数据相比,用数据库管理数据增加了数据冗余度。
(F)一个信息只能用一种数据形式来表示。
(F)数据库系统是数据库管理系统的重要组成部分。
(F)数据库的三级模式是概念模型、逻辑模型和物理模型。
(F)E-R模型只能转换为关系模型,不能转换为层次模型和网状模型。
(F)如果一个实体A对应多个实体B,则A与B之间必然是一对多的联系。
[关系型数据库基本原理]2(F)一个关系的主键只能包含一个属性。
(F)在实体-联系模型中,实体具有属性,联系不能具有属性。
(F)关系运算中,选择运算是从列的角度进行的运算,投影运算是从行的角度进行的运算。
(F)在一个关系模式中,如果A->B,B->C,则称C部分依赖于A。
(F)E-R图转换为关系模型时,实体可转换为关系模式,联系不能转换为关系模式。
(F)E-R图转换为关系模式时,所有的联系都必须转换为独立的关系模式。
[数据库的管理]1(F)数据库的文件包括数据文件、事务日志文件和索引文件。
(F)数据库的一个数据文件可以属于多个文件组。
(F)在SQL Server中,数据库的主数据文件的扩展名是ldf。
[表的管理]2(F)创建一个表时,对于表的每一列,必须指明数据类型和长度,例如“生日datetime〔8〕”。
(T)在SQL Server中,nchar数据类型与nvarchar数据类型的区别是,前者是固定长度的,后者是可变长度的。
(T)在SQL Server中,存储逻辑型数据值的数据类型是bit.(F)SQL中的数据定义语言〔DDL〕用于实现数据增、删、改、查等数据操作。
(F)对于逻辑型的属性,赋值是只能写“YES”或“NO”。
(T)在SQL语句中,对一个字符型的属性赋值,应该两边用单引号将值包括起来。
[数据查询]1(F)关系型数据库的连接查询有内连接和外连接之分,内连接只能实现两个表的查询,外连接可以实现多个表的查询。
学生信息管理系统(顺序表)实验1

数据结构课程设计设计题目: 学生信息管理系统(顺序)姓名及学号:专业班级:09计算机科学与技术指导教师:完成时间:信息工程学院计算机科学系安徽新华学院课程设计成绩评定表(本科)目录一、实验目的 (1)二、实验内容 (1)三、基本要求 (1)四、算法设计思想 (1)五、算法流程图 (1)六、算法源代码 (6)七、运行结果 (22)八、收获和体会 (25)九、致谢 (25)1。
实验目的:通过制作学生信息管理系统(1)基本掌握面向过程程序设计的的基本思路和方法;(2)达到熟练掌握C语言的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。
2.实验内容:输入一个班学生的学号,姓名,性别,成绩。
编程插入学生信息,设计查找每个学生的信息,删除学生信息,输出学生信息,修改学生信息,报表和显示学生信息,及退出学生信息管理系统。
3.基本要求:(1)硬件:微机,打印机各一台(2)软件:Visual C++,windows74。
算法设计思想(1)。
分析程序的功能要求,划分程序功能模块.(2). 画出系统流程图。
(3)。
代码的编写。
定义数据结构和各个功能子函数。
(4)。
程序的功能调试。
5。
算法的流程图6。
算法源代码:#include<stdio.h〉#include〈stdlib.h〉#include〈string。
h>#define OK 1#define ERROR 0#define OVERFLOW —2#define MAXSIZE 10#define List_INIT_SPACE 10 #define List_INC_SPACE 1 typedef struct{char number[15];char name[10];char sex[10];int score;}Elemtype;typedef struct{Elemtype *elem;int length;int listsize;}sqlist;/*1创建空顺序表并初始化*/void creatList(sqlist *L){int i=0,n;Elemtype *newbase;L-〉elem=(Elemtype*)malloc(List_INIT_SPACE*(sizeof(Elemtype)));if(!L-〉elem)exit(OVERFLOW);L—〉length=0;L->listsize=List_INIT_SPACE;printf("有几位同学:\n");scanf(”%d”,&n);for(i=0;i<n;i++){if(L-〉length==L->listsize){newbase=(Elemtype*)realloc(L—〉elem,(List_INIT_SPACE+List_INC_SPACE)*sizeof(Elemtype));if(newbase){L—〉elem=newbase;L—〉listsize+=List_INC_SPACE;}else exit(OVERFLOW);}printf(”请输入第%d名同学的信息:\n”,i+1);printf("学号(15)\n");scanf("%16s",L—>elem[L->length].number);printf("姓名(15)\n");scanf(”%16s”,L-〉elem[L->length]。
假设教学数据库中有三个关系:学生(学号,姓名,年龄,...

• 假设教学数据库中有三个关系:学生(学 号,姓名,年龄,性别,班级),成绩 (学号,课程号,分数),课程(课程号, 课程名称,学时,任课教师)。根据教学 数据库给出下列各题答案: • (5)检索没有任何一门课程成绩在80分以 下的学生的信息,包括学号、姓名和班级。
• 假设教学数据库中有三个关系:学生(学号,姓 名,年龄,性别,班级),成绩(学号,课程号, 分数),课程(课程号,课程名称,学时,任课 教师)。根据教学数据库给出下列各题答案: • (5)检索没有任何一门课程成绩在80分以下的 学生的信息,包括学号、姓名和班级。 • π姓名,姓名,班级 (学生) - π姓名,姓名,班级 ( δ分数<80(学生∞ 成绩))
• 假设教学数据库中有三个关系:学生(学号,姓 名,年龄,性别,班级),成绩(学号,课程号, 分数),课程(课程号,案: • (4)检索出没有选修课程号为C3的所有学生姓 名。
• π姓名(学生) - π姓名( δ课程号=‘C3’ (学生∞成绩))
• π课程名称,任课教师 (δ学号=‘S3’(成绩∞课程))
• 假设教学数据库中有三个关系:学生(学 号,姓名,年龄,性别,班级),成绩 (学号,课程号,分数),课程(课程号, 课程名称,学时,任课教师)。根据教学 数据库给出下列各题答案: • (2)用关系代数表达式表示,检索LIU老 师所授课程的课程号、课程名。
• π姓名(δ性别=‘女’ and 任课教师=‘LIU’(学生∞成绩∞课程))
• 假设教学数据库中有三个关系:学生(学 号,姓名,年龄,性别,班级),成绩 (学号,课程号,分数),课程(课程号, 课程名称,学时,任课教师)。根据教学 数据库给出下列各题答案: • (4)检索出没有选修课程号为C3的所有学 生姓名。
假设教学数据库中有三个关系:学生(学号,姓名,年龄,...

• 假设教学数据库中有三个关系:学生(学 号,姓名,年龄,性别,班级),成绩 (学号,课程号,分数),课程(课程号, 课程名称,学时,任课教师)。根据教学 数据库给出下列各题答案: • (4)检索出没有选修课程号为C3的所有学 生姓名。
• 假设教学数据库中有三个关系:学生(学 号,姓名,年龄,性别,班级),成绩 (学号,课程号,分数),课程(课程号, 课程名称,学时,任课教师)。根据教学 数据库给出下列各题答案: • (5)检索没有任何一门课程成绩在80分以 下的学生的信息,包括学号、姓名和班级。
• 假设教学数据库中有三个关系:学生(学号,姓 名,年龄,性别,班级),成绩(学号,课程号, 分数),课程(课程号,课程名称,学时,任课 教师)。根据教学数据库给出下列各题答案: • (5)检索没有任何一门课程成绩在80分以下的 学生的信息,包括学号、姓名和班级。 • π姓名,姓名,班级 (学生) - π姓名,姓名,班级 ( δ分数<80(学生∞ 成绩))
• 设有两个基本表R(A,B,C)和S(A,B, C),试用SQL查询语句表达下列关系代数 表达式 • R∪S
• 设有两个基本表R(A,B,C)和S(A,B, C),试用SQL查询语句表达下列关系代数 表达式 • R∪S • Select * From R • Union • Select * From S
• 设有两个基本表R(A,B,C)和S(A,B, C),试用SQL查询语句表达下列关系代数 表达式 • R×S • Select * From R,S
• 设有两个基本表R(A,B,C)和S(A,B, C),试用SQL查询语句表达下列关系代数 表达式 • ∏A,B (R)∞∏B,C (S)
第六章-关系数据理论第七章-数据库设计补充复习题附带答案

第6章关系数据理论一.选择题1.对关系模式进行规范化的主要目的是BA.提高数据操作效率B.维护数据的一致性C.加强数据的安全性D.为用户提供更快捷的数据操作2.关系模式中的插入异常是指DA.插入的数据违反了实体完整性约束B.插入的数据违反了用户定义的完整性约束C.插入了不该插入的数据D.应该被插入的数据不能被插入3.如果有函数依赖X→Y,并且对X的任意真子集X’,都有X’Y,则称C A.X完全函数依赖于Y B.X部分函数依赖于YC.Y完全函数依赖于X D.Y部分函数依赖于X4.如果有函数依赖X→Y,并且对X的某个真子集X’,有X’→Y成立,则称B A.Y完全函数依赖于X B.Y部分函数依赖于XC.X完全函数依赖于Y D.X部分函数依赖于Y5.若X→Y和Y→Z在关系模式R上成立,则X→Z在R上也成立。
该推理规则称为CA.自反规则B.增广规则C.传递规则D.伪传递规则6.若关系模式R中属性A仅出现在函数依赖的左部,则A为AA.L类属性B.R类属性C.N类属性D.LR类属性7.若关系模式R中属性A是N类属性,则A DA.一定不包含在R任何候选码中B.可能包含也可能不包含在R的候选码中C.一定包含在R的某个候选码中D.一定包含在R的任何候选码中8.设F是某关系模式的极小函数依赖集。
下列关于F的说法,错误的是B A.F中每个函数依赖的右部都必须是单个属性B.F中每个函数依赖的左部都必须是单个属性C.F中不能有冗余的函数依赖D.F中每个函数依赖的左部不能有冗余属性9.有关系模式:学生(学号,姓名,所在系,系主任),设一个系只有一个系主任,则该关系模式至少属于BA.第一范式B.第二范式C.第三范式D.BC范式10.设有关系模式R(X, Y, Z),其F={Y→Z, Y→X, X→YZ},则该关系模式至少属于DA.第一范式B.第二范式C.第三范式D.BC范式11.下列关于关系模式与范式的说法,错误的是DA.任何一个只包含两个属性的关系模式一定属于3NFB.任何一个只包含两个属性的关系模式一定属于BCNFC.任何一个只包含两个属性的关系模式一定属于2NFD.任何一个只包含三个属性的关系模式一定属于3NF12.有关系模式:借书(书号,书名,库存量,读者号,借书日期,还书日期),设一个读者可以多次借阅同一本书,但对一种书(用书号唯一标识)不能同时借多本。
数据结构c++顺序表、单链表的基本操作,查找、排序代码

} return 0; }
实验三 查找
实验名称: 实验3 查找 实验目的:掌握顺序表和有序表的查找方法及算法实现;掌握二叉排序 树和哈希表的构造和查找方法。通过上机操作,理解如何科学地组织信 息存储,并选择高效的查找算法。 实验内容:(2选1)内容1: 基本查找算法;内容2: 哈希表设计。 实验要求:1)在C++系统中编程实现;2)选择合适的数据结构实现查 找算法;3)写出算法设计的基本原理或画出流程图;4)算法实现代码 简洁明了;关键语句要有注释;5)给出调试和测试结果;6)完成实验 报告。 实验步骤: (1)算法设计 a.构造哈希函数的方法很多,常用的有(1)直接定址法(2)数字分析法;(3) 平方取中法;(4)折叠法;( 5)除留余数法;(6)随机数法;本实验采用的是除 留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈 希地址 (2)算法实现 hash hashlist[n]; void listname(){ char *f; int s0,r,i; NameList[0].py="baojie"; NameList[1].py="chengቤተ መጻሕፍቲ ባይዱoyang"; ……………………………… NameList[29].py="wurenke"; for(i=0;i<q;i++){s0=0;f=NameList[i].py; for(r=0;*(f+r)!='\0';r++) s0+=*(f+r);NameList[i].k=s0; }} void creathash(){int i;
v[k-1]=v[k]; nn=nn-1; return ; } int main() {sq_LList<double>s1(100); cout<<"第一次输出顺序表对象s1:"<<endl; s1.prt_sq_LList(); s1.ins_sq_LList(0,1.5); s1.ins_sq_LList(1,2.5); s1.ins_sq_LList(4,3.5); cout<<"第二次输出顺序表对象s1:"<<endl; s1.prt_sq_LList(); s1.del_sq_LList(0); s1.del_sq_LList(2); cout<<"第三次输出顺序表对象s1:"<<endl; s1.prt_sq_LList(); return 0; } 运行及结果:
数据结构实验一 顺序表的实现

cout <<v.elem[i] <<' '; cout <<endl; }
} default: flag=0; cout <<"程序结束,按任意键退出!" <<endl; } } } //初始化线性表 void initial(seqlist &v) { int i; cout <<"请输入初始线性表长度:n="; cin >>st; cout <<"请输入各元素/字符[中间用空格隔开](例如:a b c d): "; for(i=0;i<st;i++) cin >>&v.elem[i]; } //插入一个元素,成功返回True,失败返回False bool insert (seqlist &v,int loc,char ch) { int i; if((loc<1)||(loc>st+1)) { cout <<"插入位置不合理!" <<endl; //位置错误 return false; } else if(st>=Max) { cout <<"超出线性表最大容量!" <<endl; //溢满 return false; } else { for(i=st-1;i>=loc-1;i--) v.elem[i+1]=v.elem[i]; //插入位置后的元素后移 v.elem[loc-1]=ch; //插入元素 st++; //表长度加1
四、程序的调试及运行结果
五、程序代码
《数据结构与算法分析课程设计》任务书 (2)

2013级数据结构与算法分析课程设计任务书(适应于2013级软件工程专业)一、课程设计的目的与要求1.教学目的《数据结构与算法设计》课程设计是软件工程、网络工程、数字媒体技术专业学生的重要实践性环节。
通过本课程设计,学生可以了解数据结构、算法设计的基本方法与基本原理,掌握软件设计中数据的组织,算法的设计,为今后从事实际工作打下基础。
同时,作为整个实践教学体系一部分,系统培养学生采用面向对象的方法分析问题与解决问题的能力及团体组织与协作能力。
2.教学要求从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:1.掌握各类基本数据结构及其实现;2.掌握不同数据结构的实际应用;3.培养利用数据结构并对实际应用问题进行算法设计的能力。
4.编程简练,程序功能齐全,能正确运行。
5.说明书、流程图要清楚,规范6.课题完成后必须按要求提交课程设计报告,格式规范,内容详实。
二、课程设计的内容与安排注:1、鼓励各位同学自主查找资料,结合专业特性,尽量应用图形界面实现,以期对图形界面的开发有一个比较深入的了解。
2、任务要求1.问题分析和任务定义。
根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?2.逻辑设计。
对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。
逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图。
3.详细设计。
定义相应的存储结构并写出各函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。
详细设计的结果是对数据结构和基本操作作出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架。
4.程序编码。
汇编语言综合实验 --- 学生成绩排序(单链表实现)

这一部分任务是按学生总成绩由高到低进行排序。采用单链表方式,给数据元素的链指针LINK字段装填数据,使LINK字段指向它的后继数据元素。步骤如下:
Ⅰ.初始时,数组元素的每个LINK字段值为0,表示数组元素没有被选中。扫描数组元素的SUM字段,从中找到第一个最大的数,将这个数组元素设置为链表的头,保存这个数组元素的位移量,并将其LINK字段设置为1,标记这个数组元素已被选中但尚未装填链指针。
重复上述步骤直到该结构体类型数组中的最后一个节点LINK字段置为1,该节点即为单链表的链尾。
③遍历单链表,即对学生成绩信息按总成绩由高到低输出。
首先将单链表的头指针赋值给BX,依次循环COUNT(学生人数)次输出每一个数组元素的值,每次输出结束后,将BX的值加上TYPE S_ARRAY(即加16字节),BX指向下一个数组元素的首地址。
②建立单链表,即完成对学生成绩信息的降序排列。
首先从所有数组元素中找出总成绩最大的一项,将该数组元素作为单链表的头指针,保存在DX中,同时将LINK字段赋值为1;
其次,从LINK字段为0的数组元素中找到总成绩最大的一项,将该数组元素的偏移地址作为前一节点的LINK字段值,同时将该节点的LINK字段值置为1;
图1-1程序主界面:
图1-2程序二级菜单界面:
2.排序功能的实现:
图1-2输入学生成绩界面:
图1-4按总分排序输出学生成绩信息:
3.设计思路:
(1)数据定义:
一个数据元素(一个学生的数据项)应该为一个结构类型,定义如下:
STUDENT STRUC;定义学生结构体
LINK DW 0;单链表指针,指向下一个节点偏移地址
Ⅰ.将链表的头元素的位移量送到BX寄存器。
实验一 顺序表操作实现

实验一顺序表操作实现实验日期: 2021 年 3 月 6 日实验目的及要求1. 熟练掌握线性表的基本操作在顺序存储上的实现;2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点;3. 掌握线性表的顺序存储结构的定义和基本操作的实现;4. 通过本实验加深对C语言的使用(特别是函数调用的参数传递、指针类型的应用)。
实验内容已知程序文件seqlist.cpp已给出学生身高信息顺序表的类型定义和基本运算函数定义。
(1)顺序表类型定义typedef struct {int xh; /*学号*/ float sg; /*身高*/int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist;(2)基本运算函数原型void initList(Seqlist *lp);/*置一个空表*/void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ voidpntList(Seqlist *lp);/*输出学生表*/void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/任务一创建程序文件seqlist.cpp,其代码如下所示,理解顺序表类型Seqlist和基本运算函数后回答下列问题。
/*seqlist.cpp程序文件代码*/ #include #include #define MAX 50 typedef struct {int xh; /*学号*/ float sg; /*身高*/int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist;void initList(Seqlist *lp);/*置一个空表*/void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist*lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ voidpntList(Seqlist *lp);/*输出学生表*/void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*//*置一个空表*/void initList(Seqlist *lp) { lp->last=0; }/*建一个学生顺序表*/void createList(Seqlist *lp) { FILE *fp; int xh ,sex; float sg;if((fp=fopen(\ { Error(\ }while(!feof(fp)){ fscanf(fp,\ lp->data[lp->last].xh=xh; lp->data[lp->last].sg=sg; lp->data[lp->last].sex=sex; lp->last++; }fclose(fp);}/*按学号排升序*/void sort_xh(Seqlist *lp) { int i,j,k; datatype st;for(i=0;ilast-1;i++) {k=i;for(j=i+1;jlast;j++) if(lp->data[j].xhdata[k].xh ) k=j; if(k!=i) {st=lp->data[k]; lp->data[k]=lp->data[i]; lp->data[i]=st;} } }/*自定义错误处理函数*/ void Error(char *s) { printf(\exit(1); /*返回OS,该函数定义在stdlib.h中*/ }/*输出学生顺序表*/ void pntList(Seqlist *lp) { int i;for(i=0;ilast ;i++)printf(\}/*保存学生顺序表到指定文件*/ void save(Seqlist *lp,char strname[]) { FILE *fp; int i;if((fp=fopen(strname,\ { Error(\ }for(i=0;ilast ;i++) {fprintf(fp,\ }fclose(fp); }请回答下列问题:(1)由顺序表类型定义可知,该顺序表类型名为 Seqlist ,其中存放的元素为学生信息,学生信息定义的类型名为 datatype ,包含 xh 、 sg 、 sex 三个成员(写出成员变量名),学生信息存储于 data 数组,顺序表的表长变量为MAX 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
____ t=0;
for(i=0;i<nn;i++) { if(strcmp(y,v[i].name)=0)
{t=t+1 cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<" "<<"分数: "<<v[i].score<<endl;
} } if(t==0) cout<<"No this student in the list!"<<endl } /*计算*/ void sq_LList ::cal_sq_LList(int m) { int i; float sum,avr; { sum=0; for(i=0;i<nn;i++) {sum=sum+v[i].score; avr=sum/(i+1);
4
Commented [A1]: error C2065: 'k' : undeclared identifier 错误原因:变量 k 缺少定义和申明; sq_LList ::sea_num_sq_LList(int i)中缺少对变量 k 定义和申明,不能再 case 4 中的 case1 中定义和申明。 修改:在该处对变量 k 进行申明和定义,并把 case 4 中 的 case 1 中的定义和申明删除。
Commented [A2]: error C2511: 'sea_name_sq_LList' : overloaded member function 'void (int,char [])' not found in 'sq_LList' 原因:重载的成员函数“void(int,char [])在 sq_llist 没 有找到” 修改:将定义删除,包括 class 里的定义。
v[3].score=93; v[4].num=970160; strcpy(v[4].name,"李启明
"); v[4].score=88;
nn=5;
}
void sq_LList ::prt_sq_LList()
{ int i;
for(i=0; i<nn; i++)
{ cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<"
if(nn==0) {cout<<"underflow"<<endl; return ;}
if((i<1)||(i>nn)) {cout<<"Not this element in the list!"<<endl;
return ; }
3
for(k=i; k<nn; k++) v[k-1]=v[k]; nn=nn-1;
v[0].score=87;
v[1].num=970157; strcpy(v[1].name,"李
小青"); v[1].score=96;
v[2].num=970158; strcpy(v[2].name,"刘 华");
v[2].score=85;
v[3].num=970159; strcpy(v[3].name,"王 伟");
"<<"分数: "<<v[i].score<<endl;
2
} } /*插入*/ void sq_LList ::ins_sq_LList(int i, STUDENT b) { int k;
if(nn==mm) {cout<<"overflow"; return ;}
if(i>nn) i=nn+1; if(i<1) i=1; for(k=nn; k>=i; k--) v[k]=v[k-1]; v[i-1]=b; nn=nn+1; } /*删除*/ void sq_LList ::del_sq_LList(int i) { int k;
} /*按学号查找*/ void sq_LList ::sea_num_sq_LList(int i) { int k,t ; ____
t=0; for(i=0;i<nn;i++)
{ if(v[i].num==k) { t=t+1; cout<<"学号: "<<v[i].num<<" 姓名: "<<v[i].name<<"
"<<"分数: "<<v[i].score<<endl; }
} if(t==0) cout<<"No this student in the list!"<<endl;
} /*按姓名查找*/ void sq_LList ::sea_name_sq_LList(int i, char y[]) { int t;
1
void sea_name_sq_LList(int ,char 批注[A2]);
void cal_sq_LList(int);ห้องสมุดไป่ตู้
};
/*输出*/
sq_LList ::sq_LList(int m)
{ mm=m;
v=new STUDENT [mm];
v[0].num=970156; strcpy(v[0].name,"张小明");
云南大学物理实验教学中心
实验报告
课程名称: 计算机软件技术基础
实验项目: 实验二、线性表(顺序存储)及其应用
学生姓名:
学号:
学院
系
级
专业
成绩
指导教师:
实验时间: 实验地点:
年 日 时 分至 时
分
实验类型:教学(演示□ 验证□ 综合█ 设计□) 学生科研□
课外开放□
测试□
其它□
一、实验目的:掌握顺序表的建立及基本操作。 二、问题:建立一个顺序表,表中元素为学生,每个学生信息包
含姓名、学号和成绩三部分,对该表实现:① 输出、② 插入、③ 删除、④ 查找功能,并计算出平均成绩和总 成绩。
三、程序的编写与调试
1、原程序: #include <iostream> using namespace std; typedef struct { long double num; char name[10]; int score; } STUDENT; class sq_LList { private: