文档介绍:第七章结构与联合
——构造类型二
【例7-1】将10个学生的数学成绩由高到低排序输出。
/* example 7-1(a) 排序*/
#include<>
void main(void)
{
int i,j,k;
float score[10],temp;
printf("please enter data:");
for(i=0;i<10;i++) /* 循环*/
{
scanf("%f",&score[i]); /* 输入成绩*/
}
for(i=0;i<9;i++) /* 排序*/
{
k = i;
for(j=i+1;j<10;j++)
if(score[k]<score[j])
k = j;
if(k!=i)
{
temp = score[k]; /* 交换*/
score[k] = score[i];
score[i] = temp;
}
}
for(i=0;i<10;i++) /* 循环*/
{
printf(“%”,score[i]); /* 输出成绩*/
}
}
/* example 7-1(b) 排序*/
#include<>
void main(void)
{
int i,j,k;
long num[5],temp1; /* 定义学号一维数组*/
float score[5],temp2; /* 定义成绩一维数组*/
printf("please enter data:");
for(i=0;i<5;i++) /* 循环*/
{
scanf("%ld%f",&num[i],&score[i]); /* 输入学号和成绩*/
}
for(i=0;i<4;i++) /* 排序*/
{
k = i;
for(j=i+1;j<5;j++)
if(score[k]<score[j])
k = j;
if(k!=i)
{
temp1 = num[k]; /* 交换学号*/
num[k] = num[i];
num[i] = temp1;
temp2 = score[k]; /* 交换成绩*/
score[k] = score[i];
score[i] = temp2;
}
}
for(i=0;i<5;i++) /* 循环*/
{
printf(“%ld ”,num[i]); /* 输出学号*/
printf(“%\n”,score[i]); /* 输出成绩*/
}
}
结构和联合的概念
在数据中,经常有一些既有联系,类型又不同的数据,并且它
们之间又有一定的相关性,需要一起处理。
如:学生基本档案的数据
字段: 学号姓名性别地址分数
类型: long char[ ] char char[ ] float
C语言允许用户按自己的需要将不同的基本类型构造成一种特
殊类型,即结构和联合。
结构和联合的操作分为三个步骤:
⑴根据需要定义结构或联合类型;
⑵通过定义的类型说明变量、数组、指针;
⑶引用变量、数组元素和指针指向的对象。
结构变量
⒈结构类型的定义
格式:
struct 结构名{
type 成员项1 ;
type 成员项2 ;
…
type 成员项n ;
};
结构标志。
用标识符命名的结构类型名。
结构类型中所含的成员项及其类型。
struct student {
long num ;
char name[20] ;
int age ;
char add[30] ;
float score ;
};
结构的定义确定了如下两点:
⑴定义结构类型,确定结构中的成员项的名称及类型。
⑵指明该结构类型的变量在内存中的组织形式。
⒉结构变量的定义
定义结构只是确定该结构类型的名称及其成员项的组成及成员
项的类型。必须由定义的结构类型说明结构变量,才开辟相应的内
存空间以供使用。
结构变量的说明方式:
⑴定义后说明
struct student{
long num ;
char name[20] ;
int age ;
char add[30] ;
float score ;
} ;
struct student wang,zhang,liu;
用struct student 类型说明三个变量。
⑵定义结构类型时说明变量
wang,zhang,liu;
⑶无名结构方式说明变量
struct{
long num ;
char name[20] ;
int age ;
char add[30] ;
float