第九章 结构体
c程序设计 第九章 结构体
一、概念题二、判断题1. 结构体中的成员不可以单独使用(F)。
2. 成员名可以与程序中的变量名相同,二者不代表同一对象(T)。
3. 不能将一个结构体变量作为一个整体进行输入输出(T)。
4. 结构体变量所占内存长度是各成员占的内存长度之和(T)。
5. 结构体中的成员不可以单独使用(F )。
9. 一个结构体变量的指针就是该变量所占内存段的起始地址(T)。
10. 用结构体变量作实参,形参也必须是同类型的结构体变量(T )。
三、单选题1. 设变量定义如下,则对其中的结构分量num正确的引用是( )。
struct student {int num ;char name[20];float score;} stud[10];A. stud[1].num=10;B. student.stud.num=10;C. struct.stud.num=10;D. struct student.num=10;2. 已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是()。
struct worker{int no;char name[20];char sex;struct birth{ int day; int month; int year;}a;};struct worker w;A day=25;month=10;year=1993;B w.birth.day=25; w.birth.month=10; w.birth.year=1993;C w.day=25; w.month=10; w.year=1993;D w.a.day=25; w.a.month=10; w.a.year=1993;3. 对于以下的变量定义,语句( )在语法和语义上都是正确的。
struct node {float x,y;char s[10];} point={1,2,”abc”},*p;A. *p=point;B. p=&point;C. point=p;D. p->x=point.y;4. 设有以下语句typedef struct S{ int g;char h;} T;则下面叙述中正确的是()。
C语言 第九章 结构体数据类型期末测试习题与答案
程序运行后的输出结果是( )。
A.SunDan 20044
B.YangSan 20041
C.SunDan 20042
D.LiSiGuo 20042
参考答案:D
3、以下程序运行的结果是_( )。
#nclude”stdio.h
main()
{
struct date
{
int year , month , day ;
D.struct color
{ int red;
int green;
int blue;
} c l;
参考答案:B
7、有以下程序:
struct stu
{
char[10];
float score[3];
};
main( )
{
struct stu s[3]={{"20021",90,95,85},
{"20022",95,80,75},
} today ;
printf(“%d\n”,sizeof(struct date));
}
A.10
B.6
C.8
D.12
参考答案:D
4、设有如下说明
typedef struct ST
{
long a;
int b;
char c[2];
} NEW;
则下面叙述中正确的是______。
A.ST是一个结构体类型
B.NEW是一个结构体类型
A.typedef struct
{ int red;
int green;
int blue;
} COLOR;
COLOR cl;
B.struct color cl
结构体的定义和使用
结构体的定义和使用
结构体的定义与使用
结构体是一种数据类型,它可以用于将多个不同类型的数据组合在一起,以创建复杂的数据结构。
它是一种非常有用的数据结构,可以用于存储和管理大量有关联的数据。
结构体由多个成员变量组成,这些成员变量可以是任何类型的数据,包括整型、字符、浮点数和指针等。
结构体的定义是指在程序中定义结构体的过程,通常使用struct关键字来定义结构体,可以指定结构体成员变量的类型和名称,也可以指定结构体的名称。
定义完结构体后,就可以在程序中使用这个结构体了。
使用结构体的方式有很多,可以将结构体用作参数或者返回值,也可以将结构体变量作为全局变量或者局部变量使用。
另外,也可以使用指针变量指向一个结构体变量,从而访问结构体的成员变量。
另外,还可以使用结构体来实现继承,使用结构体作为函数参数,以及在各种算法中使用结构体来存储数据等。
总之,结构体是一种非常有用的数据结构,它可以将多个不同类型的数据组合在一起,以创建更复杂的数据结构,可以使用结构体来存储和管理大量有关联的数据,也可以用于实现继承、函数参数等。
结构体的定义与使用可以大大提高程序的可读性和可维护性,是编程中经常使用的数据结构之一。
结构体定义和使用
结构体定义和使用
结构体(structure)是一种复合数据类型,它可以用来描述不
同类型的数据。
它在编程中被广泛使用,用于管理程序内复杂的数据,例如像员工数据这样的结构数据。
结构体是由一组具有不同数据类型的变量组成的集合。
变量称为
结构体的成员变量,集合的定义就是每个成员的数据类型的定义。
它
们之间的关系就是结构体。
使用结构体需要先定义,这也是它另一个名字“结构体类型”的
原因,也就是定义一个个体结构体。
可以使用C语言中的struct关键
字来定义一个结构体。
比如可以定义一个 Employee 结构体,包括员
工ID、名字、年龄等成员变量。
使用结构体首先要通过声明来创建结构体变量,然后通过成员访
问运算符来给各成员变量赋值。
除此之外,还可以为结构体变量添加
函数,来实现具体的操作,比如计算Employee的年度工资等。
结构体是用来复杂数据的有效工具。
可以将多个不同数据类型的
成员整合在一起,极大的提高了编程效率,减少了编程代码的重复度。
在实际的项目开发中,结构体能显著提升程序的运行效率和程序结构
的可维护性。
总而言之,结构体也是C语言中重要的数据结构之一,在编程中
有极其重要的作用,因此需要用好。
C语言第9章结构体、共用体、枚举
结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
什么是结构体
什么是结构体?结构体(Struct)是一种在编程中常用的自定义数据类型,用于将不同类型的数据组合在一起。
结构体允许我们创建一个包含多个字段的复合数据类型,每个字段可以是不同的数据类型。
结构体的主要特点如下:1. 自定义数据类型:结构体允许我们创建自定义的数据类型,以便更好地表示和组织数据。
通过结构体,我们可以将多个相关的数据字段组合在一起,形成一个逻辑上的整体。
2. 字段:结构体由多个字段组成,每个字段可以是任何合法的数据类型,包括基本类型(如整数、浮点数、字符等)和其他自定义类型(如结构体、数组等)。
3. 访问字段:可以通过结构体的实例(也称为对象或变量)来访问和操作字段。
通过使用点运算符(.)和字段名,我们可以访问和修改结构体中的各个字段。
4. 内存布局:结构体的字段在内存中是按照声明的顺序依次存储的。
这意味着,结构体的字段在内存中是连续存储的,可以通过偏移量来访问每个字段的值。
5. 初始化:创建结构体实例时,可以通过提供字段的值来初始化结构体的字段。
初始化可以在创建结构体实例的同时进行,也可以在创建后逐个字段进行。
创建结构体的语法因编程语言而异,以下是一些常见的示例:在C语言中,创建一个表示学生的结构体的示例:```cstruct Student {int id;char name[50];int age;};```在C++语言中,创建一个表示点的结构体的示例:```c++struct Point {int x;int y;};```在Java语言中,使用关键字`class`来定义一个表示人的结构体的示例:```javaclass Person {int age;String name;}```在Python语言中,使用`class`关键字来定义一个表示汽车的结构体的示例:```pythonclass Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = year```通过结构体,我们可以创建结构体的实例,并访问和操作其字段。
结构体的定义规则
结构体的定义规则一、什么是结构体结构体(Structure)是一种用户自定义的数据类型,它是由一组不同类型的成员变量组成的。
通过结构体,我们可以将不同类型的数据组合在一起,形成一个整体的数据结构。
结构体可以包含多个不同类型的成员变量,每个成员变量都可以有自己的数据类型和名称,类似于一个小型的数据表或者实体。
在C语言中,结构体是一种很重要的数据类型,它可以用于表示复杂的数据结构,提高程序的灵活性和可读性。
二、结构体的定义语法结构体的定义语法如下:struct 结构体名 {成员变量1的数据类型成员变量1的名称;成员变量2的数据类型成员变量2的名称;...};三、结构体成员的访问与初始化结构体定义之后,我们可以通过结构体名加点操作符来访问结构体的成员变量。
例如,我们定义了一个名为Person的结构体,其中包含了name和age两个成员变量,我们可以使用以下方式来访问和修改结构体的成员变量:struct Person {char name[20];int age;};int main() {struct Person p;strcpy(, "Tom");p.age = 20;printf("Name: %s, Age: %d\n", , p.age);return 0;}上述代码中,我们首先定义了一个Person结构体类型的变量p,然后使用strcpy函数将字符串”Tom”复制给了,再将整数20赋值给了p.age。
最后,使用printf函数输出了结构体的成员变量。
另外,我们还可以使用结构体初始化器来为结构体的成员变量赋初值。
例如,我们可以使用以下方法来初始化上述的Person结构体:struct Person p = {"Tom", 20};四、结构体的嵌套与指针结构体可以嵌套定义,即一个结构体中的成员变量也可以是另一个结构体类型的变量。
通过结构体的嵌套,我们可以构建更复杂的数据结构。
第9章_用户建立的数据类型
第九章 结构体与共用体一、 教案头: 教学内容第九章 结构体与共用体2 学时认知目标(应知)技能目标(应会): 了解结构体的意义和基本概念 : 能够正确定义和引用结构体变量 : 能够采用指针引用结构体变量 : 能够通过指针引用结构体数组 : 使用结构体变量作函数参数 : 使用结构体指针作函数参数 : 掌握共用体的结构和特点 : 掌握枚举的结构和特点 :typedef 定义类型的意义 : 引用结构体变量成员,引用结构体数组元素的成员 : 结构体指针变量与其所指变量的关系 : 结构体指针变量作函数参数 : 通过指针引用结构体数组 : 通过指针操作字符串 : 掌握共用体变量的定义和引用 : 了解在程序中枚举的应用 : 读程序能够理解typedef 定义的类型 情感目标(理解)教学目标(重点难点)教学目标 : 培养学生自主探究学习、求真务实的品德 : 培养学生细致钻研的学风 : 培养学生努力拓展思维;理论与实际相结合的思维习惯 : 指向结构体的指针 : 结构体数组成员的引用 : 结构体变量作函数参数 : 共用体的存储特性 : 链表的结构特点和操作处理 内容概述 Ø 教材章节: 9.1 结构体类型和结构体变量 9.2 结构体数组 9.3 结构体指针 9.4 用指针处理链表 9.5 共用体类型 9.6 枚举类型 9.7 用typedef命名类型 Ø 教授内容: l 本章讲解了什么是结构体类型,以及如何使用结构类型变量、结构体数组、结构体指针,什么是共用体,它和结构体的异同,以及共用体变量的引用 l 本章还讲解了枚举类型、以及如何使用typedef命名类型 能力训练及任务案例 任务9-1: 结构体变量初始化 任务9-2:结构体数组举例 任务9-3: 指向结构体变量的指针变量示例 任务9-4: 指向结构体数组元素的指针的应用 任务9-5: 结构体变量作函数的参数示例 任务9-6: 指向结构体的指针作函数参数示例任务9-7: 建立静态链表示例 任务9-8:建立动态链表示例 任务9-9: 单链表的输出 任务9-10:共用体示例任务9-11:枚举类型示例 任务9-12:学生信息表(单链表)的基本操作参考资料C 程序设计教程,谭浩强 著,清华大学出版社,2007.07C 程序设计教程学习辅导,谭浩强 编著,清华大学出版社,2007.10 网络学堂:考试系统:无忧网络考试系统 http://10.1.89.100/webexam二、 教学设计 1.专业英语词汇 英文词汇中文名structure 结构member 成员tag 标记function 函数Enumerate 枚举 Define 定义 Union 联合(共用体) create 创建Insert 插入delete 删除Modify / update 修改 2.教学方法 引入结构体概念后采用项目拓展、实例分析引导,递进驱动。
《C语言程序设计》 课后习题答案 高等教育出版社
《C语言程序设计》课后习题答案高等教育出版社《C语言程序设计》课后习题答案高等教育出版社第一章:C语言概述1. C语言的特点C语言是一种以处理底层任务和系统编程为目标的高级编程语言。
其特点包括语法简洁、执行效率高、可移植性强等。
第二章:C语言基本数据类型1. C语言中的基本数据类型C语言中的基本数据类型包括整型、字符型、浮点型等。
整型可以进一步细分为有符号整型和无符号整型。
第三章:C语言运算符1. C语言中的运算符C语言中常见的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符等。
这些运算符用于执行各种数学和逻辑操作。
第四章:C语言控制语句1. C语言中的条件语句C语言提供了if语句和switch语句来实现条件判断。
if语句用于执行基于布尔表达式的条件分支,而switch语句用于根据不同的值执行不同的代码块。
第五章:C语言函数1. C语言中的函数定义和调用函数是C语言中的基本模块,用于封装可重用的代码。
函数定义包括函数返回类型、函数名、参数列表和函数体等部分。
第六章:C语言数组1. C语言中的数组定义和使用数组是一组相同类型的数据元素的集合。
C语言中可以使用数组来存储和操作大量数据。
第七章:C语言指针1. C语言中的指针概念指针是一种变量,它存储了内存地址。
通过指针,可以直接访问和修改对应内存地址中的数据。
第八章:C语言字符串1. C语言中的字符串操作字符串是由一系列字符组成的数据类型。
C语言通过字符数组来表示和操作字符串。
第九章:C语言结构体1. C语言中的结构体定义和使用结构体是一种自定义的复合数据类型,它可以包含多个不同类型的成员变量。
第十章:C语言文件操作1. C语言中的文件读写操作文件操作是一种重要的数据输入和输出方式。
C语言提供了一系列函数来实现文件的读写操作。
总结:通过解答以上习题,我们可以更好地掌握C语言的各个方面,提升我们的编程能力和解决问题的能力。
希望本文对读者有所帮助。
Fortran结构体PPT课件
program clerkrecord
implicit none
integer :: k, i
type clerk
! 定义结构体类型
integer num
character(15) name
real sal
end type clerk
type (clerk), dimension(150):: cl ! 定义结构体数组
TYPE STUDENT
CHARACTER(15) NAME
INTEGER
MARK
INTEGER
GRADE
END TYPE STUDENT
TYPE (STUDENT)::STRE (N)
INTEGER I, N, KEY
I=1
DO WHILE((STRE (I)%MARK.NE.KEY).AND.(I.LE.N))
i=1
do while (stre(i)% MARK <new% MARK. and. i<=N)
i=i+1
end do
do j=N, i, -1
stre(j+1)=stre(j)
end do
stre(i)=new
end
12
! 顺序查找
SUBROUTINE SORT_SEARCH(STRE, N, KEY)
read *, cl(i).sal end do do i=1, 150 if(cl(i).sal<500) then ! 打印 工资<500的职工信息 及计数
k=k+1 print*, cl(i).num, " ", cl(i).name, " ", cl(i).sal end if end do Print *, k end
派生类数据类型与结构体本章主要介绍派生类数据类
例 9.3 、学生信息包含如下数据项:姓名、性 别、学号、年龄和 5 门功课的成绩:语文、数 学、物理、化学、英语,要求输入三个学生的 记录,打印出相关信息与总成绩。 分析:学生的成绩有5门,可以将它们放在一 个名为STUDENTSCORE的结构体中,而将学生 所有记录存放在名为STUDENTRECORD的结构 体中,该结构体包含结构体STUDENTSCORE, 然后作相应处理,注意学生成绩输入语句。程 序如下:
注意:
(1)两种引用方式可以交叉使用,但为 了清晰起见,在一个程序中最好使用一 种。 (2)在含嵌套定义的结构体中,成员引 用应当嵌套使用“ %” 或“ .” ,例如,对 上面结构体 S 中成员 NUM 的引用方式为 S%STUDENT% NUM。
9.3结构体的初始化
9.3.1 利用赋值语句给结构体成员赋值 下面看一个完整的例子: 例9.1 某单位职工工资表包含的记录有: 姓名、性别、家庭住址、工资等项,现 计算三个职工工资的平均值。程序如下:
PROGRAM XUESHENGJILU REAL AVER1,AVER2,AVER3 TYPE STUDENTSCORE REAL CHINESE REAL MATH REAL PHYSICS REAL CHEMISTRY REAL ENGLISH END TYPE
TYPE STUDENTRECORD CHARACTER (17)NAME LOGICAL SEX INTEGER NUMBER INTEGER BIRTHDAY TYPE(STUDENTSCORE)::SCORE END TYPE TYPE(STUDENTRECORD)::S1,S2,S3 PRINT*,"请输入3个学生的姓名" READ*,,, PRINT*,"请输入3个学生的性别" READ*,S1.SEX,S2.SEX,S3.SEX PRINT*,"请输入3个学生的学号" READ*,S1.NUMBER,S2.NUMBER,S3.NUMBER PRINT*,"请输入3个学生的年龄" READ*,S1.BIRTHDAY,S2.BIRTHDAY,S3.BIRTHDAY
c语言程序设计双色版答案
c语言程序设计双色版答案C语言程序设计是计算机科学与技术专业的基础课程之一,通过学习该课程,学生可以掌握C语言的基本语法和编程技巧。
本文将针对C语言程序设计的双色版答案进行详细的讲解。
以下是各章节的答案内容:第一章:C语言概述与开发环境1. C语言是一种通用的高级程序设计语言,具有良好的可移植性和高效性。
2. 开发环境包括编译器、集成开发环境(IDE)等,可以根据个人习惯选择适合自己的开发环境。
第二章:C语言基本语法和数据类型1. C语言的基本语法包括标识符、关键字、运算符、表达式、语句和注释等。
2. 数据类型分为基本数据类型(整型、浮点型、字符型)和派生数据类型(数组、结构体、枚举、指针)。
第三章:C语言运算符和表达式1. 运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符等。
2. 表达式是由运算符、操作数和运算符优先级组合而成的。
第四章:C语言流程控制1. 流程控制分为顺序结构、选择结构和循环结构。
2. 选择结构包括if语句、switch语句,循环结构包括while循环、do-while循环和for循环。
第五章:C语言函数1. 函数是一段完成特定任务的独立代码块,可以重复使用。
2. 函数的定义包括函数名、参数、返回值类型和函数体。
第六章:C语言数组1. 数组是一组相同类型的元素集合,可以通过下标访问元素。
2. 数组可以是一维数组或多维数组,使用二维数组可以表示矩阵等数据结构。
第七章:C语言指针1. 指针是保存内存地址的变量,可以用于操作内存中的数据。
2. 指针的操作包括取地址操作、指针运算、指针与数组的关系等。
第八章:C语言字符和字符串处理1. 字符是编程语言中的基本单元,可以用于表示文本和符号等。
2. 字符串是字符的数组,可以用于表示文本、姓名等较长的数据。
第九章:C语言结构体与共用体1. 结构体是将不同类型的数据组合在一起形成一个新的数据类型。
2. 共用体是一种特殊的数据类型,不同成员共享同一块内存地址。
第九章数组
第九章结构体与链表9.1结构体类型的定义❑程序设计者自己定义的数据类型❑包含若干成员,各成员可有不同的数据类型(与数组的区别)❑结构体类型定义struct 结构体名{ 类型标识符成员名1;类型标识符成员名2;…………….类型标识符成员名n;};大括号内为成员说明列表❑如,处理学生成绩数据,每个学生有三门课程的成绩、总成绩等变量。
struct student{long num; /*学号*/char name[10]; /* 姓名*/int score1; /* 成绩*/int score2;int score3;int total; /*总成绩*/};这样,student就是一个新的结构数据类型,可用它定义变量struct student a1, a2; 注意:struct不能省略结构体就是一个专有名词,代表一类事物,如:学生,教师,汽车等,是泛指结构体成员是描述该类事物的指标,如:学生的学号,名字,成绩等结构体变量是该类事物的一个具体事例,每个事例都具有全部成员,如每个学生都有学号,名字,成绩等9.2 结构体类型变量的定义1 先定义结构体类型,再定义变量如:struct student{ long num; /* 学号*/char name[10];/* 姓名*/int score1;/* 成绩*/int score2;int score3;int total; /* 总成绩*/};struct student a1, a2;注意:struct不能省略2 定义类型的同时定义变量struct student{ long num; /* 学号*/char name[10];/* 姓名*/int score1;/* 成绩*/int score2;int score3;int total; /* 总成绩*/} a1, a2;3 直接定义结构体类型变量struct{ long num; /* 学号*/char name[10];/* 姓名*/int score1;/* 成绩*/int score2;int score3;int total; /* 总成绩*/} a1, a2;每个结构体变量都拥有结构体的全部成员9.2.2 结构变量的引用❑结构变量的引用是通过引用其成员(分量)的形式来实现的,格式为: 结构变量名.结构成员名❑若定义了struct student a1, a2; 就可以使用其成员a1.num=00001;a2.num=00002;strcpy(, “John”);strcpy(, “Andrew”);a1.total=a1.score1+a1.score2+a1.score3;❑每个结构成员都可当做一个变量来使用,类型为在定义结构时所指定的数据类型❑结构变量的成员使用方法与普通内存变量没有区别。
9.结构体
对结构体变量初始化. 例 对结构体变量初始化 #include <stdio.h> void main() () {struct student { int num; ; char name[20]; char sex; ; char addr[20]; ;
运行结果: 运行结果: No.:10101 : name:LiLin : sex:M :M address:123 Beijing Road :
}a={10101,〃LiLin〃,′M′,〃123 Beijing Road〃}; , , , };
/* 对结构体变量 赋初值 对结构体变量a赋初值 赋初值*/ printf(〃No.:%d\nname:%s\nsex:%c\naddress:%s\n〃, , a.num,,a.sex,a.addr); , , , }
例 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"};
形式二:(用的最多)
num 2字节
… …..
name sex age score
20字节 1字节 2字节 4字节
addr
30字节
(2)在声明类型的同时定义变量 (2)在声明类型的同时定义变量 这种形式的定义的一般形式为: 这种形式的定义的一般形式为: struct 结构体名 { 成员表列 变量名表列; }变量名表列;
* Num/ name sex age Month §图11-3 day year
定义结构体
定义结构体
结构体是一种用来定义综合数据类型的数据结构,它通过定义不同类型的数据构成元素,来表示一个单独的数据结构。
结构体是以一定的结构作为组成部分,其中包含一组特定数据类型的构成成员,其中可能包含结构体变量、数组和结构体变量的指针。
结构体的组成部分一般分为六种:结构体变量、数组、结构体变量的指针、结构体函数、结构体成员和结构体指针。
首先介绍结构体变量,结构体变量是一种存储特定数据类型的容器,它将某些值或者对象的拟合一起,可以让我们将数据归类为一个单独的结构体。
结构体变量的组成成员可以定义为不同的数据类型,如整型、字符型、浮点型、指针型等。
其次介绍数组,数组是由多个相同类型的数据元素组成的,它用于存储结构体中的多个变量的值,可以用一个变量进行统一管理。
数组可以是静态的,也可以是动态的,其大小可以在程序中改变,以满足要求。
再有就是结构体变量的指针,它包括结构体变量指针(struct pointer),数组指针(array pointer),以及函数指针(function pointer)。
结构体变量指针指向结构体变量,可以通过它访问结构体变量的值、类型和维度;数组指针指向特定的数组,可以通过它访问数组元素;而函数指针则是指向特定函数的指针,其使用的方式还有可能结合函数参数。
- 1 -。
C语言结构体习题及答案
第9章结构体1.定义以下结构体类型struct s{int a;char b;float f;};则语句printf("%d",sizeof(struct s))的输出结果为【】。
A) 3 B) 7 C) 6 D) 42.当定义一个结构体变量时,系统为它分配的内存空间是【】A)结构中一个成员所需的内存容量B)结构中第一个成员所需的内存容量C)结构体中占内存容量最大者所需的容量D)结构中各成员所需内存容量之和3.定义以下结构体类型struct s{ int x;float f;}a[3];语句printf("%d",sizeof(a))的输出结果为【】A) 4 B) 12 C) 18 D) 6 7.定义以下结构体类型struct student{char name[10];int score[50];float average;}stud1;则stud1占用内存的字节数是【】。
A) 64 B) 114 C) 228 D) 79、设有一结构体类型变量定义如下:struct date{ int year;int month;int day;};struct worklist{ char name[20];char sex;struct date birthday;} person;若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
A. year=1976B. birthday.year=1976C. person.birthday.year=1976D. person.year=19761、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。
struct abc s1,s2;则会发生的情况是______。
A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错。
C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。
结构和联合.ppt
9.2 结构体数组
当表示(存储)一组同类型的数据时可以采用数组
9.2.1 结构体数组的定义 struct student a[10];
9.2.2 结构体数组的初始化 struct student a[3]={{……},{……},{……}};
9.2.3 结构体数组的元素引用 struct student a[10];
struct node *search(struct node *head,int m) { /*在带头节点的单链表中查找值为m的节点 */
struct node *p; p=head->next; while(p!=NULL && p->data!=m)
p=p->next; return p; }
s=0.0; for(j=0;j<3;j++)
s+=a[i].score[j]; a[i].sum=s; a[i].aver=s/3; } }
int main() {
struct student a[2]; in0(a,2); pp(a,2); out0(a,2); }
9.5 引用自身的结构
一般来说,都应该遵循先定以后使用的原则,但在 结构体中可以引用自身(此时自身还没定义好),引用 只能采用指针不能使用结构变量
int x; struct node *h,*r,*f; h=r=(struct node *)malloc(sizeof(struct node)); scanf("%d",&x); while(x){
f=(struct node *)malloc(sizeof(struct node)); f->data=x; r->next=f; r=f; scanf("%d",&x); } r->next=NULL; return h; } void printlink(struct node *head) /*输出带头节点的单链表*/ { struct node *p; p=head->next; while(p!=NULL){ printf("%6d",p->data); p=p->next; } printf("\n"); }
结构体的定义和使用
结构体的定义和使用结构体是一个数据结构,它由变量和类型组成,构成一个数据类型,它可以让你把多种类型的数据集中在一起。
它可以帮助我们更容易地维护和操作数据。
在一些编程或脚本语言,结构体都可以用来组织和管理数据。
使用结构体的主要优点之一是可读性和可维护性,例如如果一组数据是被用来存储联系人信息,结构体就可以将联系人的姓名,地址,电话号码和电子邮件地址组织起来,从而更容易保存,读取和维护信息。
结构体也可以和一些函数相关联,可以用函数完成一些任务。
在C语言编程中,定义结构体非常简单,只需在前面添加struct关键字,然后在括号中定义它们的结构元素,每一个子句都是一个名称和类型的组合。
例如:struct student{char name[20];int age;float score;}先定义一个叫student的结构体类型,里面有name,age,score三个变量,其中name是字符串,age是整数,score是小数。
现在可以通过给struct student类型进行实例化,即定义结构体变量来使用它了,例如,使用以下语句创建一个叫stu的变量:struct student stu;这个变量就拥有结构体中申明变量的类型,也就是name,age,score三个变量,可以通过如下方式访问它们:;stu.score;stu.age;给结构体的变量赋值也是非常简单的:strcpy(, "Jack"); // 赋值stu.age = 20;//stu.age赋值stu.score = 90.5;//stu.score赋值也可以使用初始化列表来为结构体实例变量进行初始化:struct student stu = {"Jack", 20, 90.5};结构体也可以和函数挂钩,可以定义一些函数来操作结构体变量:void modify_age(struct student *stu, int age){stu->age = age;}结构体可以帮助你更容易地管理数据,而函数可以帮你把细节抽象出来管理,可以使程序更可靠,更容易维护。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、概念题F T T T F T T二、判断题1. 结构体中的成员不可以单独使用(F)。
2. 成员名可以与程序中的变量名相同,二者不代表同一对象(T)。
3. 不能将一个结构体变量作为一个整体进行输入输出(T )。
4. 结构体变量所占内存长度是各成员占的内存长度之和(T )。
5. 结构体中的成员不可以单独使用(F)。
9. 一个结构体变量的指针就是该变量所占内存段的起始地址(T)。
10. 用结构体变量作实参,形参也必须是同类型的结构体变量(T)。
三、单选题1. 设变量定义如下,则对其中的结构分量num正确的引用是( )。
struct student {int num ;char name[20];float score;} stud[10];A. stud[1].num=10;B. student.stud.num=10;C. struct.stud.num=10;D. struct student.num=10;2. 已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是()。
struct worker{int no;char name[20];char sex;struct birth{ int day; int month; int year;}a;};struct worker w;A day=25;month=10;year=1993;B w.birth.day=25; w.birth.month=10; w.birth.year=1993;C w.day=25; w.month=10; w.year=1993;D w.a.day=25; w.a.month=10; w.a.year=1993;3. 对于以下的变量定义,语句( )在语法和语义上都是正确的。
struct node {float x,y;char s[10];} point={1,2,”abc”},*p;A. *p=point;B. p=&point;C. point=p;D. p->x=point.y;4. 设有以下语句typedef struct S{ int g;char h;} T;则下面叙述中正确的是()。
A. 用S定义结构体变量B. 可以用T定义结构体变量C. S是struct类型的变量D. T是struct S类型的变量5. 设有如下说明typedef struct na{ int n; char c; double x;}STD;则以下选项中,能正确定义结构体数组并赋初值的语句是()。
A. STD tt[2]={{1,'A',62},{2, 'B',75}};B. STD tt[2]={{1,"A",62},2, "B",75};C. struct tt[2]={{1, 'A'},{2, 'B'}};D. struct tt[2]={{1,"A",62.5},{2, "B",75.0}};6. 若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是()。
A. typedef STP char *s;B. typedef *char STP;C. typedef stp *char;D. typedef char* STP;7. 设有如下定义:struct ss{ char name[10];int age;char sex;}std[3],*p=std;下面各输入语句中错误的是()。
A. scanf("%d",&(*p). age);B. scanf("%s",&std.n ame);C. scanf("%c",&std[0].sex)D. scanf("%c",&(p-> sex));8. 以下程序执行后输出结果是()。
main(){ union { unsigned int n;unsigned char c;}u1ul.c=’A’;printf("%c\n",u1.n);}A. 产生语法错B. 随机值C. AD. 65四、程序填空题1. 运行以下程序将打印出如下结果:#define NULL 0 struct person { char *nam; char sex;struct person *next;}; main(){ struct person a,b,c,d,*head,*s; a.nam="Li ming"; a.sex='W'; b.nam="Hang kai"; b.sex='M'; c.nam="Liu fei"; c.sex='M'; d.nam="Fang ke"; d.sex= 【1】’w ’ ; head=&a;a.next= 【2】 &b;b.next= 【3】&d ; d.next=NULL; s=head; do{printf("%s :【4】 %c \n",s->nam,s->sex); s=s->next; }while(s!=NULL); }2. 以下程序中给指针p 分配三个double 型动态内存单元,请填空。
# include <stdlib.h> main ( ) { double *p;p=(double *) malloc(【1】sizeof(double)); p[0]=1.5;p[1]=2.5;p[2]=3.5; printf("%f%f%f\n",p[0],p[1],p[2]); }3. 已知结构数组person 中存有N 个人员的姓名和年龄,以下程序的功能为输出数组中最大者的姓名和年龄。
请填空: #define N 3 struct man{char name[20];int age;};struct man find(struct man *p ,int n) {struct man *q; int i; q=p;Li ming: W Hang kai: M Fang ke: Wfor(i=0;i<n;i++){if( p->age>q->age【5】)q=p;p++;}return q;}main(){ struct man *p, *q;struct man person[N]={“zhang”,27,”li”,18,”wang”,73};p=person;q= 【6】find(p,N) ;printf(“年龄最大者为:%s,其年龄为:%d\n”,q->name, q->age【7】)}4.已知head指向一个带头结点的链表,链表中每个结点包含整型数据域(data)和指向链表结点的指针域(next),以下函数返回链表中所有结点数据域之和,请填空:struct list{ int data;struct list *next;};main(){struct list *head;int s;s=sum(head);}sum( struct list *h 【5】){struct list *p;int s=0;p=h->next;while(p!=NULL){s= p->date 【6】;p= p->next 【7】;}return s;}5.下列程序读入时间数值,将其加1秒后,输出,时间格式为hh:mm:ss,即时:分:秒。
当小时等于24小时,置为0。
#include<stdio.h>struct{int hour;int minute;int second;}time;main(){scanf(“%d:%d:%d”, &time.hour,&time.minute,&time.second【1】); time.second++;if(【2】time.second==60){time.minute++;【3】time.second=0;if(time.minute==60){time.hour++;time.minute=0;if(time.hour==24)time.hour=0;}}printf(“%d:%d:%d\n”,time.hour,time.minute,time.second);}6.下列函数用于将链表中各结点的数据依次输出。
请填空:struct student{int data;struct student *next;}void out(struct student *head){【8】struct student *p;p=head;if(head!=NULL)do{printf(“%d\n”,p->data);【9】P->next;}while(【10】p!=NULL);}五、程序阅读题1. 以下程序执行后输出结果:2041 2044struct STU{ char name[10];int num; };void f1(struct STU c){ struct STU b={"LiSiGuo",2042};c=b;}void f2(struct STU *c){ struct STU b={"SunDan",2044};*c=b;}main( ){ struct STU a={"YangSan",2041},b={"WangYin",2043};f1(a);f2(&b);printf("%d %d\n",a.num,b.num);}2. 以下程序执行后输出结果是:580 550struct STU{ char name[10];int num;int Score;};main( ){ struct STU s[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580},{"wangYin",20043,680},{"SunDan",20044,550},{"Penghua",20045,537}},*p[5],*t;int i,j;for(i=0;i<5;i++) p[i]=&s[i];for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(p[i]->Score>p[j]->Score){ t=p[i];p[i]=p[j];p[j]=t;}printf("5d %d\n",s[1].Score,p[1]->Score);}3. 以下程序的运行结果是:。