C语言程序设计 结构体与共用体
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语言程序设计第十一章 结构体与共用体
11 结构体与共用体 (1)11.1 定义一个结构的一般形式 (1)11.2 结构类型变量的说明 (2)11.3 结构变量成员的表示方法 (4)11.4 结构变量的赋值 (4)11.5 结构变量的初始化 (5)11.6 结构数组的定义 (5)11.7 结构指针变量的说明和使用 (7)11.7.1 指向结构变量的指针 (7)11.7.2 指向结构数组的指针 (9)11.7.3 结构指针变量作函数参数 (10)11.8 动态存储分配 (11)11.9 链表的概念 (12)11.10 枚举类型 (14)11.10.1 枚举类型的定义和枚举变量的说明 (14)11.10.2 枚举类型变量的赋值和使用 (15)11.11 类型定义符typedef (16)11 结构体与共用体11.1 定义一个结构的一般形式在实际问题中,一组数据往往具有不同的数据类型。
例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。
显然不能用一个数组来存放这一组数据。
因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。
为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。
它相当于其它高级语言中的记录。
“结构”是一种构造类型,它是由若干“成员”组成的。
每一个成员可以是一个基本数据类型或者又是一个构造类型。
结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。
如同在说明和调用函数之前要先定义函数一样。
定义一个结构的一般形式为:struct 结构名{成员表列};成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};在这个结构定义中,结构名为stu,该结构由4个成员组成。
C语言程序设计PPT课件第12章 结构体和共用体
stu1 成员1 成员2 成员3 成员4
成 员
5
2019/8/29
27/60
12.4结构体指针的定义和初始化
当结构体嵌套时,如何访问结构体 指针变量所指向的结构体成员? pt
STUDENT stu1; STUDENT *pt = &stu1;
stu1. birthday. year = 2019; (*pt). birthday. year = 2019; pt -> birthday. year = 2019;
向函数传递结构体的完整结构 向函数传递结构体的首地址
2019/8/29
31/60
struct date {
int year; int month; int day; }; void func(struct date p) {
p.year = 2000; p.month = 5; p.day = 22; }
结构体变量 作函数参数
【例12.4】
Before function call:2019/04/23 After function call:2019/04/23
2019/8/29
32/60
struct date {
int year; int month; int day; }; void func(struct date *p) {
所以一个结构体在内存中的存储格式也是与机器相关的
2019/8/29
22/60
12.3结构体数组的定义和初始化
2019/8/29
23/60
12.3结构体数组的定义和初始化
2019/8/2建9 立了数据库中的多条记录,每条对应一个学生信息24/60
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语言程序设计-第11章 结构体与共用体
2.说明: (1)结构体类型与结构体变量是两个不同的概念, 其区别如同int类型与int型变量的区别一样。 (2)结构体类型中的成员名,可以与程序中的变 量同名,它们代表不同的对象,互不干扰。 (3)“结构体类型名”和“数据项”的命名规则, 与变量名相同。
(4)数据类型相同的数据项,既可逐个、 逐行分别定义,也可合并成一行定义。 例如,本案例中的日期结构类型,也可改为如下形 式: struct date {int year, month, day; }; (5)结构体类型中的数据项,既可以是基本数据类 型,也允许是另一个已经定义的结构体类型。 例如,结构体类型std_info,其数据项“birthday” 就是一个已经定义的日期结构类型date。 (6)本书将1个数据项称为结构体类型的1个成员 (或分量)。
例如:
struct student {int num; . . . }; struct student stu[ ]={{…},{…},{…}}; 以上即声明结构体类型,然后定义数组为该结构体类 型,在定义数组时初始化。
11.5.3 结构体数组应用举例
例 11.2 对候选人得票的统计程序。 #include <string.h> struct piao {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<=6;i++) {scanf(“%s”,leader_name);
C语言提供了将不同类型的数据组合成一个 有机的整体,以便引用。例如,一个学生 的学 号、姓名、性别、年龄、成绩、家庭 地址等项。这些项都与该学生相联系。 在一个组合项中包含有若干个类型不同的数 据项,这样一种数据结构称为结构体。它相 当于其他高级语言中的“记录”。 见下图: num name sex age score addr 10010 Li Fun M 18 87.5 Beijing
C语言结构体与共同体
C语言结构体与共同体C语言中结构体和共同体是两种用于组织和管理数据的重要概念。
它们可以帮助程序员更有效地管理和操作数据,提高程序的可读性和可维护性。
一、结构体(Structures)结构体是一种由不同类型的数据成员组成的数据类型,它允许程序员将不同类型的数据组织在一起并使用一个名称来引用它们。
结构体可以包含各种数据类型,例如整数、字符、数组或甚至其他结构体。
结构体的定义通过使用关键字struct来实现。
例如,下面的代码定义了一个名为Person的结构体,其中包含姓名、年龄和性别这三个成员:```cstruct Personchar name[50];int age;char gender[10];};```结构体定义可以在程序的任何地方,通常在函数外部定义,使得它在整个程序中都可见。
结构体的创建和初始化可以使用以下格式:```cstruct Person p1; // 创建名为p1的结构体变量struct Person p2 = {"John", 25, "Male"}; // 创建名为p2的结构体变量并初始化其成员```结构体成员可以通过`.`操作符来访问,例如:```cprintf("Name: %s\n", );```结构体可以作为函数的参数传递,也可以作为函数的返回值。
通过传递结构体作为参数,可以避免传递多个参数,提供了一种有效地传递多个相关数据的方法。
例如,下面的代码演示了一个函数,该函数接受一个名为p的Person结构体作为参数,并打印出其成员的值:```cvoid printPerson(struct Person p)printf("Name: %s\n", );printf("Age: %d\n", p.age);printf("Gender: %s\n", p.gender);```二、共同体(Unions)共同体是一种特殊类型的结构体,它允许不同类型的成员共享同一块内存空间。
C语言程序设计课件0911结构体与共用体
指向结构体变量的指针
格式:struct 结构体名 * 指针名; struct Item w={“friend”, 7}; struct Item *p; 上例可合并为: struct Item w={“friend”, 7}, *p;
指向成员运算符
可用指向结构体变量的指针来访问其成员, 这时要用到”指向成员运算符“,例如: struct Item w={“friend”, 7}, *p=&w; printf(“word=[%s], freq=%d\”, p->word, p->freq); // 此时等价于: w.word, w.freq 指向成员运算符与成员运算符的优先级都 是1,都是自左至右结合。
结构体类型的嵌套
struct Date { int year, month, day; }; struct Student { int num; char name[20], sex, addr[30]; float score; struct Date birthday; };
用typedef定义结构体类型名
结构体数组的定义
与结构体变量的定义方式类似,也有三种方 式,只需指明是数组即可。例如:
struct Item ws[3]; struct Item {char word[12]; int freq;} ws[3]; struct {char word[12]; int freq;} ws[3];
《C语言程序设计与数据结构》课件第09章结构体与共用体
C语言程序设计与数据结构
C编译程序按照每个成员在结构体中声明的顺 序一一对应赋值,不可以跳过前面的成员直接给后 面的成员赋值,但是可以只给前面若干成员赋值, 后面没有赋值的成员由系统赋予默认值。
C语言程序设计与数据结构
3.结构体变量的引用 (1) 一般结构体变量的引用 一般结构体变量的引用是通过成员运算符“.”来实 现的,形式如下: 结构体变量名.成员名
学习重点: 结构体的概念; 结构体成员的引用。
C语言程序设计与数据结构
结构体概念的引入 (为什么需要结构体?)
C语言程序设计与数据结构
已经学习过的数据类型: 整形、实型、字符型 ,另外还有数组。 问题: 以上数据类型和数组是否完全满足编程需要? (例如:如何定义一个工人变量?)
C语言程序设计与数据结构
C语言程序设计与数据结构
上述五个数据项组成了工人的整体,这就是一 个结构体类型的数据,我们可以给这个数据命名为 worker,只要是worker类型的数据,都包括这五个 数据项。
C语言程序设计与数据结构
9.1 结构体类型的说明
C语言程序设计与数据结构
结构体类型是包含若干个相同或不同数据类型数 据项的集合,我们把这些数据项称之为结构体成员, 声明结构体类型的一般形式为: struct 结构体标识名 { 数据类型名1 结构体成员名表1; 数据类型名2 结构体成员名表2; ..... 数据类型名n 结构体成员名表n; };
C语言程序设计与数据结构
与同一类型的普通变量一样,结构体变量中的各个成 员也可以进行相应的各种运算,如: worker1.sex =„F‟; worker1. age++; worker1.salary=3000f;
C语言程序设计第9章结构体与共用体简明教程PPT课件
//书名 //作者 //出版社 //价格
【例9.2】定义一个结构体类型struct student,描 述学生的基本信息,包含学号、姓名、性别和成绩
struct student { int num; //学号 char name[20]; //姓名 char sex; //性别, M-男,F-女 float score; //成绩 };
第9章
结构体与共用体
第9类型,但在实际问题中, 数据要复杂一些,往往具有不同的数据项和类型: 例如: 图书基本信息 用户自定义 学生基本信息 数据类型 球赛基本信息 ……
方法:创建结构体类型、共用体类型(或称为联合 体类型)和枚举类型
C语言程序设计 第9章 结构体与共用体 2
9.1 结构体类型
整 型
单精度型float
基本类型
实型(浮点型)
双精度型double
字符类型char
C 数 据 类 型
数组 构造类型
结构体struct 共用体union 枚举类型enum 指针类型
本章所介绍 空类型void 的数据类型
C语言程序设计
数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作
C语言程序设计
定义了结构体类型: struct book 定义了结构体变量: book1,book2;
第9章 结构体与共用体
14
• 方式三:
定义无名结构体类型的同时定义结构体变量
struct { 成员列表 } 变量名列表; struct { char name[40]; char author[100]; char publish[100]; float price; }book1,book2; 说明:第三种方法,由于没 有给出结构体类型标识符, 在实际应用中,此方法往往 是一次性的,适用于定义临 时的局部变量或者嵌套的结 构体成员变量。
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。
C语言程序设计 - 结构体和共用体-样本教案
1.用指针处理链表
指向结构体类型数据的指针;用指针处理链表
3.结构变量在函数中的应用
在C语言中,允许结构变量的成员,结构变量的整体和结构变量的地址做为实参传递给相应的形参。
(1)向函数传递结构变量的成员
结构变量的成员作实参
结构变量的成员可以是普通变量,数组或指针变量,它们做实参时的情况同以前七,八,九章所讲。
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
35个字节
35个字节
35个字节
指向结构类型的指针变量:
如:struct student *pstd;
系统为该指针变量分配一个存放"地址"的4个字节的内存空间,具体该指针变量指向哪个结构类型变量,通过为该指针变量赋予某结构变量地址值来确定.
如下例:
struct student *pstd1,*pstd2,*pstd3;
pstd1=&std;/*pstd1指向结构变量std的首地址*/
pstd2=pers;/*pstd2指向结构数组pers的首地址*/
pstd3=(struct student*)malloc(size of (struct student));
说明:结构变量名不是指向该结构的地址, 这与数组名的含义不同,
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
C语言程序设计 Chapter8 结构体与共用体
struct date_type { int year; 结构体数组 int month; int day; 结构体数组的定义 }; ; struct stud_type { char name[10]; long num; char sex; struct date_type birthday; float score; char address[10]; }s1[3]; struct stud_type s2[5];
struct ym_type { 输入一个职工的工资信息, 例. 输入一个职工的工资信息,整体 int y; 赋值给另一个变量,在屏幕上输出。 赋值给另一个变量,在屏幕上输出。 int m; }; struct salary_type { char num[5]; char name[17]; struct ym_type ym; float salary; float other; float cost; };
#define N 5
char name[11]; int score; }t,s[N]; main() { /*输入基本信息 输入基本信息*/ 输入基本信息 /*选择排序成绩 选择排序成绩*/ 选择排序成绩 /*输出基本信息 输出基本信息*/ 输出基本信息 }
/*选择排序成绩 选择排序成绩*/ 选择排序成绩 for(i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) if(s[k].score<s[j].score) k=j; if(k!=i) { t=s[i]; s[i]=s[k]; s[k]=t; } }
第8章 结构体与共用体
概述
在事务处理中,常需要将一些关系密切但 在事务处理中 常需要将一些关系密切但类型不同的 并为其取一个整体名字, 数据项组织在一起,并为其取一个整体名字,形成一 并为其取一个整体名字 个结构。 语言中,就称其为 个结构。 语言中 就称其为结构体。 C语言中 结构体通常由不同数据类型的数据项(成员)组成 组成 一个结构体可包含若干成员,每个成员具有自己 一个结构体可包含若干成员 每个成员具有自己 的名字及数据类型。 的名字及数据类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
页眉内容一、选择题1、定义结构类型时,下列叙述正确的是()A、系统会按成员大小分配每个空间B、系统会按最大成员大小分配空间C、系统不会分配空间D、以上说法均不正确2、已知结构类型变量x的初始化值为{“20”,30,40,35.5},请问合适的结构定义是()A、Struct s{int no;int x,y,z};B、Struct s{char no[2];int x,y,z};C、Struct s{int no;float x,y,z};D、Struct s{char no[2];float x,y,z};3、若程序中有定义struct abc{int x;char y;};abc s1,s2;则会发生的情况是()A、编译时会有错误B、链接时会有错误C、运行时会有错误D、程序没有错误4、已知学生记录描述为struct student{int no;char name[20];char set;struct{int year;int month;int day;}birth;};struct student s;设变量s中的“生日”应是“1984年11月11日”,下列对生日的正确赋值方式是( ).A)year=1984; B)birth.year=1984;month=11; birth.month=11;day=11; birth.day=11;C)s.year=1984; D)s.birth.year=1984;s.month=11; s.birth.month=11;s.day=11; s.birth.day=11;5、当说明一个结构体变量时系统分配给它的内存是( ).A)各成员所需内存量的总和 B)结构中第一个成员所需内存量C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量6、以下对结构体类型变量的定义中不正确的是( ).A)#define STUDENT struct student B)struct studentSTUDENT {int num;{int num; float age;float age; }std1;}std1;C)struct D)struct{int num; int num;float age; float age;}std1; }student;struct student std1; 7、设有以下说明语句struct stu{int a;float b;}stutype;则下面的叙述不正确的是( ).A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名8、C语言结构体类型变量在程序执行期间( )..A)所有成员一直驻留在内存中B)只有一个成员驻留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中9、在16位IBM-PC机上使用C语言,若有如下定义:struct data{int i;char ch;double f;}b;则结构变量b占用内存的字节数是( ).A)1 B)2 C)3 D)410、以下程序的运行结果是( ).#include “stdio.h”main(){struct data{int year,month,day;}today;printf(“%d\n”,sizeof(struct data));}A)6 B)8 C)10 D)1211、若有以下定义和语句;struct student{int age;int num ;};struct student stu [3]={{1001,20 },{1002,19},{1003,21}};main(){struct student *p;p=stu;…..}则以下不正确的引用是( )。
A)(P++)—》num B)p++ C)(*p).num D)p=&stu.age12、以下scanf函数调用语句中对结构体变量成员的不正确引用是( )。
stuct pupil{char name[20 ];int age ;int sex;}pup[5,]*p;p=pup;A) scanf(“%s”,pup[0].name); B) scanf(“”%d),&pup[0].age;C) scanf(“%d”“%d”,P->age);13、有以下定义和语句,则以下引用形式不合法的是( )。
Struct s{int i1;struct s*i2,i0;};static struct s a[3 ]={2,&a[1],’\0’,4,%a[2],&a[0],6,’\0’,&a[1]},*ptr;ptr=a;A) ptr->i1++ B)*ptr->i2 C)++ptr->i0 D) ptr->i114、设有如下定义:struct sk{int n;float x;}data,*p;若要使P指向data中的n域,正确的负值语句的是( )。
A、p=&data.n;B) *p=data.n;C)p=(struct sk*)&data.n;D)p=(struct sk*)data.n;15、若哟于以下说明和语句:struct student{int age;int num;}std,*p;p=&std;则以下对结构体变量std中成员age的引用方式不正确的是( )。
A)std.age B)p->age C)(*p).age D) *p.age16、若有以下说明和语句,则下面表达式中值为1002的是( )。
Struct student{int age;int num;};struct student stu[3]={{1001,20},{1002,19},{1003,21};struct student *p;p=stu;A)(p++)—>num B)(p++)—>age C)(*p).num D)(*++p).age17、以下对结构体变量stul 中成员age 的非法引用是()。
struct student{int age;int num;}stul,*p;p=&stul;A)stul.age B)student.age C)p—>age D)(*p).age18、若要利用下面的程序片段使指针变量p指向一个存储整型变量的存储单元,则[ ]中应填入的内容是()。
int *p;P=[ ]malloc(sizeof(int));A)int B)int* C)(*int) D)(int*)19、当说明一个共用体变量时系统分配给它的内存是()。
A)各成员所需内存量的总和 B)结构中第一个成员所需内存量C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量20、以下对C语言中共用体类型数据的叙述正确的是()。
A)可以对共用体变量名直接赋值 B)一个共用体变量中可以同时存放其所有成员C)一个共用体变量中不可能同时存放其所有成员D)共用体类型定义中不能出现结构体类型的成员21、若有以下定义和语句:union data{int i;char c;float f;}a;int n;则以下语句正确的是()。
A)a=5; B)a={2,’a’,1.2}; C)printf(“%d\n”,a); D)n=a;22、设有以下说明,则下面不正确的叙述是()。
union data{ int i;char c;float f;}un;A)un所占的内存长度等于成员f的长度 B)un的地址和它的各成员地址都是同一地址C)un可以作为函数参数 D)不能对un赋值,但可以在定义un时对它初始化23、C语言共用体型变量在程序运行期间( ) 。
A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中C)部分成员驻留在内存中 D)没有成员驻留在内存中24、以下程序的运行结果是( ) 。
#include “stdio.h”main(){ union {long a;int b;char c;}m;printf(“%d\n”,sizeof(m));}A) 2 B)4 C)6 D)825、以下程序的运行结果是( ) .#include “stdio.h”union pw{int i;char ch[2];}a;main(){ch[0]=13;ch[1]=0;printf(“%d\n”,a,i); }A)13 B)14 C)208 D)209二、填空题1、以下程序的运行结果是【】. .struct n{int x;char c;};main(){struct n a={10,‘x’};func(a);printf(“%d,%c”,a.x,a.c);}func(struct n b){b.x=20;b.c=’y’;}2、以下程序的运行结果是【】.main(){struct EXAMPLE{struct{int x;int y;}in;int a;int b;}e;e.a=1;e.b=2;e.in.x=e.a*e.b;e.in.y=e.a+e.b;printf(“%d,%d”,e.in.x,e.in.y);}3、以下程序用以输出结构体变量bt所占内存单元的字节数,请在【】内填上适当内容.struct ps{ double i;char arr[20];};main(){ struct ps bt;printf(“bt size : %d\n”,【】;}4、若已定义:struct num{int a;int b;float f;} n={1,3,5.0};struct num * pn = &n;则表达式 pn ->b/n.a*++pn->b的值是【】,表达式 (*pn).a+pn->f的值是【】5、以下程序的运行结果是【】。
struct ks{int a;int *b;} s[4],*p;main(){int n=1 , i;printf(“\n”);for(i=0;i<4;i++){ s[i].a=n;s[i].b=&s[i].a;n=n+2;}p=&s[0];p++;printf(“%d,%d\n”,(++p)->a,(p++)->a);}6、以下程序运行结果为【】.struct s{int a;float b;char *c; }main(){static struct s x={19,83.5,”zhang”};struct s *px=&x;printf(“%d%.1f%s\n”,x.a,x.b,x.c);printf(“%d%.1f%s\n”,px―>a,(*px ).b, px―>c);printf(“%c%s\n”,*px―>c―1,&px―>c[1]); }7、设有以下定义和语句,请在printf语句的【】中填上能够正确输出的变量及相应的格式说明。