数据结构c语言版课程设计
/*
创建多项式a:
系数的幂(0 0结尾):1 0
系数的幂(以0 0结尾):2 1
系数的幂(以0 0结尾):3 2
系数的幂(0 0结束):0 0
A(x) = 3.00x^2 2.00x 1.00
创建多项式b:
系数的幂(以0 0结尾):1 4
系数的幂(以0 0结尾):-3 2
系数的幂(以0 0结尾):1 1
系数的幂(以0 0结尾):-2 0
系数的幂(0 0结束):0 0
B(x) = 1.00x^4 - 3.00x^2 1.00x - 2.00
c(x)= 3.00x^6 2.00x^5-8.00x^4-3.00x^3-7.00x^2-3.00 x-2.00
A(2.00) = 17.0000
B(2.00) = 4.0000
C(2.00) = 68.0000
按任意键继续
*/
#包含stdio.h
#包含stdlib.h
#包含数学. h
#定义EPS 1E-6
typedef结构项{
双倍系数;
int幂;
结构项* next
} *多项式,*节点;
多项式创建(){//创建多项式
节点头,p;
双coe
int pwr
head = p =(节点)malloc(sizeof(item));
while(1) {
Printf("系数的幂(以0 0结尾):");
scanf("%lf%d ",coe,PWR);
if(Coe = = 0.0 PWR = = 0)break;
p-next =(节点)malloc(sizeof(item));
p-next-系数= coe
p-next-power = PWR;
p = p-next;
}
p-next = NULL;
回程头;
}
Void Sort(多项式头){//按降序幂排序。
节点pt,q,p =头;
while(p-next) {
q = p-next;
while(q-next) {
if(p-next-power q-next-power) {
pt = p-next;
p-next = q-next;
q-next = p-next-next;
p-next-next = pt;
}
else q = q-next;
}
p = p-next;
}
}
Void Show(多项式头){//显示多项式。
多项式p = head-next;
int flag = 1;
if(p == NULL)返回;
while(p) {
如果(标志){
if(fabs(p系数)= EPS) {
if(p-power == 0) printf("%.2lf ",p-系数);
else if(p-power = = 1)printf(" % . 2 lfx ",p系数);
else printf("%.2lfx^%d”,p-系数,p-幂);
}
flag = 0;
}
else if(p系数0) {
if(p-power == 0) printf(" %.2lf ",p-系数);
else if(p-power = = 1)printf(" % . 2 lfx ",p系数);
else printf(“%.2lfx^%d”,p系数,p次方);
}
否则{
if(p-power == 0) printf("- %.2lf ",-p-coefficient);
else if(p-power = = 1)printf("-% . 2 lfx ",-p-coefficient);
else printf("- %.2lfx^%d ",-p系数,p次方);
}
p = p-next;
}
printf(" \ n ");
}
double Power(double x,int n) {
double值= 1.0;
int I;
for(I = 1;I = n;I)值* = x;
返回值;
}
双值(多项式头,双x){//多项式求值
多项式p;
double值= 0.0;
for(p = head-next;p;p = p-下一个)
值= p-系数*幂(x,p-幂);
返回值;
}
多项式乘法(多项式a,多项式b){//多项式乘法
多项式头,t,p,q;
head = t =(NODE)malloc(sizeof(item));
for(p = A-next;p;P = p-next) {//完成乘法过程。
for(q = B-next;q;q = q-next) {
t-next =(节点)malloc(sizeof(item));
t-next-coefficient = p系数* q系数;
t-next-power = p-power q-power;
t = t-next;
}
}
t-next = NULL;
排序(头);//排序
p =头部;
While(p-next) {//合并相似项。
q = p-next;
while(q-next) {
if(p-next-power = = q-next-power){
p-下一个系数= q-下一个系数;
t = q-next;
q-next = t-next;
免费(t);
}
else q = q-next;
}
p = p-next;
}
回程头;
}
void FreeMemory(多项式头){
多项式q,p =头;
while(p) {
q = p;
p = q-next;
免费(q);
}
}
int main() {
Printf("创建多项式A:\ n ");
多项式A = Create();
排序(A);
printf(" A(x)=);展示(一);
Printf("创建多项式B:\ n ");
多项式B = Create();
排序(B);
printf(" B(x)=);显示(B);
多项式C = Mult(A,B);
printf(" C(x)=);展示(C);
printf(" A(%). 2 lf)= . 4lf \ n ",2.0,Value(A,2.0));
printf(" B(% . 2 lf)= " . 4lf \ n ",2.0,Value(B,2.0));
printf(" C(% . 2 lf)= " . 4lf \ n ",2.0,Value(C,2.0));
自由内存(A);
自由内存(B);
自由内存(C);
返回0;
}
学生成绩管理系统的数据结构C语言课程设计 第一,需求分析
1.系统菜单的主要功能
(1)输入几条记录
(2)查找和修改记录
(3)查找和删除记录
(4)成绩排名
(5)查找并显示一条记录
(6)将数据加载到存储器中
(7)将所有数据写入文件。
(0)退出程序
2.泛函分析
功能1是将记录输入到结构中。
函数2、3和5在算法上相似。都是先找成绩,然后在这个基础上对找到的信息进行操作。因为学生的名字是以字符数组的形式定义的,所以用选择法排序时要用到strcmp,strcpy等函数。
功能4是成绩排序,可以根据学生的学号或者单科成绩或者总分进行排序,输出相关的学生信息。
函数6和7对文件进行操作,并预先准备数据。
二、总体设计
“学生成绩管理系统”包括几个模块:成绩输入、修改、删除、成绩统计、信息保存和加载。
1.主函数main()
利用无限循环while(1)和swithch()调用各个函数,系统根据输入的数值选项调用相应的函数。
2.菜单选择函数showmenu();
这是一个非参数函数,主要实现“函数选择”的界面。在这个界面中,有一个显示系统各种功能的菜单,根据每个功能前面的序号进行选择。执行完每个功能后,按任意键返回主界面也应该是通过这个功能实现的!3.输入记录函数addstudent (stu *s)这是一个带参数的函数,用来输入第一个学生的记录,当学生为0时停止输入。
算法:使用函数参数s,并将s-设置为空。每次输入数据时声明一个新的节点p,将p-next设置为NULL,并链接到前面列表的末尾。4.显示记录函数showstudent (stu *s)这是一个不返回值的参数函数。形参是“链表头的指针”,负责所有学生成绩记录的输出。缺点是学生的成绩不能显示在页面上。算法:先将P节点的指针指向第一个节点,输出P节点(第一个节点)的数据。然后将P节点的指针指向P指针的指针(即下一个节点),输出P节点(即第一个节点)的数据。重复这一步聚合,直到p指针指向NULL。5.查找记录函数findstudent (stu *s)这是一个不返回值的参数函数,形参是“链表头的指针”,可以根据学号找到一个学生,并显示找到的记录。算法:用线性搜索法寻找下一个节点。输入要查找的学生的学号S,设置一个指针变量P,先指向第一个节点,当strcmp(p-name,s) p!= NULL,使p后退一个节点,如果p!=NULL,输出p. 6指向的节点。delstudent (stu *s)删除记录函数这是一个带参数的函数,形参是“链表头的指针”。首先输入要删除的学生记录的学号,找到后显示学生信息。确认后,按“Y”删除。算法:从P指向的第一个节点开始,检查这个节点中的num值是否等于输入的需要删除的学号。如果相等,删除该节点;如果不相等,将P向后移动一个节点,依此类推,直到到达页脚。7.将数据保存到文件函数savestudent (stu *s)这是一个没有返回值的参数函数,形参是“链表头的指针”,可以将学生记录保存在电脑上自己命名的二进制文件中。8.从文件中读取数据函数loadstudent (stu *s)。这是一个不返回值的参数化函数。形参是“链表头指针”,根据输入文件地址读取。
三、程序流程图
1)性能统计:
2)信息录入:
3)信息修改:
4)信息删除:
4)信息查询:
4)信息保存:5)主要功能:
四、程序调试及经验
1)程序演示:
2)程序调试:
(1)一开始没有初始化功能。程序运行后,我试图在不输入任何数据的情况下执行显示功能,结果显示出一些乱码!加入初始化功能后,这种现象消失。
(2)首先执行输入功能,按照学号顺序输入十个学生的成绩。输入后,显示功能被执行。学生记录以学生编号的逆序显示。我试着在里面加了一些句子,希望能按正常顺序显示学号,但暂时没有成功,只能按学号逆序输入分数,最后按学号正常顺序输出。
(3)开始时,先按平均分对成绩进行排序,然后插入一个学生的成绩来执行显示功能。虽然插入的学生成绩可以正常插入,但是学生的排名是0。稍后,在插入成绩后,调用排序函数对所有成绩进行重新排序。
(4)输入函数中设置了无限循环,可以输入无数学生的成绩信息,学号为0时停止输入。
(5)输入太多学生的分数时,屏幕显示无法控制为逐页显示,所以为了方便起见,不要输入太多记录,17左右最好。
(6)在不输入任何信息的情况下,执行排序功能,最后显示一条记录,学号和姓名为空,得分为0,排名为1。
(7)输入选项时,不能输入字母,否则会死循环。建议不要乱输入字母。
3)体验:
经过一周的课程设计,感觉收获很大!
首先,链表是数据结构的基本体现,所以这个课程设计主要用链表,用起来还是挺方便的,但是不太好理解,所以我花了很多时间看教材,查阅这方面的课外书,对C语言的知识加强了很多。
其次,在课程设计过程中,我们发现了很多平时没有注意到的问题,比如主函数中返回值函数和非返回值函数的调用不同。
更重要的是,虽然这次课程设计花了我很多时间,但正是这次让我意识到,要学好C语言,数据处理是非常重要的。这个学生成绩管理系统是在自己的知识范围内完成的,所以界面清晰简洁,可能不是很漂亮,但是绝对实用!
从这里我也得到了一个经验,做一个程序或者开发一个软件,要把重点放在它的后台制作上,不能做一个没用的程序或者软件。
我相信这个课程设计为我以后继续从事计算机工作做了一个小小的开始。
参考书目;
数据结构课程设计(C语言版)一元稀疏多项式的运算 数据关系:R=约定a1是栈底,an。
对于栈顶。基本操作:推(s,e)
初始条件:堆栈s已经存在。
操作结果:插入元素E作为新的栈顶元素。
流行音乐
初始条件:堆栈s已经存在并且不为空。
操作结果:删除S的顶部元素,用e返回其值。
最后更新于 2023-10-08 21:53:12 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章