第11章_结构体

合集下载

C#程序设计 第11章 结构体、联合体与位运算

C#程序设计  第11章  结构体、联合体与位运算

第11章结构体、联合体与位运算本章介绍结构体、联合体及枚举类型等三种新的构造型数据类型以及位运算的基本方法,包括结构体的含义;结构体类型变量的定义、引用及初始化方法;结构体数组的定义和数组元素的引用;结构体类型指针的概念及链表的基本操作方法;联合体的含义;联合体类型变量的定义方法;枚举类型的定义; TYPEDEF的作用和位运算的基本方法等。

11.1 结构体类型通过前面有关章节的学习,我们认识了整型、实型、字符型等C语言的基本数据类型,也了解了数组这样一种构造型的数据结构,它可以包含一组同一类型的元素。

但仅有这些数据类型是不够的。

在实际问题中,有时需要将不同类型的数据组合成一个有机的整体,以便于引用。

例如,在新生入学登记表中,一个学生的学号、姓名、性别、年龄、总分等,它们属于同一个处理对象,却又具有不同的数据类型。

如图11-1。

每增加、删减或查阅一个学生记录,都需要处理这个学生的学号、姓名、性别、年龄、总分等数据,因此,有必要把一个学生的这些数据定义成一个整体。

图11-1虽然数组作为一个整体可用来处理一组相关的数据,但不足的是,一个数组只能按序组织一批相同类型的数据。

对于一组不同类型的数据,显然不能用一个数组来存放,因为数组中各元素的类型和长度都必须一致。

为了解决这个问题,C语言中给出了另一种构造数据类型——“结构体”。

11.1.1 结构体类型与结构体变量结构体是一种构造类型,它由若干“成员”组成。

每一个成员可以是一个基本数据类型或者又是一个构造类型。

结构体既然是一种构造而成的数据类型,那么在使用之前必须先定义它,如同在调用函数之前要先定义或声明一样。

定义一个结构体类型的一般形式为:struct 结构体名{ 成员1 类型1;成员2 类型2;...成员n 类型n;};“结构体”这个词是根据英文单词structure译出的。

结构体中的每个成员均须作类型说明,成员名的命名应符合标识符的书写规定,成员名可以与程序中的变量名同名,二者不代表同一对象,互不干扰。

C语言程序设计教学大纲

C语言程序设计教学大纲

《C语言程序设计》教学大纲(总11页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《C语言程序设计》教学大纲课程名称:中文名称:C语言程序设计;英文名称:C Language Programming课程编码:161002学分:分总学时:72学时,其中,理论学时:52学时;上机学时:20学时。

适用专业:全校理工科各专业先修课程:计算机基础执笔人:审订人:一、课程的性质与任务《C语言程序设计》是为全校所有的理工科专业的学生开设的公共基础课,也是一门重要的必修课。

其目的是使学生掌握程序设计的基本方法,培养学生掌握利用计算机处理问题的思维方法与应用能力。

要求学生掌握程序的三种基本结构及结构化的程序设计方法,了解并掌握几种典型的算法,并且能够熟练地运用C语言编写各种应用程序,为进一步学习其它相关课程奠定基础。

二、教学内容与学时分配第一章程序设计基本概念 (3学时)本章重点:一、算法及特性;二、结构化程序设计方法。

难点:算法设计及其表示。

第一节程序和程序设计一、程序;二、程序设计。

第二节算法第三节结构化程序设计方法第四节 C语言程序的基本结构第二章数据类型、运算符和表达式 (5学时)本章重点:一、标识符的正确使用;二、各种基本数据类型的使用;三、算术运算符的优先级和结合性;四、表达式计算中的类型转换。

难点:一、各种类型数据在计算机内存中的存储形式;二、自增自减运算。

第一节 C语言的数据类型第二节常量与变量第三节整型数据第四节实型数据第五节字符型数据第六节算术运算符与算术表达式第七节赋值运算符与赋值表达式一、赋值运算符和赋值表达式;二、复合的赋值表达式;三、自加、自减运算符;四、赋值运算中的类型转换。

第八节逗号运算符与逗号表达式第三章顺序结构程序设计 (4学时)本章重点:一、printf函数;二、scanf函数。

难点:输入与输出时的格式控制。

第一节 C语句概述第二节赋值语句第三节数据的输入与输出一、printf函数;二、putchar函数;三、scanf函数;四、getchar函数第四节顺序结构程序举例第四章选择结构程序设计 (4学时)本章重点:一、逻辑值的表示、使用及其运算;二、关系运算符的运算规则及关系表达式;三、逻辑运算符的运算规则及逻辑表达式;四、if语句;五、switch语句的形式与执行过程。

C语言第11章结构体

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;

课后习题及答案

课后习题及答案



8、按岩体力学的观点,岩体具有什么样 的力学特征? 答:非均质、非连续、各向异性。
第2章 习题 解释下例名词术语 1、岩石的水理性质 2、岩石的空隙度 3、岩石的空隙比
4、岩石的吸水:
5、岩石的饱水率 6、岩石的饱水系数 7、岩石的软化系数 8、岩石的抗冻系数
第2章 习题 1、岩石的水理性质:岩石在水溶液作 用下表现出来的性质,称为水理性质 ,主要有吸水性、软化性、抗冻性及 渗透性等。 2、岩石的空隙度:指岩石的裂隙和孔 隙发育程度,其衡量指标为空隙率(n) 。3、岩石的空隙率:岩石试件内空隙 的体积(VV)占试件总体积(V)的百分比 。
第1章 习题
解释下例名词术语






9、节理张开度:指节理面两壁间的垂直距离。 10、岩体:岩体是指在地质历史过程中形成的, 由岩块和结构面网络组成的,具有一定的结构,赋存 于一定的天然应力状态和地下水等地质环境中的地质 体。 11、结构体:岩体中被结构面切割围限的岩石块 体。 12、岩体结构:岩体中结构面与结构体的排列组 合特征。 13、岩体完整性系数Kv:其是指岩体纵波速度和 岩块纵波速度之比的平方。 14、岩石质量指标RQD:大于10cm的岩芯累计 长度与钻孔进尺长度之比的百分数。



9、岩石的记忆:每次卸载后再加载到原来的应力 后继续增加荷载,即逐级循环加载,则新的加载曲线 段将沿着卸载前的加载曲线方向上升的形象。 10、反复循环:在低于弹性极限的恒定应力下反 复加载、卸载。 11、逐级循环:每次卸载后再加载到原来的应力 后继续增加荷载。 12、疲劳强度:岩块在高于弹性极限的某一应力 下反复加载、卸载时将导致试件进一步的变形,发生 破坏时的应力低于单轴抗压强度,这一应力称为疲劳 强度。 13、岩石的流变性:岩石的变形和应力受时间因 素的影响,在外部条件不变的情况下,岩石的变形或 应力随时间而变化的现象叫流变。 14、蠕变:岩石在恒定的荷载作用下,变形随时 间逐渐增大的性质。

第十一章结构体的试题

第十一章结构体的试题

(1)()是关于C语言数据类型的正确叙述。

A) 枚举类型不是基本类型B) 变量使用前应定义相应的数据类型C) 不允许使用空类型D) 数组不是构造类型(2) 下列()对结构类型变量定义是错误的。

A) struct teacher{ int num;int age;};struct teacher teach1;B) struct{ int num;int age;} teach1, teach2;C) struct{ int num;int age;} teacher;struct teacher teach1;D) struct teacher{ int num;int age;} teach1;(3) 若有定义:char ch;int j,k;enum day {sun, mon, tue, wed, thu, fri, sat};int a[sat];则()对下列语句是否符合语法规则的判断是正确的。

sun=0; /*语句1*/j=mon+tue; /*语句2*/if (a[mon]>0) j++; /*语句3*/A) 语句1、2、3均正确B) 语句2正确,语句1和语句3错误C) 语句1错误,语句2和语句3正确D) 语句1、2、3均错误(4) 若有定义:struct teacher{ int num;char sex;int age;} teacher1;则下面叙述错误的是()。

A) teacher1是结构类型名B) struct teacher是用户定义的结构类型C) num、sex、age都是结构变量teacher1的成员D) struct是结构类型的关键字(5) 下列程序段运行后,表达式()的值为3。

struct point{ int x;int y;} *p;struct point a[3]={1,2,3,4,5,6};p=a;A) p[1].xB) *(p+2)C) p[3].xD) p[2].x(6) 若有定义:typedef int NUM[100];NUM n;则()语句是正确的。

C语言程序设计(姜学峰版)PPT课件第十一章

C语言程序设计(姜学峰版)PPT课件第十一章

8
5)定义结构体类型仅仅声明了一种数据结构,编译 系统不会为类型分配存储空间的;此时可用已定 义的结构体类型去定义结构体变量或数组,编译 系统将为结构体变量分配存储空间;
9
2. 定义结构体类型的变量 有三种方法: 1)先定义结构体类型,再用类型标识去定义变量 struct student stu1, stu2; struct student是已定义的结构体类型标识符; stu1、stu2是所定义的结构体变量;编译时将为 结构体变量分配各自的存储空间; 2)定义类型的同时定义变量 struct student { …; …; } stu1, stu2;
18
5. 结构体变量的指针、结构体成员的指针 注:&优先级为2级,低于.和[ ]; stu1 变量stu1的指针:&stu1 图示: num
num成员指针:&stu1. num
4
20 1
name第i个元素指针:&stu1. name[i]
name sex m

birthday d 最低级成员y的指针:&stu1.birthday.y y score
5
例:定义可表示学生基本情况的结构体类型。
项目: 学号 姓名 性别 出生日期 成绩 电话号码 数据: 010510 Li Feng M 1981.5.4 680 029-8482500
类型: 长整/字串 字串
字符
字串
整型
字串
struct student /*结构体类型标识*/ { long num; char name[20]; char sex; char birthday[12]; float score; char tel[15]; };

第11章 结构体与共用休

第11章   结构体与共用休

定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
num
25B
name sex age num
name sex age
stu[0]
stu[1]
结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,„M‟,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,„M‟,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,„M‟,19, int age; }stu[ ]={{……},{……},{……}}; 101,“Li Gang”,„M‟,19}, strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,„F‟,19}; }str[3]; 110,“Liu Yan”,„域

第11章++硬件描述语言VHDL简介

第11章++硬件描述语言VHDL简介

实体部分最核心的内容是由关键字port引导的端口说明。A和B是输入引脚,使 用了关键字in来描述。Bit的意思是指A和B的数据类型是位类型。位类型数据只可取 0和1这两个数值。S和CO是输出信号,用out来描述,数据类型也是bit型。 实体说明的是部件的名称和端口信号类型,它可以描述小至一个门,大到一个复杂 的CPU芯片、一块印制电路板甚至整个系统。实体的电路意义相当于器件,在电路 原理图上相当于元件符号,它是一个完整的、独立的语言模块,并给出了设计模块 和外部接口。 具体语法如下: entity 实体名 is ——实体名自选,通常用反映模块功能特征的名称 port(端口名称1:端口方式1 端口类型1; 端口名称2:端口方式2 端口类型2;…); end 实体名; ——这里的实体名要和开始的实体名一致 其中端口方式可以有5种,分别是: in:输入端口,信号从该端口进入实体。 out:输出端口,信号从实体内部经该端口输出。 inout:输入输出(双向)端口,信号既可从该端口输入也可从该端口输出。 buffer:缓冲端口,工作于缓冲模式。 Linkage:无指定方向,可与任何方向的信号连接。
(2)用户自定义的数据类型 VHDL语言允许用户自定义数据类型。其书写格式为: type 数据类型名 is 数据类型定义; 例如: type digit is integer range 0 to 9; ——定义digit的数据类型是0~9的整 数 可由用户定义的数据类型有: 枚举(Enumerated)类型; 整数(Integer)类型; 实数(Real)、浮点数(Floating)类型; 数组(Array)类型; 存取(Access)类型; 文件(File)类型; 记录(Record)类型; 时间(Time)类型(物理类型)。
11.1 VHDL语言基础

预处理命令与结构体练习题答案

预处理命令与结构体练习题答案

第11章结构体与共用体一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。

)11.1 C语言结构体类型变量在程序运行期间A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元B)所有的成员一直驻留在内存中C)只有最开始的成员驻留在内存中D)部分成员驻留在内存中考生答案: 正确答案: B11.2 下列各数据类型不属于构造类型的是A)枚举型 B)共用型 C)结构型 D)数组型考生答案: 正确答案: A11.3 当说明一个结构体变量时系统分配给它的内存是A)各成员所需内存量的总和 B)结构中第一个成员所需内存量C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量考生答案: 正确答案: A11.4 设有以下说明语句typedef struct{ int n;char ch[8];} PER;则下面叙述中正确的是A)PER 是结构体变量名 B)PER是结构体类型名C)typedef struct 是结构体类型 D)struct 是结构体类型名考生答案: 正确答案: B11.5 已知有如下定义:struct a{char x; double y;}data,*t;,若有t=&data,则对data 中的成员的正确引用是A)(*t).data.x B)(*t).x C)t->data.x D)t.data.x 考生答案: 正确答案: B11.6 以下程序的运行结果是#include "stdio.h"main(){ struct date{ int year,month,day; } today;printf("%d\n",sizeof(struct date));}A)6 B)8 C)10 D)12考生答案: 正确答案: A11.7 设有如下定义:struck sk{ int a;float b;} data;int *p;若要使P指向data中的a域,正确的赋值语句是A)p=&a; B)p=data.a; C)p=&data.a; D)*p=data.a; 考生答案: 正确答案: C11.8 以下对结构体类型变量的定义中,不正确的是A)typedef struct aa{ int n;float m;} AA;AA tdl;B)#define AA struct aaAA { int n;float m;} tdl;C)struct{ int n;float m;} aa;struct aa tdl;D)struct{ int n;float m;} tdl;考生答案: 正确答案: C11.9 若有下面的说明和定义struct test{ int ml; char m2; float m3;union uu { char ul[5]; int u2[2];} ua;} myaa;则sizeof(struct test )的值是A)12 B)16 C)14 D)9考生答案: 正确答案: A11.10 以下程序的输出是struct st{ int x; int *y;} *p;int dt[4]={ 10,20,30,40};struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};main(){ p=aa;printf("%d\n",++(p->x));}A)10 B)11 C)51 D)60考生答案: 正确答案: C11.11 有以下程序:#include <stdio.h>union pw{ int i;char ch[2];}a;main(){ a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}程序的输出结果是A)13 B)14 C)208 D)209 考生答案: 正确答案: A11.12 已知学生记录描述为:struct student{ int no;char name[20],sex;struct{ int year,month,day;} birth;};struct student s;设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是A)year=1984;month=11;day=12;B)s.year=1984;s.month=11;s.day=12;C)birth.year=1984;birth.month=11;birth.day=12;D)s.birth.year=1984;s.birth.month=11;s.birth.day=12;考生答案: 正确答案: D11.13 有如下定义struct person{char name[9];int age;};struct person class[10]={"John",17,"paul",19,"Mary",18,"Adam",16,};根据上述定义,能输出字母M的语句是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]);考生答案: 正确答案: B11.14 下列程序的输出结果是struct abc{ int a, b, c, s; };main(){ struct abc s[2]={{1,2,3},{4,5,6}}; int t;t=s[0].a+s[1].b;printf("%d\n",t);}A)5 B)6 C)7 D)8考生答案: 正确答案: B11.15 若有下面的说明和定义,则sizeof(struct aa)的值是struct aa{ int r1; double r2; float r3;union uu{char u1[5];long u2[2];}ua;} mya;A)30 B)29 C)24 D)22考生答案: 正确答案: D11.16 有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。

c语言2019课外作业4

c语言2019课外作业4
2019 C 语言课外作业 四
第 8、9、11 章 结构体、指针、文件练习题
一、选择题 1.下面对结构数据类型的错误叙述是______。
A.结构变量可以在说明结构类型后定义,也 可在说明结构时定义。
B.结构可由若干个成员组成,各成员的数据 类型可以不同。
C.定义一个结构类型后,编译程序要为结构 的各成员分配存储空间。
s2 的长,函数值为 1,否则函数值为 0
B.FILE *fp ; fp = fopen( "file1.txt" , "r+" ) ;
15.下列关于 C 语言数据文件的叙述中正确的是
C.FILE *fp ; fp = fopen( "file1.txt" , "rb" ) ;
_______。
D.FILE *fp ; fp = fopen( "file1.txt" , "rb+" ) ;
A.printf( "%c\n" , stu[2].name ) ; B.printf( "%c\n" , stu[2].name[1] ) ; C.printf( "%c\n" , stu[1].name[1] ) ; D.printf( "%c\n" , stu[1].name[0] ) ; 6.若已定义 int a = 5 ; 下面对 ①、② 两个语句的 正确解释是_______。 ① int *p = &a ; ② *p = a ; A.语句①和②中的*p 含义相同,都表示给指
24.读取二进制文件的函数调用形式为:
exit( 0 ) ; }
fread( buffer , size , count , fp ) ;其中参数 buffer

c语言char11

c语言char11
类型标识符
方式二:可以在说明结构体时真接定义变量, 方式二:可以在说明结构体时真接定义变量,如: struct student{ int num; char name[20]; …} s1, s2, b[10], *p; 方式三:可在说明一个无名结构体类型时, 方式三:可在说明一个无名结构体类型时,同时直接定义变 。(此方式只可在不再需要定义此类型变量的场合下 量。(此方式只可在不再需要定义此类型变量的场合下 使用) 使用) struct { int num; char name[20]; …}s1, s2, b[10], *p;
name “ Li Lin”
sex ‘M’ year 1982
birthday month 12 day 4
score 85.5
a
二、对结构体变量的成员操作: 对结构体变量的成员操作:
结构体变量中的每个成员都属于某个具体的数据类型。因此, 结构体变量中的每个成员都属于某个具体的数据类型。因此, 对结构体变量中的每个成员的操作与普通变量一样, 对结构体变量中的每个成员的操作与普通变量一样,包括 输入输出。换句话说,如果某个成员是某基本类型, 输入输出。换句话说,如果某个成员是某基本类型,就可 以将该成员作为基本类型变量来处理。 以将该成员作为基本类型变量来处理。 例: scanf(“%ld %ld”,&a.num); /*长整型量输入 长整型量输入* scanf( %ld ,&a.num); /*长整型量输入*/ gets(); /*字符串输入 字符串输入* gets(); /*字符串输入*/ sex=ˊMˊ; /*字符变量赋值 字符变量赋值* a.sex=ˊMˊ; /*字符变量赋值*/ score=93 93. /*实型变量赋值 实型变量赋值* a.score=93.5; /*实型变量赋值*/ (i=0 name[i]!=ˊ\ for (i=0;[i]!=ˊ\0ˊ;i++) printf(“% ,a name[i]); ,a. /*输出字符值 输出字符值* printf( %c”,[i]); /*输出字符值*/ sum=sum+a.score;

第十一章 平面机构运动简图及其自由度

第十一章 平面机构运动简图及其自由度

11.3 平面机构的自由度及具有确定运动的条件 MACHINE
一般在高副接触处,若有滚子存在,则滚子绕自身轴线
转动的自由度属于局部自由度,采用滚子结构的目的在于 将高副间的滑动摩擦转换为滚动摩擦,以减轻摩擦和磨损。
3、虚约束 对机构的运动不起独立限制作用的约束称为虚约束。如图a
所示为机车车轮联动机构,图b为其机构运动简图。
11.3 平面机构的自由度及具有确定运动的条件 MACHINE
• 2、局部自由度 不影响机构中其它构件相对运 动的自由度称为局部自由度。 如右图所示 。 在计算机构的自由度时,局部 自由度不应计入。
如图所示的凸轮机构中,自由度计算为:
n=2、PL=2(PL≠ 3)、 PH=1,则 F=3n-2PL-PH=3×2-2×2-1=1。
去两个自由度;每个高副引入一个约束,使构件失去一个
自由度。
11.3 平面机构的自由度及具有确定运动的条件 MACHINE
1. 平面机构自由度计算公式 在机构中,若共有K个构件,除去机架外,其活动构件数 为n=K-1。显然,这些活动构件在未组成运动副之前,其 自由度总数为3n,当它们用PL个低副和PH个高副联接组 成机构后,因为每个低副引入两个约束,每个高副引入 一个约束,所以,总共引入(2PL+PH)个约束。故整个机 构的自由度应为活动构件的自由度总数与全部运动副引 入的约束总数之差,用F 表示,即 F=3n-2PL-PH (1-1) 由上式可知:机构自由度F取决于活动构件的件数与运动 副的性质(高副或低副)和个数。
MACHINE
• ⑵ 移动副——两构件间只能作相对移动的低副称为移动副, 移动副及其简图符号表示如下图所示。
移动副
移动副的表示方法
11.1 平面机构的组成

11章

11章
输出student1的首地址
scanf(“%d,%s,%c,%d,%s”,&student1);
错!
结构体变量的初始化
(一)对外部存储类型的结构体变量初始化: struct student 运行结果为: {long int num; No.:9801 name:Wang hong char name[20]; sex:W char sex; address:2 Linggong Road char addr[20]; } a={9801,”Wang hong”,‟W‟,”2 Linggong Road”}; main( ) {printf(“No.:%ld\nname:%s\nsex:%c\naddress:%s\n”, a.num,,a.sex,a.addr); }
}
1数据)
(一)结构体数组的定义,如 struct student {int num; char name[20]; char sex; int age; char addr[30]; }; struct studnt stu[3];
也可直接定义,如 struct student {int num; … } stu[3]; 或struct {int num; … }stu[3];
2 .若成员本身又属一个结构体类型,只能对最低级的成员进行 赋值或存取以及运算。如:student1.birthday.year (下页续)
(接上片)
3. 对成员变量可以象普通变量一样进行各种运算, 如: sumage=student1.age+student2.age; 4. 可以引用成员的地址,也可以引用结构体变量的 地址,如 输入student1.num的值 scanf(“%d”,& student1.num); printf(“%o”,&student1);

C语言-结构体与共用体

C语言-结构体与共用体

(1)“结构类型名”和“数据项”的命名规则,与变量 名相同。 (2)数据类型相同的数据项,既可逐个、逐行分别定义, 也可合并成一行定义。 例如,上例中的日期结构类型,也可改为如下形式: struct date {int year, month, day; }; (3)结构类型中的数据项,既可以是基本数据类型,也 允许是另一个已经定义的结构类型。 例如,上例中的结构类型std_info,其数据项“birthday” 就是一个已经定义的日期结构类型date。 (4)本书将1个数据项称为结构类型的1个成员(或分 量)。
/*主函数main()*/ main() { int i; /* 打 印 表 头 : " □" 表 示 1 个 空 格 字 符 * / printf("No.□□□□Name□□□□□Sex□Birthday\n"); /*输出三个学生的基本情况*/ for(i=0; i<3; i++) { printf("%-7s",student[i].no); printf("%-9s",student[i].name); printf("%-4s",student[i].sex); printf("%d-%d-%d\n",student[i].birthday.year, student[i].birthday.month, student[i].birthday.day); } }
11.2
定义结构体类型变量的方法
声明一个结构体类型的一般形式: struct 结构类型名 /* struct是结构类型关键字*/ {数据类型 数据项1; 数据类型 数据项2; …… …… 数据类型 数据项n; }; /* 此行分号不能少!*/

C语言11结构体与共用体

C语言11结构体与共用体

struct [结构体名]
{
类类结述…型 型结构…不标 标构体…分识 识的类…配符 符组型…内织定.存成 成形义员员式描名名;;
};2020/5/11
struct student { char name[20];
unsigned int nuloat score[3]; }; 3
} 2020/5/11 stu;
7
• 结构体变量的初始化
struct 结构体名
{ 类型标识符 成员名;
struc类t 型stu标de识nt符 成员名; { in…t n…u…m;……. }; char name[20]; strucctha结r 构sex体; 名 结构体变量={初始数据};
int age; strucctha结r a构dd体r[名30]; }{;stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; struc类t 型stu标de识nt符stu成1=员{11名2,;“Wang Lin”,‘M’,19, “200 Beijing Road”};
类型标识符 成员名;
……………. } 结构体变量={初始数据};
2020/5/11
8
• 结构体数组的定义和内存分配
形式一:
形式二:
struct student
struct student
{ int num;
{ int num;
char name[20];
char name[20];
char sex;
stu[1]
main()
age
{ struct student *p;
num
for(p=stu; p<stu+3; p++)

C程序设计(第三版)习题答案(9、11章) 谭浩强著

C程序设计(第三版)习题答案(9、11章) 谭浩强著
printf("The best student is %s,sum=%d\n",stu[maxi].name,max);
}
printf("value=%format\t",x1);printf("value=%format\t",x2);putchar('\n');
输出结果:
value=5.000000ormat value=5.000000ormat
value=3.000000ormat value=8.000000ormat
break;
case 3:scanf("%s",s);
STRING(s);
break;
default:printf("error");
}
}
9.8main()
{int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
main()
{int a,b;
scanf("%d,%d",&a,&b);
printf("%d",SURPLUS(a,b));
}
9.3#include"math.h"
#define S(a,b,c) ((a+b+c)/2)
#define AREA(a,b,c) (sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)))
scanf("%d",&stu.score[j]);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
只有先定义了共用体变量才能引用它, 只有先定义了共用体变量才能引用它,而且不能 引用共用体变量, 引用共用体变量,而只能引用共用体变量中的成 员。 例如: 例如: union data a,b,c; 定义了a,b,c 定义了a,b,c 为共用体变量 引用共用体变量中的整型变量i a.i (引用共用体变量中的整型变量i) b.ch(引用共用体变量中的字符变量ch ch) b.ch(引用共用体变量中的字符变量ch) 引用共用体变量中的实型变量f c.f (引用共用体变量中的实型变量f)
定义结构类型的变量。 定义结构类型的变量。 有三种形式: 有三种形式:
struct 结构名 { 成员表列 }变量名表列 变量名表列; 变量名表列 struct { 成员表列 }变量名表列 变量名表列; 变量名表列 struct 结构名 如 { :struct {成员表列 int num; }; char name[20]; struct 结构名 变量名表列 变量名表列;
} printf(“\n”); for (i=0; i<3; i++) printf(“%5s;%d\n”,leader[i].name,leader[i].count); }
11.6指向结构体类型数据的指针
结构指针变量说明的一般形式为: 结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名 结构指针变量名 eg:struct stu *pstu; : 结构体指针赋值 eg: struct stu boy; : pstu=&boy; pstu=&stu; 其访问的一般形式为: 其访问的一般形式为: (*结构指针变量 成员名 结构指针变量).成员名 结构指针变量 或为: 结构指针变量->成员名 或为: 结构指针变量 成员名 eg:(*pstu).num 或者: pstu->num 或者: :
char sex; float score; } zhang_xin, wang_li ;
说明: 说明:
类型与变量是不同的概念; 类型与变量是不同的概念;
变量可以赋值、存取或运算,编译时分配空间; 变量可以赋值、存取或运算,编译时分配空间; 类型不能赋值、存取或运算,编译时不分配空间。 不能赋值 类型不能赋值、存取或运算,编译时不分配空间。
11.4 结构体变量的初始化
§11.5 结构体数组
结构体数组中每个 数组元素都是一个 结构体类型的数据, 结构体类型的数据, 它们都分别包括各 个成员(分量) 个成员(分量)项。
定义结构体数组 struct stu { int num; char *name; char sex; float score; }boy[5];
11.5.3 结构体数组应用举例
对候选人得票的统计程序。设有3个 例11.2 对候选人得票的统计程序。设有 个 候选人,每次输入一个得票的候选人的名字, 候选人,每次输入一个得票的候选人的名字, 选票为10, 要求最后输出各人得票结果。 要求最后输出各人得票结果。 选票为
#include <string.h> void main() { int <stdio.h> #includei,j; char leadername[20]; struct person for (i=1; i<=10; i++) { char name[20]; { scanf (“%s”,leadername); in count; for (j=0; j<3; j++) }; if (strcmp(leadername, leader[j].name==0) struct person leader[3]={“Li”,0,”Zhang”,0,”Fun”,0} leader[j].count++;
C语言中给出一种构造数据类型——“结构(structure)” 结构( 语言中给出一种构造数据类型 结构 ) 或叫“结构体” 或叫“结构体”。 结构”是一种构造类型,它是由若干“成员”组成的。 “结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类 型。
结构体中的成员称为“ 结构体中的成员称为“域”
成员也可以又是一个结构, 成员也可以又是一个结构,即构成了嵌套的结 构。 struct struct date { int num; { int month; char name[20]; int day; char sex; int year; struct date birthday; }; float score; } zhang_xin, wang_li;
ห้องสมุดไป่ตู้
11.5.1 定义结构体 数组
11.5.2 结构体数组初始化
struct stu { int num; char *name; char sex; float score; } boy[5]={ {101,"Li ping","M",45}, {102,"Zhang ping","M",62.5}, {103,"He fang","F",92.5}, {104,"Cheng ling","F",87}, {105,"Wang ming","M",58} };
第十一章
结构体与共同体
§11.1 概述
基类型:整型、浮点型、 基类型:整型、浮点型、字符型 构造类型:数组由相同数据类型的数据组成。 相同数据类型的数据组成 构造类型:数组由相同数据类型的数据组成。 一组数据往往具有不同的数据类型 具有不同的数据类型。 一组数据往往具有不同的数据类型。
例如,在学生登记表中,姓名应为字符型; 例如,在学生登记表中,姓名应为字符型;学号可为整型或字符 年龄应为整型;性别应为字符型;成绩可为整型或实型。 型;年龄应为整型;性别应为字符型;成绩可为整型或实型。
§ 11.8 共用体
11.8.1 共同体的概念
共用体: 共用体:使几个不同的变量共占同一段内 存的结构。 存的结构。
union data { int i; ; char ch; 或 ; float f; ; }a,b,c; union data { int i; char ch; float f; ; }; union data a,b,c;
r
成员本身又是一个结构则必须逐级找到最 低级的成员才能使用。 低级的成员才能使用。 例如: 例如: zhang_xin.birthday.month 结构体变量的成员可以像普通变量一样进 行各种运算。 行各种运算。
student2_score=student2.score; sum=student2_score+student2.score; student1.age++;
成员名可以与程序中的变量名相同,互不干扰。 成员名可以与程序中的变量名相同,互不干扰。 #include<stdio.h> struct { int num; char name[20]; char sex; float score; } zhang_xin, wang_li; void main() { int num; ……
#include<stdio.h> void main() { struct stu { int num; char *name; char sex; float score; } boy1,boy2; boy1.num=102; ="Zhang ping"; printf("input sex and score\n"); scanf("%c %f",&boy1.sex,&boy1.score); boy2=boy1; printf("Number=%d\nName=%s\n",boy2.num,); printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score); }
11.8.3 共用体类型数据的特点
同一个内存段可以用来存放几种不同类型的成员, 同一个内存段可以用来存放几种不同类型的成员, 但在每一瞬时只能存放其中一种,而不是同时存 但在每一瞬时只能存放其中一种, 放几种。 放几种。 共用体变量中起作用的成员是最后一次存放的成 员,在存入一个新的成员后原有的成员就失去作 用。 共用体变量的地址和它的各成员的地址都是同一 地址。 地址。
§11.3结构体变量的引用 结构体变量的引用
引用结构体变量中成员的方式为 结构体变量名 . 成员名 是成员(分量)运算符, “.”是成员(分量)运算符,它在所有的运算符中 优先级最高 eg:student1.num=10010 eg:student1 num=10010 例如: 已定义stu1为结构体变量并且已有值。 已定义stu 为结构体变量并且已有值。 stu1 printf(″%d,%s,%c,%d,%f,% ″%d, ,student1 printf(″%d,%s,%c,%d,%f,%\n″,student1); printf(″%d,%s,%c,%d,%f,% ″%d, ,stu1 printf(″%d,%s,%c,%d,%f,%\n″,stu1.num, stu1 name,stu1 sex,stu1 age,stu1 score); ,stu1.sex,stu1.age,stu1.score); scanf(″%d,%s,%c,%d,%f,%\n″,&stu1.num, scanf(″%d,%s,%c,%d,%f,% ,&stu1 ″%d, stu1 name,&stu1 sex,&stu1 age,&stu1 score); ,&stu1.sex,&stu1.age,&stu1.score);
相关文档
最新文档