完成一个小学数学习题程序(C语言程序设计)
# include & ltstdlib.h & gt
# include & ltstring.h & gt
#定义菜单_编号7
#定义N 3
typedef结构s1
{
字符编号[11];/*学号由10个字符组成*/
char name[15];/*学生姓名*/
浮动分数[N];/*各门课程的成绩*/
浮动总和;/*总分*/
浮动平均值;/*平均分数*/
int顺序;/*排名*/
struct s 1 * next;/*指向后续节点的指针*/
}学生;/*定义结构类型*/
学生* head = NULL
void input data(STUDENT * ptr);
void print menu();
int Menu _ Select();
void Init();
void create();
void打印();
void Delete();
void append();
void计算机();
主()
{
int键;
while(1) {
key = Menu _ Select();
开关(钥匙)
{
案例0:Init();
//初步链表。也就是说,如果链表不为空,那么链表中的所有数据都会被释放,头会被设置为NULL。
打破;
案例1:create();
//创建一个链表并输入数据。
打破;
情况二:Delete();
//删除指定学号的记录数据。
打破;
案例三:print();
//打印链表中的所有数据。
打破;
案例四:计算机();
//计算链表中所有人的总分和平均分
打破;
案例五:append();
//将数据追加到链表的末尾。
打破;
案例6:Init();
//释放链表
退出(0);
}
};
}
void打印菜单( )
{
int I;
char * menu[]={
"0.初始化列表”,
"1.输入列表”,
"2.从列表中删除记录",
"3.打印列表",
"4.计算分数”,
"5.将记录插入列表",
"6.退出”
};
printf(" \ n \ n ");
for(I = 0;我& lt菜单_编号;i++)
printf("%s\n ",menu[I]);
printf(" \ n输入您的选择(0-6):");
}
int Menu_Select()
{
int键;
print menu();
scanf("%d ",& amp关键);
回车键;
}
Void Init() //初始化单个链表。即释放链表中的所有数据。
{
学生*p,* ptr//定义两个临时指针变量p,ptr。
p =头部;ptr = head//将两个临时变量指向头指针head;
while(ptr!=空)
{
ptr = ptr-& gt;接下来;//ptr指向下一个结构数据。
免费(p);//释放p指向的结构数据的内存。
p = ptr//将P指向ptr指向的数据。
}
head = NULL//将头指向空
}
Void create() //创建一个链表
{
学生*pt,* pth = NULL//定义两个指针变量:pt指向要应用的新数据内存,pth指向当前数据。
while(1)
{
pt=(学生*)malloc(sizeof(学生));//让pt指向新申请的内存空间。
输入数据(pt);//输入数据,存放在pt指向的结构数据中。注意让pt的下一个指向NULL。
if(strcmp(pt-& gt;否,“@”= = 0)
{
免费(pt);//释放pt指向的内存空间。
打破;//退出循环
}
else if (head==NULL)
{
pth = pt
head = pt//将头指针head和pth指向pt。
}
其他
{
PTH-& gt;next = pt//将pth的下一个指向pt;
pth = pt//将pth指向pt;
}
};
}
Void print() //打印单个链表中的所有数据。
{ int I = 0;
学生* p;//第一个指针p
p =头部;//将p指向头部
printf(" \ n ");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * *学生* * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
printf(" | rec | no | name | sc 1 | sc2 | sc3 | sum | ave | order | \ n ");
printf(" |-|-|-|-|-|-|-|-|-|-| \ n ");
//打印标题
而(p!=空)
{
printf(" | % 3d | % 10s | %-16s | % 4.1f | % 4.1f | % 4.1f | % 6.2f | % 5.1f | % 5d | \ n ",
++i,p-& gt;不,p-& gt;姓名,p-& gt;得分[0],p-& gt;分数[1],p-& gt;得分[2],
p->;sum,p->平均值,p-& gt;订单);//打印p指向的结构中的所有数据..注意打印数据之间的分界线。
p = p-& gt;接下来;//将P指向P的下一个结构数据。
}
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");//打印页脚
}
Void Delete() //删除一条记录。
{
学生*p,* pth//定义两个指针p,pth。
字符编号[11];//定义一个整数no(用来存储输入的学号)
printf("输入删除否\ n ");
scanf("%s ",否);//用input语句输入一个学号,存储在NO中。
p =头部;pth =头;//将P和pth都指向head指针。
if(strcmp(p-& gt;否,否)==0) //也就是头指针指向的数据是否需要删除。
{
head = head-& gt;接下来;//将头指针指向头的下一个数据;
免费(p);//释放p指向的数据。
}
其他
{
p = p-& gt;接下来;//将P指向P的下一个数据。
而(p!=空)
{
if(strcmp(p-& gt;否,否)==0) //找到要删除的数据。
{
PTH-& gt;next = p-& gt;接下来;//将pth的下一个指向p的下一个。
免费(p);//发布p
打破;//退出循环
}
其他
{
PTH = PTH-& gt;接下来;//将pth指向下一个pth或者将pth指向p。
p = p-& gt;接下来;//将P指向P的下一个。
}
}
}
}
void追加()
{
学生*p,* pth//定义两个指针变量p,pth。
pth =头;//将指针指向头部
while(PTH-& gt;下一个!=空)
{
PTH = PTH-& gt;接下来;//ptr指向ptr的下一个。
}
p=(学生*)malloc(sizeof(学生));//将P指向新申请的内存空间。
输入数据(p);p->;next = NULL//data数据存放在P指向的内存空间,注意将P的next设置为NULL。
PTH-& gt;next = p;//将ptr的下一个指向p。
}
无效输入数据(学生*ptr)
{ int I;
printf("输入编号:");
scanf("%s ",ptr-& gt;否);
if(strcmp(ptr-& gt;否,“@”= = 0)返回;
printf("输入姓名:");
scanf("%s ",ptr-& gt;姓名);
for(I = 0;我& lt3;i++)
{
printf("舒如季承\ n ");
scanf("%f ",& ampptr-& gt;score[I]);
}
ptr-& gt;sum = 0;
ptr-& gt;平均值= 0;
ptr-& gt;顺序= 0;
ptr-& gt;next = NULL
}
无效计算机()
{
学生* p;
p =头部;
for(;p;p = p-& gt;下一个)
{
p->;sum = p-& gt;分数[0]+p-& gt;分数[1]+p-& gt;得分[2];
p->;平均值=(p-& gt;分数[0]+p-& gt;分数[1]+p-& gt;分数[2])/3;
}
}