(优选)结构体共用体和用户定义类型
C语言第11章结构体

29
【例】30张选票,对三名侯选人之一投票选举,输 入得票人名字,按名字计数,输出最后选举结果。 #include "stdio.h" #define N 30 struct person { char name[20]; int count; };
Li
0 Zhang 0 Wang 0
led[0].name
第十一章 结构体与பைடு நூலகம்用体
本章目标
1.理解结构体,共用体的数据类型
2.学会定义结构体、共用体的数据类型 的变量 3.能够正确使用结构体、共用体的成员
§11.1
已了解的数据类型:
引言
整型 浮点型 字符型 数组
简单数据类型
用户定义的数据类型
特点:所有的元素都是同一种类型
指针型 存在的问题:难以处理较复杂的数据
18
圆点运算符
引用形式:结构体变量名 . 成员名 其中:成员运算符’ . ‟ : 一级,自左而右;
stu1.num 引用结构体变量stu1的num成员; 引用stu1的name成员(字符指针); [i] 引用name成员的第i个元素; stu1.birthday.y 只能对最低级成员进行引用;
二、定义完结构体后,定义结构变量并初始化 struct student x2={0002, "Li Ming ", 85.5};
16
§11.4 访问结构成员
访问结构变量实质上是引用其成员 有两种运算符可访问结构成员
17
struct date { int m; int d; iny y; }; struct student { long num; char name[20]; char sex; struct date birthday; float score; char tel[15]; } stu1, stu2;
2级C语言第14章 结构体共用体和用户定义类型

例 struct student { int num; char name[20]; char sex; } stu1[2]={{112,“Wang Lin”,„M‟},{19, “Li Jia”, „W‟};
struct 形式三: { 类型标识符 成员名; 类型标识符 成员名; ……………. 不管那种赋值,不允许跳过前面的成员给后 }结构体变量={初始数据}; 面的成员赋值,但可以只给前面的成员赋值
例 ,后面未赋值的数值数据按0处理,字符数据 struct { int num; 按‘\0‟,字符串数据按空串处理。 char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,„M‟,19, “200 Beijing Road”};
二、 结构体变量的定义
1. 先定义结构体类型,再定义结构体变量 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1,stu2; STU stu1,stu2; #define STU struct student STU { int num; char name[20]; char sex; int age; float score; char addr[30]; };
2. 定义结构体类型的同时定义结构体变量
struct student struct
{ int num;
{ int num; 用无名结构体直接定义 char name[20]; char name[20]; 变量只能一次 char sex; char sex; int age; int age; float score; float score; char addr[30]; char addr[30]; }stu1,stu2; } stu1,stu2;
C语言教程之结构体共用体与位运算

C语言教程之结构体共用体与位运算C语言是一种功能强大的编程语言,它提供了许多用于处理复杂数据类型的特性。
其中,结构体、共用体和位运算是三个重要的特性,可以帮助开发者更高效地处理数据。
本教程将介绍C语言中的结构体、共用体和位运算,并给出一些实例和使用场景。
1. 结构体(Structures)结构体是C语言中一种用户自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的复合数据类型。
结构体通过关键字"struct"来定义,可以在其中定义多个成员变量,并且可以根据需要为每个成员变量指定不同的数据类型。
例如,我们可以定义一个结构体来表示一个学生的信息:```struct studentchar name[20];int age;float grade;};```上面的代码定义了一个名为`student`的结构体,包含了三个成员变量:`name`,`age`和`grade`,分别表示学生的姓名、年龄和成绩。
使用结构体时,可以通过`.`操作符来访问结构体的成员变量,就像访问一个普通的变量一样。
例如,我们可以通过以下方式给结构体的成员变量赋值:```struct student stu1;strcpy(, "John");stu1.age = 18;stu1.grade = 90.5;```2. 共用体(Unions)共用体是C语言中一种特殊的数据类型,它和结构体类似,也可以包含多个成员变量,不同之处在于,共用体的成员变量共享同一块内存空间。
即,共用体的所有成员变量在内存中的起始地址是相同的,它们共同占用一段连续的内存空间。
共用体的定义方式与结构体类似,只是将关键字"struct"换成了"union"。
例如,我们可以定义一个共用体来表示一个变量的多种不同数据类型的解释:```union dataint i;float f;char str[20];};```上面的代码定义了一个名为`data`的共用体,包含了三个成员变量:`i`,`f`和`str`,分别表示整数、浮点数和字符数组。
c语言中各种数据类型

c语言中各种数据类型C语言中的各种数据类型在C语言中,数据类型是非常重要的概念。
它定义了变量的类型及其在内存中所占据的空间大小。
C语言中有多种数据类型,包括基本数据类型和派生数据类型。
本文将依次介绍这些数据类型,并给出一些使用示例。
1. 基本数据类型1.1 整型(int)整型是C语言中最常用的数据类型之一。
它用于表示整数,包括正整数、负整数和零。
整型的大小取决于机器的架构,但通常情况下,int类型占用4个字节的内存空间。
下面是一个整型变量的声明和赋值的示例:```int num = 10;```1.2 浮点型(float和double)浮点型用于表示实数,包括小数和指数形式的数。
C语言中提供了两种浮点型:float和double。
float类型占用4个字节的内存空间,而double类型则占用8个字节的内存空间。
下面是一个浮点型变量的声明和赋值的示例:```float pi = 3.14;double e = 2.71828;```1.3 字符型(char)字符型用于表示单个字符,它占用1个字节的内存空间。
在C语言中,字符型变量使用单引号来表示。
下面是一个字符型变量的声明和赋值的示例:```char ch = 'A';```2. 派生数据类型2.1 数组(array)数组是一种派生数据类型,它可以存储多个相同类型的元素。
数组的大小在声明时指定,并且在程序运行期间不能改变。
下面是一个整型数组的声明和赋值的示例:```int nums[5] = {1, 2, 3, 4, 5};```2.2 结构体(struct)结构体是一种可以包含多个不同类型变量的数据类型。
它可以将不同类型的变量组合在一起,形成一个逻辑上的整体。
下面是一个结构体的声明和使用的示例:```struct Student {char name[20];int age;float score;};struct Student stu;strcpy(, "Alice");stu.age = 18;stu.score = 95.5;```2.3 枚举(enum)枚举是一种用户自定义的数据类型,它可以定义一组具有名称的常量。
简述结构体类型和共用体类型的定义方式。

简述结构体类型和共用体类型的定义方式
结构体类型和共用体类型都是C 语言中的复合数据类型,它们可以将多个不同类型的变量组合在一起,形成一个新的数据类型,方便程序设计和数据处理。
结构体类型的定义方式如下:
struct 结构体名{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
...
};
其中,结构体名为自定义的结构体类型名称,成员变量名和数据类型分别指定结构体中的每个成员变量。
结构体中的成员变量可以是任何C 语言中的数据类型,包括基本数据类型、数组、指针、结构体等。
共用体类型的定义方式如下:
union 共用体名{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
...
};
共用体与结构体类似,也是由多个成员变量组成的数据类型。
不同的是,共用体中的所有成员变量共享同一块内存空间,即它们在内存中的起始地址相同,占用的总内存大小等于最大成员变量的内存大小。
因此,共用体中不同的成员变量可以存储不同的数据类型,但同一时刻只能访问其中的一个成员变量。
需要注意的是,在定义结构体类型和共用体类型时,只是定义了一个新的数据类型,并没有创建该类型的变量。
如果要使用结构体类型或共用体类型,需要先定义一个该类型的变量,然后才能对其进行操作。
2016C语言习题全集及答案:第八单元结构体和共用体

第八单元结构体和共用体一、选择题1、说明一个结构体变量时系统分配给它的内存是。
A. 各成员所需要内存量的总和B. 结构体中第一个成员所需内存量C. 成员中占内存量最大者所需的容量D. 结构中最后一个成员所需内存量2、 C 语言结构体类型变量在程序执行期间。
A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在在内存中D. 没有成员驻留在内存中3、设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是。
A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名4、程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是。
A. 编译出错B. 程序将顺利编译、连接、执行C. 能顺利通过编译、连接、但不能执行D. 能顺利通过编译、但连接出错5、有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam",16};根据上述定义,能输出字母M 的语句是。
A. prinft(" %c\n",class[3].name);B. printf(" %c\n",class[3].name[1]);C. prinft(" %c\n",class[2].name[1]);D. printf(" %c\n",class[2].name[0]);6、下面程序的输出是。
c语言 union和typedef

c语言union和typedef摘要:1.概述2.共用体(union)a.定义b.成员变量c.存储方式d.实例3.类型定义(typedef)a.定义b.类型别名c.实例4.共用体与类型定义的区别5.总结正文:1.概述C 语言是一种广泛应用的编程语言,其具有丰富的数据类型和灵活的结构体。
在C 语言中,共用体(union)和类型定义(typedef)是两种重要的数据类型与结构方式。
本文将对这两种方式进行详细的介绍和解析。
2.共用体(union)2.1 定义共用体是一种特殊的结构体,它的成员变量共享同一块内存空间。
这意味着,在共用体中,所有成员变量的地址都是相同的。
共用体使用关键字“union”定义。
2.2 成员变量共用体的成员变量可以是不同类型的,但它们必须具有相同的大小。
成员变量的类型可以是整型、浮点型或者其他自定义类型。
2.3 存储方式共用体的成员变量在内存中的存储方式是连续的。
这意味着,如果一个共用体有两个成员变量,一个是整型,一个是浮点型,那么这两个变量在内存中是连续存储的。
2.4 实例下面是一个共用体的实例:```c#include <stdio.h>union MyUnion {int intVar;float floatVar;};int main() {union MyUnion myUnion;myUnion.intVar = 10;myUnion.floatVar = 20.5;printf("intVar: %d, floatVar: %f", myUnion.intVar, myUnion.floatVar);return 0;}```3.类型定义(typedef)3.1 定义类型定义是一种为现有类型定义新的名称的方式。
类型定义使用关键字“typedef”定义。
3.2 类型别名类型定义允许为现有类型创建一个新的名称,这个新名称被称为类型别名。
类型别名可以提高代码的可读性和简洁性。
C语言知识总结——宏,枚举,结构体,共用体

C语言知识总结——宏,枚举,结构体,共用体1、define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。
因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
,因此在编译时它不对宏的定义进行检查,作用域不影响对常量的访问。
它的常量值只能是字符串或数字。
该命令有两种格式:一种是简单的常量宏定义, 另一种是带参数的宏定义。
不带参数的宏:#define< 名字 >< 值 > 要注意,没有结尾的分号,因为不是C的语句,名字必须是一个单词,值可以是各种东西,宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。
如有错误,只能在编译已被宏展开后的源程序时发现。
注意.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
宏定义其作用域为宏定义命令起到源程序结束。
如要终止其作用域可使用#undef命令带参数的宏:像函数的宏,一般的定义形式:带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意带参数宏的原则一切都要有括号,参数出现的每个地方都要有括号。
带参数的宏在大型的程序的代码中使用非常普遍,在#和##这两个运算符的帮助下可以很复杂,如“产生函数”,但是有些宏会被inline函数代替(C++的函数)使用宏好处:“提高运行效”。
定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
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语言学习指南课件与历年真题精讲精析 第14章

二级C语言程序设计 学习指南与历年真题精讲精析
第14章 结构体、共用体和用户定义 类型
C语言中可由用户构造的两种数据类型:
1、结构体(struct)
2、共用体(union)
14.1 用typedef说明一种新类型名 1、C语言允许用typedef说明一种新类型名: typedef 类型名 标识符; 2、“类型名”必须是在此语句之前已有定义的类型标 识符,“标识符”是一个用户定义标识符,用作新的 类型名。typedef语句的作用仅仅是用“标识符”来
struct dent*s=&s[0]
则以下表达式中值为2的是_____。 (&s[0])->m s[0].m
B)*(p++)->m
C)(*p).m
*(&s[0])->m
s[0].m
*s[0].m
*&a
a
√
D)*((++p)->m)
*((&s[1])->m)
*s[1].m
*&b
五、函数之间结构体变量的数据传递 1、向函数传递结构体变量的成员 结构体变量中的每个成员可以是简单变量、数组或指针变量 等,作为成员变量,它们可以参与所属类型允许的任何操作。 2、向函数传递结构体变量 结构体变量作实参时,传递给函数对应形参的是它的值,函
}std,pers[3],* pstd; name sex birthday year month day sc[0] sc[1] sc[2] sc[3]
方法2:在说明一个无名结构体类型的同时,直接进行定义: 如:struct { char name[12]; char sex; struct date birthday; float sc[4];
c语言第11章-结构体与共用体

}
§11.6 构造体和指针
ma指in向() 构造体变量旳指针
{ s❖tr定uc义t st形ud式en:t struct 构造体名 *构造体指针名; { 例lonsgtruicntt sntuudmen;t *p; char name[20]; ❖使str用ucch构tars造tsued体xe;n指t 针变存量储引构用造组体p员变形量式在内存旳起始地址
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Roa
形式二:
struct 构造体名
{ 类型标识符 组员名; 类型标识符 组员名;
……………. }构造体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”
❖用构造体变量旳组员作参数----值传递 ❖用指向构造体变量或数组旳指针作参数----地址传递 ❖用构造体变量作参数----多值传递,效率低
例 用构造体变量作函数参数
(main)
struct data { int a, b, c; };
accacbbb::::::::2332333370070
main()
}
指向构造体数组旳指针
例 指向构造体数组旳指针
struct student { int num;
char name[20]; char sex; int age;
p num
name
sex
p+1
age
8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。
四川大学《c语言程序设计》课件-第8章 结构体与共用体

90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员
结构体、共用体、枚举类型、typedef的区别

值 2,此时引用 jh.i 不能取值,已经被 jh.f 覆盖了. (3)共用体变量的地址和它各成员的地址都是同一地址. (4)不能对共用体赋值或引用共用体的变量名取值,也不能在定义共用体变量
时对它初始化. (5)不能把共用体变量作函数参数,也不能使函数返回共用体变量,但可以使
引用: p = cd; 为枚举型变量 p 赋值 cd,p 的值就是成员表列中 cd 的值. 可以理解为 p = 2;,但是 2 是整型常量,要先强制类型转换,写成 p = (enum
jh)2;. 枚举型变量可以用作判断比较,if(p > (enum jh)1)或 if(p > bc).
-------------------------------------------------------------------------------------------------typedef
(2)直接定义结构体类型变量.方法为声明类型的同时定义变量,并且不写结构 体名 jh,这种方法用于只定义 1 次变量,而且每用这种方法定义 1 个变量,虽然都 为无名结构体类型,但不属于同一类型.
引用结构体类型变量: 结构体变量名.成员名
例:
struct jh{int ห้องสมุดไป่ตู้;char b;}a; a.b = 'z';
enum jh{ab=1,bc=2,cd=3,de=4}; 或
enum jh{de=4,ab,bc,cd}; 其中(de=4,ab,bc,cd)就是把最后一个 de 作为 0 放在最前面,然后改变值为最 后一位的值,第二开始就是从 1 算起了.
c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题C语言中的结构体和共用体是非常重要的数据类型,它们能够帮助程序员更好地组织和管理数据。
在本文中,我将为你详细介绍C语言中结构体和共用体的特点、用法及例题。
一、结构体的定义和特点1. 结构体是什么?在C语言中,结构体是一种用户自定义的数据类型,它可以包含不同类型的数据,用于表示和管理复杂的数据结构。
结构体的定义以关键字struct开头,后面跟着结构体的名称和大括号内包含的成员变量列表。
2. 结构体的特点结构体的成员变量可以是不同的数据类型,包括基本数据类型、指针类型和其他结构体类型。
这使得结构体非常适合用于表示复杂的数据结构,如学生信息、员工信息等。
二、共用体的定义和特点1. 共用体是什么?共用体也是C语言中的一种用户自定义数据类型,它与结构体类似,不同的是共用体的成员变量共享同一块内存空间。
这意味着共用体的所有成员变量使用同一块内存,修改一个成员变量会影响其他成员变量。
2. 共用体的特点共用体的成员变量共享同一块内存空间,因此共用体非常节省内存。
但也正是由于这种特点,使用共用体需要特别小心,避免出现数据混淆和错误。
三、结构体和共用体的例题为了更好地理解结构体和共用体的用法,我们来看一个例题:如何计算结构体和共用体的大小?```c#include <stdio.h>// 定义一个结构体struct Student {char name[20];int age;float score;};// 定义一个共用体union Data {int num;char str[20];};int main() {// 计算结构体的大小printf("Size of struct Student: %lu bytes\n", sizeof(struct Student));// 计算共用体的大小printf("Size of union Data: %lu bytes\n", sizeof(union Data));return 0;}```在这个例题中,我们定义了一个学生结构体和一个数据共用体,并在主函数中分别计算了它们的大小。
结构体、共用体户定义类型

结构体、共用体户定义类型————————————————————————————————作者:————————————————————————————————日期:用typedef说明一种新类型名选择题1)设有如下说明:typedef struct ST{long a;int b;char c[2];}NEW;则下列叙述中正确的是———c———a)以上的说明形式非法b)ST是一个结构体类型c)NEW是一个结构体类型d)NEW是一个结构体变量2)设有以下语句:typedef struct s{int g;char h;}T;则下面叙述中正确的是———b———a)可用S定义结构体变量b)可以用T定义结构体变量c)S是struct类型的变量d)T是struct S类型的变量结构体类型选择题1)有以下程序#include <stdio.h>struct st{int x,y;}data[2]={1,10,2,20};main(){struct st *p=data;printf(“%d,”,p->y);printf(“%d\n”,(++p)->x);}程序运行结果是____c_____a)10,1 b)20,1 c)10,2 d)20,22)有以下程序#include <stdio.h>main(){struct STU{char name[9]; char sex; double score[2];};struct STU a={“Zhao”,’m’,85.0,90.0},b={“Qian”,’f’,95.0,92.0}; b=a;printf(“%s,%c,%2.0f,%2.0f\n”,,b.sex,b.score[0],b.score[1]); }程序运行的结果是____D_____a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,f,95,92 d)Zhao,m,85,903) 将定已建立以下链表结构,且指针p 和q 已指向如图所示的结点:则以下选项中科将q 所指结点从链表中删除并释放该结点的语句是_____d____a) (*p).next=(*q).next;free(p); b)p=q->next; free(q);c) p=1; free(q); d) p->next=q->next;free(q);4)以下结构体类型说明和变量定义中正确的是____a____a) typedef struct b)struct REC;{int n; char c;}REC; {int n; char c; };REC t1,t2; REC t1,t2;c)typedef struct REC; d) struct{int n=0; char c=’A ’; }t1,t2; {int n; char c; }REC;REC t1,t2;5)有以下程序#include <stdio.h>#include <string.h>typedef struct {char name[9]; char sex ; float score[2]; }STU;void f(STU a){STU b={“Zhao ”,’m ’,85.0,90.0}; int i;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++) a.score[i]=b.score[i];}main(){STU c={“Qian ”,’f ’,95.0,92.0};f(c); printf(“%s,%c,%2.0f,%2.0f\n ”,,c.sex,c.score[0],c.score[1]);}程序的运行结果是_____a____a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,f,95,92 d)Zhao,m,85,906)有以下程序#include <stdio.h>struct tt{int x; struct tt *y; }*p;struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};main(){int i;p=a;for(i=1;i<=2;i++) {printf(“%d,”,p->x); p=p->y;}}程序的运行结果是____d_____ ab cdatnex p q heada) 20,30, b) 30,17 c)15,30, d)20,15,7)有以下程序#include <stdio.h>#include <string.h>typedef struct { char name[9]; char sex; float score[2]; }STU;STU f(STU a){STU b={“Zhao”,’m’,85.0,90.0};int i;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++) a.score[i]=b.score[i];return a;}main(){STU c={“Qian”,’f’,95.0,92.0},d;d=f(c); printf(“%s,%c,%2.0f,%2.0f\n”,,d.sex,d.score[0],d.score[1]); }程序的运行结果是_____c___a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,m,85,90 d)Zhao,f,95,928) 有以下程序typedef stuct {int b,p;}A;void f(A c) /*c是结构变量名*/{int j;c.b+=1;c.p+=2;}main(){int i;A a={1,2};f(a);printf(“%d,%d\n”,a.b,a.p);}程序运行后的结果是____d____a)2,3 b)2,4 c)1,4 d)1,29)有以下程序struct S {int n;int a[20];};void f(int *a,int n){int i;for(i=0;i<n-1;i++) a[i]+=i;}main(){int i;struct S s={10,{2,3,1,6,8,7,5,4,10,9}};f(s.a,s.n);for(i=0;i<s.n;i++) printf(“%d,”,s.a[i]);}程序运行后的输出结果是______a____a) 2,4,3,9,12,12,11,18,9, b)3,4,2,7,9,8,6,5,11,10,c)2,3,1,6,8,7,5,4,10,9, d)1,2,3,6,8,7,6,5,10,9,10) 有以下程序段typedef struct NODE{int num;struct NODE *next;}OLD;以下叙述中正确的是——————ca)以上的说明形式非法b) NODE 是一个结构体类型c) OLD是一个结构体类型d)OLD是一个结构体变量11)有以下程序:#include <string.h>struct STU{int num;float TotalScore;};void f(struct STU p){ struct STU s[2]={{20041,703},{20045,537}};p.num=s[1].num;p.TotalScore=s[1].TotalScore;}main(){struct STU s[2]={{20041,703},{20045,537}};f(s[0]);printf(“%d %3.0f\n”,s[0].num,s[0].TotalScore);}程序运行后的输出结果是____d___a) 20045 537 b)20044 550 c)20042 580 d)20041 70312) 有以下程序#include <string.h>struct STU{char name[10];int num;};void f(char *name,int num){struct STU s[2]={{“SunDan”,20044},{“Penghua”,20045}}; num=s[0].num;strcpy(name,s[0].name);}main(){struct STU s[2]={{“YangSan”,20041},{“LiSiGuo”,20042}},*p; p=&s[1];f(p->name,p->num);printf(“%s %d\n”,p->name,p->num);程序运行后的输出结果是___a____a) SunDan 20042 b)SunDan 20044 c)LiSiGuo 20042 d)YangSan 2004113) 有以下程序:struct STU{char name[10];int num;float TotalScore;};void f(struct STU *p){struct STU s[2]={{“SunDan”,20044,550},{“Penghua”,20045,537}},*q=s;++p;++q;*p=*q;}main(){struct STU s[3]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580}};f(s);printf(“%s %d %3.0f\n”,s[1].name,s[1].num,s[1].TotalScore);}程序运行后的输出结果____b____a)SunDan 20044 580 b)Penghua 20045 537c)LiSiGuo 20042 580 d)SunDan 20041 703填空题1)以下程序运行后的输出结果是_____5_____struct NODE{int num; struct NODE *next; }main(){struct NODE s[3]={{1,’\0’},{2,’\0’},{3,’\0’}},*p,*q,*r;int sum=0;s[0].next=s+1;s[1].next=s+2;s[2].next=s;p=s;q=p->next;r=q->next;sum+=q->next->num;sum+=r->next->num;printf(“%d\n”,sum);}2)以下程序运行后的输出结果是______13431___struct NODE{int k;struct NODE *link;main(){struct NODE m[5],*p=m,*1=m+4;int i=0;while(p!=q){p->k=++i;p++;q->k=i++;q--;}q->k=i;for(i=0;i<5;i++)printf(“%d”,m[i].k);printf(“\n”);}3)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。
结构体与共用体及用户定义类型

结构体与共用体及用户定义类型一、选择题:(1)有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B)NODE是一个结构体类型C)OLD是一个结构体类型D)OLD是一个结构体变量(2)有以下程序# include <string.h>struct STU{ int num;float TotalScore; };void f(struct STU p){ struct STU s[2]={{20044,550},{20045,537}};p.num = s[1].num; p.TotalScore = s[1].TotalScore; }main(){ struct STU s[2]={{20041,703},{20042,580}};f(s[0]);printf("%d %3.0f\n", s[0].num, s[0].TotalScore);}程序运行后的输出结果是A)20045 537B)20044 550C)20042 580D)20041 703(3)有以下程序# include <string.h>struct STU{ char name[10];int num; };void f(char *name, int num){ struct STU s[2]={{"SunDan",20044},{"Penghua",20045}}; num = s[0].num;strcpy(name, s[0].name);}main(){ struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;p=&s[1]; f(p->name, p->num);printf("%s %d\n", p->name, p->num);}程序运行后的输出结果是A)SunDan 20042B)SunDan 20044C)LiSiGuo 20042D)YangSan 20041(4)有以下程序struct STU{ char name[10]; int num; float TotalScore; };void f(struct STU *p){ struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}}, *q=s; ++p ; ++q; *p=*q;}main(){ struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};f(s);printf("%s %d %3.0f\n", s[1].name, s[1].num, s[1].TotalScore); }程序运行后的输出结果是A)SunDan 20044 550B)Penghua 20045 537C)LiSiGuo 20042 580D)SunDan 20041 703(5)若有以下说明和定义union dt{int a; char b; double c;}data;以下叙述中错误的是A)data的每个成员起始地址都相同B)变量data所占内存字节数与成员c所占字节数相等C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000D)data可以作为函数的实参(6)设有如下说明typedef struct ST{long a;int b;char c[2];} NEW;则下面叙述中正确的是A)以上的说明形式非法B)ST是一个结构体类型C)NEW是一个结构体类型D)NEW是一个结构体变量(7)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}stu1,stu2;
(4)、使用typedef说明一个结构体类型名,再用 新类型名定义变量
一般形式:
例 typedef struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }student;
13.2.1 结构体类型定义:
合法标识符 可省:无名结构体
struct [结构体名]
{
类型标识符 成员名;
struct是关键字,
类型标识符 成员名; ……………型或构造型
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
一般形式:
struct
{ 类型标识符 成员名;
类型标识符 成员名;
……………. }变量名列表;
例 struct { int num;
用无名结构体直接定义变量只能一 次
char name[20]; 通常用在不需要再次定义此类型结
char sex;
构变量
int age;
float score;
char addr[30];
(优选)结构体共用体和用户 定义类型
说明: 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同
define 预编译时处理 简单字符置换
typedef 编译时处理 为已有类型命名
13.2 结构体
结构体:是一种自定义的构造数据类型。 用途:把不同类型的数据组合成一个整体。
结构体类型的定义
num name
sex age
score
addr
…
2字节 20字节 1字节 2字节
4字节
30字节
…..
结构体类型定义描述结构 的组织形式(图纸),不分配内存
13.2.2 结构体变量的定义
(1)、先定义结构体类型,再定义结构体变量
一般形式:
struct 结构体名
{
类型标识符 成员名;
int age;
int age;
float score;
float score;
char addr[30]; char addr[30];
};
};
struct student stu1S,sTtuU2D; ENT stu1,stu2;
(2)、定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 {
12.2.4 结构体变量的引用
引用规则
例 struct结s构tu体den变t 量不能整体引用,只能引用变量成员
{ i引nt 用num方; 式: 结构体变量名.成员名
例}s可结tu例1s{以构{t,ccifcsrnlhhhsut将体o{tutiaaacscarna2trrrhtu一嵌trtigccif;acuasnnslihhiine例reotdccnsnnntt个套;aaaxtatodntttunaurrms;trrammg例dyu结时tdds[esumeneaem3eea;c;os{d[;yaa构逐x0nteot2n;erem;r;]t[r0;tnu;2s{eh体级e]tct0;;;[rt]2uiccif变引成 优 结;nnl0shhcosttt员 先 合t]aau量用taicci;naurr1nnthh(级 性gu=dsps分tst赋saanem{ttreecna::urrui;1a从量xnnno1gu值;d10msut;trnemf1e左e.)me(b;运ae,给xn““;;im[向%;Wtr2算t另de0ah右,n符[n]d%2a一;Lam0syi,]n%e个.;m”sc,tm‘结,uos%Ms1ottnuu.nd’构st1,1t,hc1%h.i….os9fn=体c(rf,us1eo8…,b%mt+r72i变uder=..=s1;at5.=h\s=y1,n量8td“0=u”5Da;,2s.ys5ta.tus;Luyc2(1eio)aa)r)n;re”;};
形式二:
struct 结构体名
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
类型标识符 成员名; 类型标识符 成员名;
……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
(3)、直接无名结构体的同时定义结构体变量
结构体可嵌套
例{s例truiscntttrumdcaottnesthtu;dent
{initndtayn;um;
inct hyaerarn;ame[20];
}; struct date
struct{stuidnetnmt onth; { int numin;t day;
num num
name name month
student std,pers[3],*pstd;
typedef struct
{ 类型标识符 成员名;
类型标识符 成员名;
……………. }标识符; 标识符 变量名列表;
说明
结构体类型与结构体变量概念不同
类型:不分配内存;
变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
结构体成员名(域名)与程序中变量名地位相同
birthday bdiratyhdayyear
char naimntey[2e0ar];;
month day year
stru}cbtirdthadteayb;irthday;
}stu};stu;
12.2.3结构体变量的初始化
和其他类型的变量s相tru同ct ,结构体名 在定义结构体变量时赋{ 初类值型标识符 成员名;
类型标识符 成员名;
例 #define …ST…U…D…E…N.T struct student
例 struct student { int num;
S{T}sU;trDuinEcttNn结Tum构;体名 变量名表列;
char name[20]; char name[20];
char sex;
char sex;
形式三:
struct
{ 类型标识符 成员名;
类型标识符 成员名; …………….
}结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
形式一:
类型标识符 成员名; …………….
}; struct 结构体名 结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; };
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};