当前位置:
文档之家› 第八章 结构体与共用体-1(结构体变量、结构体数组及数组做函数参数)
第八章 结构体与共用体-1(结构体变量、结构体数组及数组做函数参数)
2010-6-23 20
4. 结构体数组应用举例
编写一程序P4-415.C实现以下功能 实现以下功能 编写一程序 设有10名歌手 编号为 设有 名歌手(编号为 名歌手 编号为1-10)参加歌 参加歌 咏比赛,另有6名评委打分 名评委打分, 咏比赛,另有 名评委打分,每位歌手 的得分从键盘输入:先提示" 的得分从键盘输入:先提示"Please input:",再依次输入第 个歌手的 位 个歌手的6位 ,再依次输入第1个歌手的 评委打分(10分制 分数为整型, 分制, 评委打分 分制,分数为整型,分数 之间使用空格分隔), 个歌手的 个歌手的6位 之间使用空格分隔 ,第2个歌手的 位 评委打分...以此类推 以此类推. 评委打分 以此类推.计算出每位歌手 的最终得分(扣除一个最高分和一个最 的最终得分 扣除一个最高分和一个最 低分后的平均分,最终得分保留2位小 低分后的平均分,最终得分保留 位小 数),最后按最终得分由高到低的顺序 , 输出每位歌手的编号及最终得分. 输出每位歌手的编号及最终得分. 注意:变量数据类型的选择应适当, 注意:变量数据类型的选择应适当, 在保证满足设计要求精度的情况下, 在保证满足设计要求精度的情况下,养 成不浪费内存空间和计算时间的好习惯. 成不浪费内存空间和计算时间的好习惯.
2010-6-23
17
⒊ 结构体数组的初始化 方法(1): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[2]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }}; num stu[0] 10010 num 2010-6-23 stu[1] 10011 name LiFun name Zhang sex M sex M age 18 age 20 score 87.5 score 55 addr Beijing addr Tianjin
2010-6-23 21
#include <stdio.h> #define N 10 struct person { int number; int score[6]; float finalScore; }; int main(void) { int i, j, sum, max, min; struct person tmp, singer[N]; printf("Please input:"); for (i = 0; i < N; i++) { singer[i].number = i + 1; for (j = 0; j < 6; j++) { scanf("%d", &singer[i].score[j]); } } 2010-6-232010-6- Nhomakorabea3 14
).
struct是结构体类型的关键字 A) struct是结构体类型的关键字
结构体数组
⒈ 结构体数组的定义 数组中的每一个元素都是结构体类型的数据, 数组中的每一个元素都是结构体类型的数据,则称这样 的数组为结构体数组. 的数组为结构体数组. ⒉ 定义结构体数组
2010-6-23
2010-6-23
name
sex
age
score
addr
16
stu[1]
方法2 ⑵ 方法 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[2];
方法3 ⑶ 方法 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[2];
15
方法1
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[2]; name sex age score addr
num stu[0] num
9
num
2010-6-23
name
结构体变量的初始化
struct date { int month; int day; int year; 回顾: 回顾:对整型变量的初始化 }; name: Mary int main(void) int a=3; { struct student sex: F { char name[20]; char sex; birthday:10 23 1985 struct date birthday; }a = {"Mary", 'F', 10, 23, 1985}; printf("name: %s\nsex: %c\nbirthday:%d %d %d\n", , a.sex, a.birthday.month, a.birthday.day, a.birthday.year); return 0; }
2010-6-23 11
⑵ 如果成员本身又属于一个结构体类型,则要用若干个成员 如果成员本身又属于一个结构体类型, 运算符,一级一级地找到最低一级的成员. 运算符,一级一级地找到最低一级的成员.只能对最低级 的成员进行赋值或存取以及运算. 的成员进行赋值或存取以及运算. 例如: 例如: a.birthday.year=1980 a.birthday.day=23 a.birthday.month=10
2010-6-23
5
定义结构体类型变量的方法
⒈ 先声明结构体类型再定义变量名
例如: 例如: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student student1;
2010-6-23 19
方法(3): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }};
2010-6-23
13
课堂练习: 课堂练习: 1.设有以下说明语句: 设有以下说明语句: struct ex { int x; float y; char z; } example; 则下面的叙述中不正确的是( 则下面的叙述中不正确的是( example是结构体类型名 B) example是结构体类型名 C) x, y, z都是结构体成员名 z都是结构体成员名 ex是结构体类型名 D) struct ex是结构体类型名
对结构体变量的成员可以像普通变量一样进行各种运算. ⑶ 对结构体变量的成员可以像普通变量一样进行各种运算.
2010-6-23 12
例如: 例如: student2.score=student1.score; sum=student1.score+student2.score; student1.age++; ++student2.age;
2010-6-23 3
⒈ 结构体类型的引入
例如 1: : struct student { int num; char name[20]; char sex; int age; float score; char addr[30];
2010-6-23
⒉ 结构体类型的声明
struct 结构体名 { 成员表列 }; ;
18
方法(2): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[ ]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }};
8
4. 结构体类型的成员也可 以是一个结构体变量. 以是一个结构体变量. 例如: 例如: struct date { int month; int day; int year; }; struct student { int num; char name[20]; char sex; int age; struct date birthday; char addr[30]; }; struct student student1; sex age birthday addr month day year
2010-6-23
7
⒉ 在声明类型的同时定义变量 一般形式: 一般形式: struct 结构体名 { 成员表列 }变量名表列; 变量名表列; 变量名表列 例如: 例如: struct birthday { int month; int day; int year; }tom; 2010-6-23