第九章 结构体

合集下载

c程序设计 第九章 结构体

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语言 第九章 结构体数据类型期末测试习题与答案

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章结构体、共用体、枚举

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章_用户建立的数据类型

第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语言程序设计》课后习题答案高等教育出版社第一章: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课件

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语言程序设计的双色版答案进行详细的讲解。

以下是各章节的答案内容:第一章: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.结构体

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语言结构体习题及答案

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

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

结构和联合.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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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. 以下程序的运行结果是:。

相关文档
最新文档