C语言程序设计(第7章结构体与共用体)3
C语言程序设计教案 结构体与共用体

printf(“No.
name
sex
age\n”);
for(p=stu;p<stu+3;p++)
printf(“%5d%-20s%2c%4d\n”,p->num,p->name,
p->sex,p->age);}
三、用指针处理链表
链表是一种常见的数据结构,是动态地进行存储分配的一种结构。
用数组存放数据时,必须事先定义固定的长度。比如有的班级有
例 对候选人得票的统计程序。设有三个候选人,每次输入一个得 票的候选人的名字,要求最后输出各人得票结果。
程序如下: #include <stdio.h> struct person {char name[20];
int count; }leader[3]={“li”,0,“zhang”,0,“fun”,0}; main() {int i,j;char leader_name[20]; for(i=1;i<=10;i++) {scanf(“%s”, leader_name);
┄ char addr[30]; }; Struct student student[10];
2.结构体数组的初始化 其初始化和数组的初始化相似。 3.结构体数组的应用举例
结构体数组 和数值型数 组不同之处 在于每个数 组元素都是 一个结构体 类型的数据。
定义了一个 student,其 元素为 Struct student 类型 数据,数组中 有 10 个元素。
{ int month;
先声明一个
int day; int year; }
Struct date 类型,然后在 Struct
C语言程序设计(李圣良)章 (7)

一般形式如下:
struct
{
成员列表;
}变量名列表;
例如,可以直接定义结构体变量st1、st2:
struct
{
char id[9];
/* 学号 */
char name[10];
/* 姓名 */
char sex;
/* 性别 */
int age;
/* 年龄 */
float score;
/* 成绩 */
}st1,st2;
型变量x和y表示点的x坐标和y坐标。
# include <stdio.h>
# include <math.h>
struct point
/* 点 */
{ float x;
/* x坐标 */
float y; /* y坐标 */
};
main()
第7nt p1;
float l;
采用定义变量的方式来定义数据成员。
第7单元 结构体和共用体 (4) 结构体类型定义必须以分号结束。 例如,根据图7-1的分析可以设计结构体类型如下:
struct student
{
char id[9];
char name[10];
char sex;
int age;
float score;
};
/* 学号 */ /* 姓名 */
\n",tomor.year,tomor.month,tomor.day); }
第7单元 结构体和共用体 图7-3 例7-1程序运行结果
第7单元 结构体和共用体 3. 结构体变量的初始化 在结构体变量定义的同时可以为其整体赋初值,方法与数
组的初始化相似,将各个数据成员的值按声明类型时的顺序依 次排列,使用逗号间隔,全部放在大括号中,整体赋值给变量。 例如:
C程序设计(第四版)第7章结构体与共用体

7.1.1
结构体类型的定义
结构体在说明和使用之前,必须先由用 户自己定义。结构体定义的一般形式如下: struct 结构体名 { 成员类型说明符 成员项1; 成员类型说明符 成员项2; …… 成员类型说明符 成员项n; };
其中: 1、struct是C语言中定义结构体的关键字。 2、成员类型说明符是说明每个成员项的数 据类型,可以是基本数据类型,也可以是数组 类型,还可以是另一个已定义的结构体类型。 3、成员名可以和程序中的变量名相同,两 者不代表同一对象。 4、要注意,在结构体定义中的右括号后应 该有分号。
7.1.6
指向结构体的指针
一个结构体类型的数据在内存中都占据一定 的存储空间,我们可以定义一个指针来指向该 结构体类型的数据,该指针变量称为指向结构 体的指针,简称之为结构体指针。我们可以通 过结构体指针来访问结构体类型的数据,如结 构体变量、结构体数组。指向结构体的指针变 量说明形式如下: struct 结构体类型名 *结构体指针变量名;
main() { struct student stu1; struct student *p; p=&stu1; stu1.num=50201001; gets(); stu1.score=89.5;
printf(“No:%ld\nName:%s\nScore:%4.1f\n”,stu1 .num,,stu1.score); printf(“No:%ld\nName:%s\nScore:%4.1f\n”,(*p). num,(*p).name,(*p).score);
3、结构体数组应用举例 【例7-2】现有三个候选人(每个候选人的ID 号分别是1、2、3),选举人投票进行选举, 编写程序统计出每个候选人的得票结果。 程序如下: #define NUM 30 #include <stdio.h> struct elector { int id; char name[20]; int count;
《C语言程序设计教程》第三版课后习题参考答案

《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
C语言程序设计 - 结构体和共用体-样本教案

用以下实例来分析:
struct
{int a;
int *s;
}*p;
第一组引用:对成员变量a的引用
++p->a++(p->a)
说明:成员变量a自增加1.
(++p)->a
说明:指针p先移动一个单位,然后引用对应的成员变量a.
注意: p每移动一个单位要移动多少字节?
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
这种结构类型变量定义的方式与不省略"结构名"的方式相比,不同之处在于:这种格式定义结构变量以后无法再定义此结构类型的其它结构变量,而带有"结构名"的格式则可以.
格式三:使用typedef说明一个结构类型名,再用新类型名定义结构变量.
例:
typedefstruct
{ char name[12];
char sex;
{"Wang wu" , "F",1983, 3, 3,93,83,73,63}
};
有时结构数组长度可以省略,而由初值个数来暗示.
(4)结构变量成员的引用和操作:
1)对结构变量成员的引用和操作:
C语言程序设计(第7章结构体与共用体)

C语言程序设计(第7章结构体与共用体)7.1 结构体类型变量的定义和引用在上面描述的各种登记表中,让我们仔细观察一下住宿表、成绩表、通讯地址等。
住宿表由下面的项目构成:这些登记表用C提供的结构体类型描述如下:住宿表:struct accommod{char name[20]; /*姓名*/char sex; /*性别*/char job[40]; /*职业*/int age; /*年龄*/long number; /*身份证号码*/} ;成绩表:struct score{char grade[20]; /* 班级*/long number; /* 学号*/char name[20]; /*姓名*/float os; /*操作系统*/float datastru; /* 数据结构*/float compnet; /* 计算机网络*/} ;通讯地址表:struct addr{char name[20];char department[30];/* 部门*/char address[30]; /*住址*/long box; /* 邮编*/long phone; /* 电话号码*/char email[30]; /* Email */};这一系列对不同登记表的数据结构的描述类型称为结构体类型。
由于不同的问题有不同的数据成员,也就是说有不同描述的结构体类型。
我们也可以理解为结构体类型根据所针对的问题其成员是不同的,可以有任意多的结构体类型描述。
下面给出C对结构体类型的定义形式:struct 结构体名{成员项表列;};有了结构体类型,我们就可以定义结构体类型变量,以对不同变量的各成员进行引用。
7.1.1 结构体类型变量的定义结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下:1) 先定义结构体类型,再定义结构体类型变量:struct stu / *定义学生结构体类型* /{char name[20]; /* 学生姓名*/char sex; /* 性别*/long num; /*学号*/float score[3]; /* 三科考试成绩*/};struct stu student1,student2;/* 定义结构体类型变量*/struct stu student3,student4;用此结构体类型,可以定义更多的该结构体类型变量。
C语言学习入门笔记之结构体与共用体

结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。
在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
上面的结构体声明中Student就是结构体名(结构体标记)。
2.花括号内是该结构体所包括的子项,称为结构体的成员。
“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。
例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。
C语言程序设计——结构体和共用体(完整版)

printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计(第7章结构体与共用体)3
7.3 结构体指针的定义和引用
指针变量非常灵活方便,可以指向任一类型的变量,若定义指针变量指向结构体类型变量,则可以通过指针来引用结构体类型变量。
7.3.1 指向结构体类型变量的使用
首先让我们定义结构体:
struct stu
{
char name[20];
long number;
float score[4];
} ;
再定义指向结构体类型变量的指针变量:
struct stu *p1, *p2 ;
定义指针变量p 1、p 2,分别指向结构体类型变量。
引用形式为:指针变量→成员;
[例7-2] 对指向结构体类型变量的正确使用。
输入一个结构体类型变量的成员,并输出。
#include /*使用malloc( ) 需要*/
struct data /*定义结构体*/
{
int day,month,year;
};
struct stu /*定义结构体*/
{
char name[20];
long num;
struct data birthday; /* 嵌套的结构体类型成员*/
} ;
main() /*定义main( ) 函数*/
{
struct stu *student; /* 定义结构体类型指针*/
student=malloc(sizeof(struct stu)); /* 为指针变量分配安全的地址* /
printf("Input name,number,year,month,day:\n");
scanf("%s",student->name); /* 输入学生姓名、学号、出生年月日*/
scanf("%ld", &student->num);
scanf("%d %d %d", &student->birthday.year,&student->birthday.month,&student->birthday.day);
printf("\nOutput name,number,year,month,day\n" );
/*打印输出各成员项的值*/
printf("%20s%10ld%10d//%d//%d\n",student->name,student->num,student->birthda y.year,student->birthday.month,student->birthday.day);
}
程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc( )来为指针分配安全的地址。
函数sizeof( )返回值是计算给定数据类型所占内存的字节数。
指针所指各成员形式为:
student->name
student->num
student->birthday.year
student->birthday.month
student->birthday.day
运行程序:
Input name,number,year,month,day:
Wangjian 34 1987 5 23
Wangjian 34 1987//5//23
7.3.2 指向结构体类型数组的指针的使用
定义一个结构体类型数组,其数组名是数组的首地址,这一点前面的课程介绍得很清楚。
定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在使用时要加以区分。
[例7-3] 在例7 - 2中定义了结构体类型,根据此类型再定义结构体数组及指向结构体
类型的指针。
struct data
{
int day,month,year;
} ;
struct stu /*定义结构体*/
{
char name[20];
long num;
struct data birthday; /* 嵌套的结构体类型成员* /
} ;
struct stu student[4],*p; /* 定义结构体数组及指向结构体类型的指针*/
作p = student,此时指针p就指向了结构体数组student。
p是指向一维结构体数组的指针,对数组元素的引用可采用三种方法。
1) 地址法
student+i和p+i均表示数组第i个元素的地址,数组元素各成员的引用形式为:
(student+i)-> name、(student+i)->num和(p+i)->name、(p+i)->num等。
student+i 和p+i与&student[i]意义相同。
2) 指针法
若p指向数组的某一个元素,则p++就指向其后续元素。
3) 指针的数组表示法
若p=student,我们说指针p指向数组student,p[i]表示数组的第i个元素,其效果与student[i]等同。
对数组成员的引用描述为: p[i].name、p[i].num等。
[例7-4] 指向结构体数组的指针变量的使用。
struct data /*定义结构体类型*/
{
int day,month,year;
} ;
struct stu /*定义结构体类型*/
{
char name[20];。