
实验(实习)名称 结构体及其应用 日期 2019.6.7 得分 指导老师
系 专业 年级 2018级 班次 班 姓名 学号
一、实验目的
1.掌握结构体变最与结构体数组的定义和使用。
2.学会使用结构体指针变量和结构体指针数组。
3.掌握链表的概念,初步学会对链表进行操作。
二、实验内容
(1)输人10个学生的学号、姓名和成绩,求出其中的高分者和低分者。
#include struct student { int num; char name[20]; int score; }; int main( ) { int i; struct student st,stmax,stmin; stmax.score=0 ;stmin.score=100 ; printf("\\n input data"); for(i=0;i<10;i++) { scanf("%d%s%d",&st.num,&st.name,&st.score); for(i=0;i<10;i++) { scanf("%d%s%d",&st.num,st.name,&st.score); if(st.score if(st.score } printf("\\n hight:%5d%15s%5d",stmax.num,stmax.name,stmax.score); printf("\\n low:%5d%15s%5d",stmin.num,stmin.name,stmin.score); return 0; }}分析程序,上机运行程序。 1.程序中,哪些是对结构体变量成员的引用,哪些是整体引用。 2.对于此例来说,用结构体变量作为数据结构有何优越性。 (2)有一学生情况如下表所示。编制一个C程序,用冒泡法对该学生情况表按成绩(grade)从低到高进行排序。 1.结构体类型为 Struct student { Int num; Char name[8]; Char sex; Int age; Double grade; } 2.在程序中用一个结构体指针数组,其中每一个指针元素指向结构体类型的各元素。 3.在程序中,首先输出排序前的学生情况,然后输出排序后的结果,其格式形式如上表所示。 (3)链表基本操作,具体要求如下。 1.初始时链表为空,即链表的头指针为空。 2.对于上表所示的学生情况,依次将每个学生的情况作为一个结点插入单链表的链头(即当前插入的结点将成为第一个结点)。 3.所有学生情况都插入链表后,从链头开始,依次输出链表中的各节点值(即每个学生的情况)。输出格式如同上表。 三、实验步骤 第一个程序输入后 对结构体变量成员的引用:st.num,st.name,st.score 整体引用:struct student 结构体变量作为数据结构有何优越性: 组织在一起,而不是分为多个变量,可以整体操作,比如赋值. 第二个程序为 #include #define N 10 struct student { int num; char name[8]; char sex; int age; double grade; }; void sort(struct student [],int n); int main() { int i; struct student x[N],*ptr[N]; for(i=0;i printf("排序前:\\n"); for(i=0;i ptr[i]=&x[i]; printf("%4d %10s %3c %4d %6.2lf\\n",ptr[i]->num,ptr[i]->name,ptr[i]->sex,ptr[i]->age,ptr[i]->grade); } sort(x,N); printf("排序后:\\n"); for(i=0;i return 0; } void sort(struct student x[],int n) { int i,j; struct student t; for(i=0;i { t=x[j]; x[j]=x[j+1]; x[j+1]=t; } } 输入后 第三个程序为 #include #include typedef struct student { int num; char name[8]; char sex; int age; double grade; struct student *next; }STU; STU *insert(STU *,int n); int main() { int n; STU *head=NULL,*p; printf("输入节点数:"); scanf("%d",&n); head=insert(head,n); p=head; while(p) { printf("%4d %10s %3c %4d %6.2lf\\n",p->num,p->name,p->sex,p->age,p->grade); p=p->next; } return 0; } STU *insert(STU *head,int n) { STU *p,*q; int i=1; p=(STU*)malloc(sizeof(STU)); head=p; p->next=NULL; while(i<=n){ printf("请输入第%d个节点数据:",i); scanf("%d %s %c %d %lf",&p->num,p->name,&p->sex,&p->age,p->grade); q=(STU *)malloc(sizeof(STU)); q->next=p; p=q; i++; } head=p->next; return head; } 四、实验小结 定义结构体时,注意末尾要有“;”; 结构体是一些值得集合,这些值称为成员变量,结构体的每个成员都可以是不同类型的变量。 结构体变量的引用:只能对结构体变量中的各个成员分别输出,不能对一个结构体变量作为一个整体输出;但是可以整体赋值。
具体要求如下。学号 姓名 性别 年龄 成绩 101 zhang M 19 95.6 102 wang F 18 92.2 103 zhao M 19 85.7 104 li M 20 96.3 105 gao M 19 90.2 106 lin M 18 91.2 107 ma F 18 98.7 108 zhen M 21 88.7 109 xu M 19 90.1 110 mao F 22 94.7
