例如:
输入 100 个学生的学号,姓名和考试成绩,编写程序找出高分数和低分数者并输出
用变量和数组做数据结构课编写程序如下:
#include<cstdio> #include<cstring> int main(){ int i , num , maxnum , minnum ; char name[20] , maxname[20] , minname[20]; int score , maxscore ,minscore ; maxscore = -1 ; minscore = 101 ; for(i=1;i<=100;i++){ scanf("%d%s%d",&num,&name,&score); if(score>maxscore){ maxscore = score ; maxnum = num ; strcpy(maxname,name); } if(score<minscore){ minscore = score; minnum = num ; strcpy(minname,name); } } printf("%d %s %d ",minnum,minname,minscore); printf("%d %s %d ",maxname,maxname,maxscore); return 0 ; }
在实际应用中,有不少应用问题如果只采用已学的变量和数组作为数据结构显得很不方便。
1)变量过多,同一学生的各个数据无联系,没有整体概念,不便管理
2)操作不便(如更新过程)
显然,选用一种能把一个学生的数据构造成一个整体的构造型数据结构很合适,但不能用数组
对于这种情况,可以将一个学生的数据定义为一个结构体类型:
struct student //类型名 { // 成员表 int num ; char name[20] ; int score ; }; // 定义了一个结构体类型,它包含三个成员
# 定义结构体类型变量
前面定义的结构体类型只是一种 "模型" ,还必须定义结构体变量后才能存放数据
# 定义结构体变量有三种方法:
1.先定义结构体类型,再定义结构体变量,定义结构体类型后
struct student st,stmax ,stmin ;
类型符 变量名
定义了三个结构体变量,每个变量包含三个成员,每个成员可存放一个学生的数据
2.在定义结构体类型的同时定义结构变量
struct student //类型名
{
// 成员表
int num ;
char name[20] ;
int score ;
}st,stmax,stmin;
3.直接定义结构体类型变量,不出现类型名
struct {
// 成员表
int num ;
char name[20] ;
int score ;
}st,stmax,stmin;
说明:
1 类型与变量不同,只对变量分配空间与操作
2 对成员可以单独使用,相当于普通变量
3 成员也可以是一个结构体变量
str date{
int month ;
int day ;
int year ;
};
struct student{
int num ;
char name[20] ;
struct date birthday ; // 函数调用
}st1,st2;
4 成员名可以与程序中的变量名相同,两者代表不同的对象
# 结构体变量的引用
可以对成员单独使用,形式为
结构体变量名.成员们 (. 成员运算符)
结构体算法实现
#include<cstring> #include<stdio> struct student{ int num ; char name[20] ; int score ; }; int main(){ int i ; struct student st ,stmax , stmin ; stmax.score = 0 ; stmin.score = 100 ; for (i=1;i<=100;i++){ scanf("%d%s%d",&st.num,&st.namespace,&st.score); // 初始化过程 if(st.score > stmax.score){ //最大值 stmax = st ; } if(st.score < stmin.score){ //最小值 stmin = st ; } } printf(" %5d%15s%5d",stmax.num,stmax.namespace.stmax.score); printf(" %5d%15s%5d",stmin.num,stmin.namespace.stmin.score); return 0 ; }
结构体数组
可以定义结构体数组来存放批量数据
结构体数组的定义
struct student{
int num ;
char name[20] ;
int score ;
};
struct student a[100];
定义 a 数组 , 可以存储 100 个学生数据
a 数组的每个元素又是一个结构体变量
练习
输入100 个学生的学号,姓名,性别(0男1女),数学成绩,语文成绩
英语成绩,然后计算语数外平均分 按从高分到低分的顺序排序后输出
输出格式:姓名,性别,数学,语文,英语,平均成绩
要求:
写两个程序,一个不用结构体,一个用结构体