第14部分 结构体共用体和用户定义类型
2级C语言第14章 结构体共用体和用户定义类型
![2级C语言第14章 结构体共用体和用户定义类型](https://img.taocdn.com/s3/m/2dc551b9f121dd36a32d82ed.png)
例 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语言程序设计、微机原理与接口含汇编语言)](https://img.taocdn.com/s3/m/a2bf6f742cc58bd63086bd82.png)
河北省普通高校专科接本科教育考试计算机科学与技术/软件工程专业考试说明一、内容概述与要求第一部分:C 语言程序设计I.课程简介C 语言程序设计课程考试是为招收计算机科学与技术/软件工程等专业专科接本科学生而实施的入学考试。
参加 C 语言程序设计课程考试的考生应理解 C 程序的基本构成、C 程序中的数据类型及其运算、结构化程序设计的三种基本结构(顺序、选择、循环)、数组、函数;了解编译预处理命令、指针、结构体与共用体、位运算等知识模块所涉及的基本概念、语法规范;掌握运用以上语法知识进行结构化程序设计的基本方法;熟悉程序设计中简单的数据结构和算法,具有一定的分析和编写简单 C 程序的能力,以及基本的纠错和调试程序的能力。
考生应具有规范的结构化编程思维,能够综合运用所学知识分析并解决简单的实际问题。
C语言程序设计课程考试从两个层次对考生进行测试,较高层次的要求为“理解”和“掌握”,较低层次的要求为“了解”和“会”。
这里“理解”和“了解”是指对概念与理论提出的要求。
“掌握” 和“会”是指对使用方法、应用能力提出的要求。
二、考试形式与试卷结构考试采用闭卷、笔试形式,全卷满分为 150 分,考试时间为 75 分钟。
试卷包括选择题、程序阅读题、程序填空题和编程题。
选择题是四选一型的单项选择题;程序阅读题、程序填空题只要求直接填写结果;编程题应写出完整的程序代码,要求符合 C 语言的语法规范。
选择题和程序阅读题分值合计为 70 分。
程序填空题和编程题分值合计为 80 分。
II.知识要点与考核要求一、C 语言程序的结构(一)知识范围C 语言程序的基本构成;头文件、函数构成以及程序中的注释; C 程序的执行过程;源程序的书写格式。
(二)考核要求1.理解 C 程序的基本结构及执行过程。
2.理解 C 程序中头文件、注释等概念,会在程序中正确使用文件包含命令以及添加注释。
3.理解 C 函数的构成形式。
4.了解 C 程序源代码的书写格式。
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/9b15ff2a783e0912a2162a8f.png)
4、共用体类型的变量如何赋初值,含义是什么?
不能对共用体变量名赋值,也不能在定义共用体变量时初始化。但可以用一个共用体变量为 另一个变量赋值
例:union
{ int i;
char ch;
double f;
}a={1,’a’,1.5}; ()
a=1;
()
m=a;
()
例:float x; union { int i; char ch; double f; }a,b; a.i=1; a.ch=‘a’; a.f=1.5; b=a; () x=a.f; ()
二. 枚举类型的应用
• 1.枚举类型变量的定义 ◆先定义枚举类型,再定义枚举类型变量
enum week{sun,mon,tue,wed,thu,fri,
sat};
enum week weekday,workday; ◆定义枚举类型的同时定义枚举变量 enum color {red,blue,green,black}a,b,c;
共用体类型的关键字
union 联合类型名 { 数据类型 成员名1 数据类型 成员名2
...........
数据类型 成员名n };
例:
union utype {
char ch; int i; float f; };
2、如何定义共用体类型的变量
(1)先定义类型,再定义变量,例如: union data /*共用体类型定义*/ { int i;
◆直接定义枚举变量 enum {male,female}sex1,sex2;
枚举类型变量的特点
例 enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
简述结构体类型和共用体类型的定义方式。
![简述结构体类型和共用体类型的定义方式。](https://img.taocdn.com/s3/m/86d094cffbb069dc5022aaea998fcc22bcd143a2.png)
简述结构体类型和共用体类型的定义方式
结构体类型和共用体类型都是C 语言中的复合数据类型,它们可以将多个不同类型的变量组合在一起,形成一个新的数据类型,方便程序设计和数据处理。
结构体类型的定义方式如下:
struct 结构体名{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
...
};
其中,结构体名为自定义的结构体类型名称,成员变量名和数据类型分别指定结构体中的每个成员变量。
结构体中的成员变量可以是任何C 语言中的数据类型,包括基本数据类型、数组、指针、结构体等。
共用体类型的定义方式如下:
union 共用体名{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
...
};
共用体与结构体类似,也是由多个成员变量组成的数据类型。
不同的是,共用体中的所有成员变量共享同一块内存空间,即它们在内存中的起始地址相同,占用的总内存大小等于最大成员变量的内存大小。
因此,共用体中不同的成员变量可以存储不同的数据类型,但同一时刻只能访问其中的一个成员变量。
需要注意的是,在定义结构体类型和共用体类型时,只是定义了一个新的数据类型,并没有创建该类型的变量。
如果要使用结构体类型或共用体类型,需要先定义一个该类型的变量,然后才能对其进行操作。
c语言 union和typedef
![c语言 union和typedef](https://img.taocdn.com/s3/m/490e4fb77d1cfad6195f312b3169a4517623e579.png)
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语言学习入门笔记之结构体与共用体](https://img.taocdn.com/s3/m/9bd9e8e1f605cc1755270722192e453610665b77.png)
结构体与共用体笔记定义结构体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-8
![C-8](https://img.taocdn.com/s3/m/8efe441f227916888486d72b.png)
age
city zip
struct info {char name[20]; int age;
c1.num c1 c2
c2.score=95.5
tud.adr.tel
tel
num num
2B
name sex age score name sex age score 95.5
20B 1B 2B 4B
struct addr adr; } tud ;
17
§8.3结构体指针
结构体变量一旦定义——
系统即按成员顺序分配空间,同时为结构体变量赋予 一个起始地址。
结构体指针变量——
用以指向结构体变量或结构体数组
一.指向结构体变量的指针
定义例型 使用指向结构体的指针访问成员
例8.4使用结构体指针访问结构体成员
18
§8.3结构体指针
定义
例如:struct key { char kword[10]; int kcount; }kdata; struct key *kp=&kdata;
结构体成员引用具有与普通变
量相同的操作功能
12
§8.1 结构体概要
四.结构体类型变量的初始化
一般在定义结构体变量的同时即可以赋初值
例8.2结构体初始化与成员引用举例
结构体要点
结构体类型描述 结构体变量定义 结构体成员变量的初始化与引用 结构体变量赋值——多值赋值
结构体类型及变量的作用域
13
printf(“NUMBER NAME AGE\n”); 例8.2结构体初始化与成员引用举例 printf("%d %s %d\n", #include<stdio.h> a.num, , a.age);
共用体(共9张PPT)
![共用体(共9张PPT)](https://img.taocdn.com/s3/m/2f4dcb3b443610661ed9ad51f01dc281e53a56d5.png)
共用体类型对于我们做一般情况下的编程,并不是很常用。
枚举类型变量的定义和使用
➢ 定义形式:
enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n};
➢ 定义方式: SINGLE f;
/*等价于float f;; */
例如:
typedef int INTEGER;
用已定义的枚举类型去定义变量: 共用体的概念及其变量的引用方式
【例7-3】构建最多可以拥有250个字符的字符串类型。
typedef char string[250];
string s;
/*等价于char s[250];*/
strcpy(s, "C Language");
【例7-4】把字符指针定义为字符串类型
typedef char* string;
string s1,s2;
union fourbyte 枚举类型变量的取值范围只能是其所枚举的各个常量,枚举变量的比较相当于比较它们所隐含的整数值,枚举类型变量的值是对应枚举常
量所代表整数值。
{ 枚举类型变量的定义和使用
typedef char* string;
long n; 对于上种方式也可省略枚举类型名:
再用这个类型定义一个变量n:
/*等价于char *s1,s2;*/
s1= "C Language";
s2=s1;
这样一来就使得自定义类型string更像C++和Java语言里 的字符串类型,变量s则更像Java里的字符串对象引用变量。
➢ 共用体所有成员的存储单元共用同一个存储单元,内存 长度是其最长的成员的长度,起作用的成员是最后一次 存放的成员。
主要是为了照顾有其他编程语言背景的人对C语言的使用。
全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章
![全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章](https://img.taocdn.com/s3/m/fffe42dcb14e852458fb5731.png)
二级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];
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/b1491c73c281e53a5802ff82.png)
一、结构体(structure)
C语言允许用户自己指定这样一种数据结构,即将不同类型的数据组合成一个有机的整体以便于引用。
二、共用体
使几个不同的变量共占同一段内存的结构。
三、枚举类型
1、如果一个变量只有几种可能的值,可以用此方法定义。
2、声明枚举类型用enum开头。
3、说明:(1)在C编译中,对枚举元素按常量处理;
(2)C语言编译按定义时的顺序使它们的值为0,1,2…,也可以改变枚举元素的值,在定义时由程序员指定;
(3)枚举值可以用来作判断比较;
(4)一个整数不能直接赋给一个枚举元素,只有进行强制类型转换才能赋值:workday=(enum weekday)2;
四、用typedef定义类型。
c语言第11章-结构体与共用体
![c语言第11章-结构体与共用体](https://img.taocdn.com/s3/m/f3a39a14c950ad02de80d4d8d15abe23482f0330.png)
}
§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
结构体、共用体、枚举类型、typedef的区别
![结构体、共用体、枚举类型、typedef的区别](https://img.taocdn.com/s3/m/30452b6a27d3240c8447ef45.png)
值 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 算起了.
共用体的定义和使用
![共用体的定义和使用](https://img.taocdn.com/s3/m/46ef8145ae1ffc4ffe4733687e21af45b207fe57.png)
共用体的定义和使用共用体是一种在 C 语言中存在的数据类型,它允许不同的变量共享相同的内存空间。
这种数据类型通常用于设计一些体积小、数据类型相对简单、且数量较多的数据结构。
在本文中,我们将探讨共用体的定义和使用。
一、共用体的定义共用体的定义与结构体类似,可以使用关键字 union 来定义一个共用体类型。
其中,定义共用体的语法如下:```union union_name {member1;member2;member3;...};```在共用体定义中,member1、member2、member3 等为共用体的成员(通常称为共用体变量),它们共享相同的内存空间。
因此,共用体的大小等于最大成员的大小。
二、共用体的使用共用体的使用通常是通过以下两种方式实现的:1. 访问共用体的成员与结构体类似,可以使用点运算符(.)或箭头运算符(->)来访问共用体的成员。
不同之处在于,不同的成员可以共享相同的内存空间。
因此,改变一个成员的值,可能会影响其他成员的值。
例如:```#include <stdio.h>#include <string.h>union Data {int i;float f;char str[20];};int main( ) {union Data data;data.i = 10;printf( "data.i : %d\n", data.i);data.f = 25.0;printf( "data.f : %f\n", data.f);strcpy( data.str, "C Programming");printf( "data.str : %s\n", data.str);return 0;}```在上述代码中,我们定义了一个共用体 Data,它有三个成员:i、f 和str。
C语言共同体
![C语言共同体](https://img.taocdn.com/s3/m/3536520da200a6c30c22590102020740be1ecd3e.png)
C语⾔共同体结构体(Struct)是⼀种构造类型或复杂类型,它可以包含多个类型不同的成员。
在C语⾔中,还有另外⼀种和结构体⾮常类似的语法,叫做共⽤体(Union),它的定义格式为:union 共⽤体名{成员列表};共⽤体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共⽤体的区别在于:结构体的各个成员会占⽤不同的内存,互相之间没有影响;⽽共⽤体的所有成员占⽤同⼀段内存,修改⼀个成员会影响其余所有成员。
结构体占⽤的内存⼤于等于所有成员占⽤的内存的总和(成员之间可能会存在缝隙),共⽤体占⽤的内存等于最长的成员占⽤的内存。
共⽤体使⽤了内存覆盖技术,同⼀时刻只能保存⼀个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
共⽤体也是⼀种⾃定义类型,可以通过它来创建变量,例如:union data{int n;char ch;double f;};union data a, b, c;上⾯是先定义共⽤体,再创建变量,也可以在定义共⽤体的同时创建变量:union data{int n;char ch;double f;} a, b, c;如果不再定义新的变量,也可以将共⽤体的名字省略:union{int n;char ch;double f;} a, b, c;共⽤体 data 中,成员 f 占⽤的内存最多,为 8 个字节,所以 data 类型的变量(也就是 a、b、c)也占⽤ 8 个字节的内存,请看下⾯的演⽰:#include <stdio.h>union data{int n;char ch;short m;};int main(){union data a;printf("%d, %d\n", sizeof(a), sizeof(union data) );a.n = 0x40;printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.ch = '9';printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.m = 0x2059;printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.n = 0x3E25AD54;printf("%X, %c, %hX\n", a.n, a.ch, a.m);return 0;}运⾏结果:4, 440, @, 4039, 9, 392059, Y, 20593E25AD54, T, AD54这段代码不但验证了共⽤体的长度,还说明共⽤体成员之间会相互影响,修改⼀个成员的值会影响其他成员。
结构体
![结构体](https://img.taocdn.com/s3/m/eda27814866fb84ae45c8dde.png)
C语言:结构体、共用体、枚举、类型重定义、位运算、预处理C语言除了提供象int,long,float,double、和char这样的基本数据类型之外,还支持数组、Struct、Union、和Enum数据类型。
结构体类型(struct)我们一个数组包含多个成员(元素),每个成员具有相同的数据类型。
一个结构体也能包含多个成员,但每个成员的数据类型可以不同。
例如:(a) struct Student { char Name[10], char Sex, int Age ;float Height; }(b) struct Student S1;这里,(a)定义了struct类型Student,而(b)定义了S1是Student类型的变量。
Student类型包含四个成员:Name,Sex,Age,Height,它们的数据类型分别是字符数组、字符型、整型、和浮点型。
以下是另一例子:struct DATE { int YEAR; int MONTH, int DAY ;}struct DATE d1,d2;注意,struct类型是泛指,而Student和DATE是两个特定的结构体类型。
当定义一结构体类型时,你要指定它的结构体类型名,当定义变量时,要同时写上关键字struct和结构体类型名。
定义结构体类型:我们struct 结构体类型名 { 成员1;成员2;…;成员n; }每一个成员可以是基本类型的变量、数组或指针变量,也可以是其他结构体或共用体类型的变量、数组或指针。
成员虽然不能是本结构体类型的变量,但可以是本结构体类型的指针变量。
定义结构体类型的变量:struct 结构体类型名变量名1,变量名2,…定义结构体变量时也可初始化,如:struct Student S1,S2={ “Zhang San”, ‟M‟, 19, 1.76 },S3;引用结构体类型的变量:(1)引用其成员:结构体变量名。
成员如 strcpy(,”Li Si”); S1.Sex=‟F‟; S1.Age=18; S1.Height=1.72;[0]=‟L‟; [1]=‟i‟; [2]=‟u‟; [3]=‟\0‟;S2.Height = S1.Height + 0.01 ;(1)引用整体就用变量的名字。
结构体、共用体户定义类型
![结构体、共用体户定义类型](https://img.taocdn.com/s3/m/fa03e9b6376baf1ffd4fad58.png)
结构体、共用体户定义类型————————————————————————————————作者:————————————————————————————————日期:用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中,并作为函数值返回。
结构体与共用体及用户定义类型
![结构体与共用体及用户定义类型](https://img.taocdn.com/s3/m/f9da592bcfc789eb172dc8d9.png)
结构体与共用体及用户定义类型一、选择题:(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)。
第14部分结构体、共用体和用户定义类型一、选择题1、若有如下说明,则( D )的叙述是正确的(已知int类型占两个字节)。
struct st{ int a;int b[2];}a;A.结构体变量a与结构体成员a同名,定义是非法的B.程序只在执行到该定义时才为结构体st分配存储单元C.程序运行时为结构体st分配6字节存储单元D.类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后)2、若有以下结构体定义:struct example{ int x;int y;}v1;则( D )是正确的引用或定义。
A.example.x=10; B.example v2.x=10;C.struct v2; v2.x=10; D.struct example v2={10};3、对于如下的结构体定义,若对变量person的出生年份进行赋值,( C )是正确的赋值语句。
struct date{ int year,month,day; };struct worklist{ cahr name[20];char sex;struct date birthday;}person;A.year=1976; B.birthday.year=1976;C.person.birthday.year=1976; D.person.year=1976;4 D )。
struct link{ char data;;}node;A.struct link next B.link *nextC.struct next link D.struct link *next5、下述程序的运行结果是( A )。
#include<stdio.h>struct st{ int n;int *m;}*p;void main(){ int d[5]={10,20,30,40,50};struct st arr[5]={100,d,200,d+1,300,d+2,400,d+3,500,d+4};p=arr;printf(“%d\t”,++p->n);printf(“%d\t”,(++p)->n);printf(“%d\n”,++(*p->m));}A.101 200 21 B.101 20 30C.200 101 21 D.101 101 106、下述程序的执行结果是( A )。
#include<stdio.h>union un{ short int i;char c[2];};void main(){ union un x;x.c[0]=10;x.c[1]=1;printf(“%d\n”,x.i);}A.266 B.11 C.265 D.1387、若已建立如下链表结构,指针p和s分别指向下图所示结点,则能够将指针s指向的结点从链表中删除并释放该结点的语句组是( C )。
A.free(s); B.s=s->next;p->next=s->next; p->next=s;free(s);C.p->next=s->next; D.s=s->next;free(s); p->next=s;p=p->next=s;free(p);8、对于下述说明,表达式( D )不能使变量p->b的值增1。
struct st{ int a;int *b;}*p;A.++p->b B.*++((p++)->b)C.*p->b++ D.(*(p++)->b)++9、根据下述定义,可以输出字符…A‟的语句是( A )。
struct person{ char name[11];struct{ char name[11];int age;}other[10];};struct person man[10]={{“Jone”,{“Paul”,20}},{“Paul”,{“Mary”,18}},{“Mary”,{“Adam”,23}},{“Adam”,{“Jone”,22}}};A.printf(“%c”,man[2].other[0].name[0]);B.printf(“%c”,other[0].name[0]);C.printf(“%c”,man[2].(*other[2]));D.printf(“%c”,man[2].name);10、根据以下定义:struct person { char name[9]; int age; }struct person class[10]={“Jone”,17,”Paul”,19,”Mary”,18,”Adam”,16}; 能输出字母M的语句是( D )。
A.printf(“%c\n”,class[3].name);B.printf(“%c\n”,class[3].name[1]);C.printf(“%c\n”,class[2].name[1]);D.printf(“%c\n”,class[2].name[0]);11、设有如下结构体定义:struct student{ int num;char sex;int age;}s1,s2;下列语句中错误的是( A )。
A.printf(“%d,%c,%d”,s); B.s2.age=s1.age;C.s1.age++; D.printf(“%o”,&s1);12、设有以下定义:struct stru{ int a;long b;char c[6];}sampl;则以下赋值正确的是( B )。
A.sampl.c=”abcd”; B.strcpy(sampl.c,”abcd”); C.sampl->c=”abcd”; D.以上都不对13、以下程序的输出结果是( C )。
struct st{ int x;int *y;}*p;int dt[4]={10,20,30,40};struct st aa[4]={50,&dt[0],60,&dt[0],70,&dt[0], 80,&dt[0]}; void main(){ p=aa;printf(“%d,”,++p->x);printf(“%d,”,(++p)->x);printf(“%d\n”,++(*p->y));}A.10, 20, 20 B.50, 60, 21C.51, 60, 11 D.60, 70, 3114、以下程序的输出结果是( D )。
#include<stdio.h>void main(){ union un{ long k;char c;};struct byte{ long b;union un c;}r;printf(“%d\n”,sizeof(r));}A.10 B.13 C.7 D.815、下列说法不正确的是( A )。
A.下列结构体定义时,占据了5个字节的空间struct s{ int num,age; char sex; };B.结构体的成员名可以与程序中的变量名相同C.对结构体中的成员可以单独使用,它的作用相当于普通变量D.结构体的成员可以是一个结构体变量16、设有如下定义:struct sample{ int a;int b;};struct st{ int a;float b;struct sample *p;}st1,*pst;若有pst=&st1; 则以下引用正确的是( C )。
A.(*pst).p.a B.(*pst)->p.aC.pst->p->a D.pst.p->a17、以下程序:void main(){ struct cmplx{ int x; int y; }cnum[2]={1,3,2,7};printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);}其输出是( D )。
A.0 B.1 C.3 D.618、设有如下说明和语句:typedef struct st{ int n;struct st *next;}ST;ST a[3],*p;a[0].n=5; a[0].next=&a[1];a[1].n=7; a[1].next=&a[2];a[2].n=9; a[2].next=‟\0‟;p=&a[0];则值为6的表达式是( D )。
A.p++->n B.p->n++C.(*p).n++ D.++p->n19、已知字符0的ASCII代码值的十进制数是48,且数组的第0个元素在低位,以下程序:void main(){ unionlong k;char c[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf(“%x\n ”,s->c[0]);}其输出是( A )。
A .39B .9C .38D .820、若已建立下面的链表结构,指针p 、s 分别指向图中所示结点,则不能将s 所指结点插入到链表末尾的语句组是( C )。
A .s->next=NULL; p=p->next; p->next=s;B .p=p->next; s->next=p->next; p->next=s;C .p=p->next; s->next=p; p->next=s;D .p=(*p).next; (*s).next=(*p).next; (*p).next=s;二、填空题1、以下函数creat 用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾,结点数据域中的数值从键盘输入,以字符?作为输入结束标志。
单向链表的头指针作为函数值返回。
请填空。
#include<stdio.h>struct list{ char data;struct list *next;};struct list *creat(){ struct list *h,*p,*q;char ch;h= (struct list *) malloc(sizeof( struct list ));p=q=h;ch=getchar();{ p= (struct list *) malloc(sizeof( struct list ));p->data=ch;q->next=p;q=p;ch=getchar();}p->next=‟\0‟;return h ;}2、以下min函数的功能是:在带有头结点的单向链表中,查找结点数据域的最小值作为函数返回。