完成一个小学数学习题程序(C语言程序设计)

# include & ltstdio.h & gt

# 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;

}

}