《vc编程作业实验题 结构体,链表》由会员分享,可在线阅读,更多相关《vc编程作业实验题 结构体,链表(8页珍藏版)》请在金锄头文库上搜索。
1、实验十一 结构体实验名称结构体成绩姓 名李浩学号20班级电气15-3实验地点完成日期实验目的1) 掌握结构体类型变量的定义和使用;2) 掌握结构体类型数组的概念和使用;3) 掌握链表的概念,初步学会对链表进行操作。实验内容与步骤实验内容与步骤实验内容与步骤编程序,然后上机调试运行程序 (1).有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。要求用input函数输入10个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的
2、数据都在主函数中输出。#include#define n 10struct student/定义学生结构体int num;char name10;float score3;float ave;main()void input(struct student stx);/声明input函数void output(struct student stx);/声明output函数【用于输出学生数据】struct student max(struct student stx);/声明max函数float average(struct student stx); /声明average函数struct stu
3、dent stun;/声明学生数组printf(依次输入%d个学生的资料:nn姓名 学号 三门分数n,n);input(stu);/输入学生数据printf(nn总平均分:%4.1fnn,average(stu);printf(最高分的学生:n);output(max(stu);/输出最高分学生数据printf(nn);void input(struct student stx)/定义input函数【用于输入学生组数据】int i;for(i=0;in;i+)scanf(%s %d %f %f %f,&stxi.name, &stxi.num, &stxi.score0, &stxi.scor
4、e1,&stxi.score2);stxi.ave=(stxi.score0 + stxi.score1 + stxi.score2)/3;void output(struct student stx)/定义output函数【输出学生数据】printf(姓名:%s t学号:%3dt分数:%4.1f %4.1f %4.1ft平均分:%4.1fn,stx.name, stx.num, stx.score0, stx.score1, stx.score2, stx.ave);struct student max(struct student stx) /定义max函数【找最高分学生】int i,m=
5、0;for(i=0;istxm.ave)m=i;return stxm;float average(struct student stx)/定义average函数【求学生组总平均分】int i;float sum=0;for(i=0;in;i+)sum=sum+(stxi.score0 + stxi.score1 + stxi.score2);return sum/n/3;(2).13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。本题要求用链表实现。#include#define n 13struct player/定义player【
6、玩家】结构体,包括身份ID及其后者int ID;struct player *next;main()int i;struct player an,*p;/声明数组,n个玩家(默认n=13)for(i=0;in-1;i+)ai.ID=i+1;ai.next=&ai+1;an-1.ID=n;an-1.next=&a0; /对每个玩家编排;确定ID及其后者;p=&a0;/从第一位玩家开始报数,每第3各踢出链表;while(p!=(*p).next)p=(*p).next;(*p).next=(*(*p).next).next;p=(*p).next;printf(最终留下第%3d 号玩家!n,(*p
7、).ID);/输出最终留下的玩家(3). 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。#include#include#define Found (stu *)malloc(sizeof(stu)/定义【结构体stu】,包含学生的姓名、学号、性别、年龄。typedef struct studentchar name10;int num;char sex;int age;struct student *next;stu;/定义【函数】输入学生的资料(建立链表,并返回首位置)首位、末位不储存学生资料stu *input(
8、void)stu *p,*u; u=p=Found;do p=p-next=Found;p-next=NULL;scanf(%s %d %c %d,&(p-name), &(p-num), &(p-sex), &(p-age);while(p-name0)!=48 & (p-num)!=0);return u;/定义【函数】输出学生资料(参数为链表的首位置,返回学生人数)int output(stu *start) int i=1;stu *p=start;while(p-next-next)!=NULL)p=p-next;printf(%2d 姓名:%s t学号:%2d 性别:%s 年龄:%
9、d岁n,i+, p-name, p-num, (p-sex)=48)?女:男, p-age);return i-1;/定义【函数】删除某年龄的学生(参数为学生链表的首位置,年龄。返回剔除的学生个数)int del(stu *start, int agex)int i=0;stu *p=start,*u=p-next;while(u-next!=NULL)if(u-age=agex)p-next=u-next; free(u); u=p-next; i+;elsep=u; u=u-next; return i;main()int agex;stu stu1,*head;printf(请输入学生们的资料:n);head=input();printf(已储存%2d 个学生的资料。n,output(head);printf(n输入要剔除的学生的年龄: );scanf(%d,&agex);printf(n共剔除%2d 个学生的资料。n,del(head,agex);printf(已储存%2d 个学生的资料。n,output(head);实验心得链表很难,要加强锻炼!