【c语言程序设计】结构体
C语言程序设计(李圣良)章 (7)
一般形式如下:
struct
{
成员列表;
}变量名列表;
例如,可以直接定义结构体变量st1、st2:
struct
{
char id[9];
/* 学号 */
char name[10];
/* 姓名 */
char sex;
/* 性别 */
int age;
/* 年龄 */
float score;
/* 成绩 */
}st1,st2;
型变量x和y表示点的x坐标和y坐标。
# include <stdio.h>
# include <math.h>
struct point
/* 点 */
{ float x;
/* x坐标 */
float y; /* y坐标 */
};
main()
第7nt p1;
float l;
采用定义变量的方式来定义数据成员。
第7单元 结构体和共用体 (4) 结构体类型定义必须以分号结束。 例如,根据图7-1的分析可以设计结构体类型如下:
struct student
{
char id[9];
char name[10];
char sex;
int age;
float score;
};
/* 学号 */ /* 姓名 */
\n",tomor.year,tomor.month,tomor.day); }
第7单元 结构体和共用体 图7-3 例7-1程序运行结果
第7单元 结构体和共用体 3. 结构体变量的初始化 在结构体变量定义的同时可以为其整体赋初值,方法与数
组的初始化相似,将各个数据成员的值按声明类型时的顺序依 次排列,使用逗号间隔,全部放在大括号中,整体赋值给变量。 例如:
台州学院C语言程序设计课件——结构体
例: struct Grade_Info { int score; struct Grade_Info *next; }; typedef struct Grade_Info NODE; NODE;
2、线性链表的基本操作 基本操作有:创建、插入、删除、输出和销毁等 基本操作有:创建、插入、删除、输出和销毁等。 链表的创建操作 含义:从无到有地建立起一个链表, 含义:从无到有地建立起一个链表,即往空链表中依次 插入若干结点,并保持结点之间的前驱和后继关系。 插入若干结点,并保持结点之间的前驱和后继关系。 基本思想:首先创建一个头节点,让头指针head和尾指 基本思想:首先创建一个头节点,让头指针head和尾指 tail都指向该节点 并设置该节点的指针域为NULL( 都指向该节点, 针tail都指向该节点,并设置该节点的指针域为NULL(链尾 标志);然后为实际数据创建一个节点,用指针pnew指向它 );然后为实际数据创建一个节点 指向它, 标志);然后为实际数据创建一个节点,用指针pnew指向它, 并将实际数据放在该节点的数据域,其指针域置为NULL; 并将实际数据放在该节点的数据域,其指针域置为NULL;最 后将该节点插入到tail所指向节点的后面 同时使tail指向 所指向节点的后面, 后将该节点插入到tail所指向节点的后面,同时使tail指向 pnew所指向的节点 pnew所指向的节点。 所指向的节点。
以分号; 以分号;结尾
//学号 //学号 //姓名 //姓名 //性别 //性别 //年龄 //年龄 //班级 //班级 //成绩 //成绩
例 2: struct Date { int year; //年 //年 int month; //月 //月 int day; //日 //日 };
2、结构体变量的定义和引用 结构体变量的定义 间接定义法:先定义结构类型,再定义结构变量 间接定义法:先定义结构类型,
[C语言程序设计10+11]结构体p28-文件-编译预处理
方法一:
方法二:
struct student { int number; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2;
struct student { int number; char name[20]; char sex; int age; float score; char addr[30]; }; struct student student1,student2;
例如: union date { int i; char ch; float f;}a,b,c;
29
共用体的存储特点
1.同一块内存可以存放不同类型的 数据,但在某一时刻只能存放其中 的一种; 2.共用体变量中起作用的成员是最 后一次存放的成员; 3.共用体变量的地址和它的成员的 地址是同一个地址; 4.共用体变量不能整体被赋值,也 不能给共用体变量赋初值; 5.不能把共用体变量作为函数的参 数进行传递,但可以使用指向共用 体变量的指针作为函数的参数; 6.结构体类型和共用体类型可以嵌 套使用.
8
结构体变量的存储特点
如: struct student { int number; char name[5]; char sex; int age; float score; char addr[10]; }student1,student2;
student1.number [0] ... [4] student1.sex student1.age student1.score student1.addr[0] ... student1.addr[9] student2.number [0] ... [4] student2.sex ...
C语言程序设计 - 结构体和共用体-样本教案
用以下实例来分析:
struct
{int a;
int *s;
}*p;
第一组引用:对成员变量a的引用
++p->a++(p->a)
说明:成员变量a自增加1.
(++p)->a
说明:指针p先移动一个单位,然后引用对应的成员变量a.
注意: p每移动一个单位要移动多少字节?
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
这种结构类型变量定义的方式与不省略"结构名"的方式相比,不同之处在于:这种格式定义结构变量以后无法再定义此结构类型的其它结构变量,而带有"结构名"的格式则可以.
格式三:使用typedef说明一个结构类型名,再用新类型名定义结构变量.
例:
typedefstruct
{ char name[12];
char sex;
{"Wang wu" , "F",1983, 3, 3,93,83,73,63}
};
有时结构数组长度可以省略,而由初值个数来暗示.
(4)结构变量成员的引用和操作:
1)对结构变量成员的引用和操作:
c语言第10章 结构体
李晓勇
lxyonghn@ 信息与电子工程学院
内容
结构体类型定义
结构体变量的定义 结构体变量的引用 结构体变量的初始化 结构数组 结构体和指针 结构体与函数 链表
C语言程序设计 - c语言第8章 结构体 语言第8
2
一, 结构体类型定义 结构体是一种构造数据类型 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据 用途:把不同类型的数据组合成一个整体 自定义数据 类型 结构体类型定义 struct [结构体名 结构体名] 结构体名 { 成员名; 类型标识符 成员名; 类型标识符 成员名; 成员名; ……………. }; ;
num 间接定义法 struct student { int num; char name[20]; char sex; int age; }; struct student stu[2]; 25B name sex age num name sex age stu[1] stu[0]
C语言程序设计 - c语言第8章 结构体 语言第8
C语言程序设计 - c语言第8章 结构体 语言第8
13
六, 结构体和指针
指向结构体变量的指针
定义形式: 结构体指针名; 定义形式:struct 结构体名 *结构体指针名 结构体指针名
例 struct student *p; 使用结构体指针变量引用成员形式 struct (*结构体指针名 成员名 结构体指针名).成员名 结构体指针名->成员名 结构体变量名.成员名 结构体指针名 student 结构体指针名 p成员名 结构体变量名 成员名 num { int num; name char name[20]; stu sex char sex; 例 int n; struct student stu1; int *p=&n; int age; age struct student *p=&stu1; *p=10; }; n=10 stu1.num=101; (*p).num=101 struct student stu ,*p=&stu; p->num=101
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语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
C语言_实验九、结构体程序设计
实验九、结构体程序设计一、实验目的1.掌握结构、结构数组、结构指针的定义及使用;2.掌握简单的链表的定义及使用;3.掌握共用体和枚举类型的定义及使用;4.掌握文件的简单的定义、打开、写、关闭等操作。
二、实验内容1.[题目内容]某考点建立一个考生人员情况登记表、表格内容如下:1)根据上表正确定义该表格内容要求的数据类型。
2)分别输入各成员项数据,并打印输出(为简便,假设有3个考生)编程序,然后上机调试运行程序。
2.[题目内容]某单位进行选举,有5位候选人:zhang、wang、li、zhao、liu。
编写一个统计每人得票数的程序。
要求每个人的信息使用一个结构体表示,5个人的信息使用结构体数组。
3.[题目内容]设张三20岁、李四22岁、王平23岁,编程输出3人中年龄最小者的姓名和年龄。
4.[题目内容]定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。
编写6个函数分别用于:(1)使用结构体数组,输入全班10名学生的上述信息;(2)计算每一个学生的总分、平均分;(3)计算每一门课程的平均分;(4)查找成绩有不及格的学生信息;(5)按学生成绩总分降序排序;(6)输出全班学生的学号、总分及名次。
5.[题目内容]利用上一题的结构类型,创建包含10个结点的无序链表。
编写5个函数分别实现下述功能(参考前面第三部分内容):(1)显示链表;(2)添加结点;(3)删除结点;(4)计算每位学生的总分;(5)按英语成绩排序。
三、课后作业(写实验报告)1.学生成绩管理:有5个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。
从键盘输入5个学生数据,要求打印出每个学生三门课的平均成绩,以及每门课程平均分、最高分学生数据(包括学号、班级、姓名、三门课成绩,平均分)。
(1)定义学生结构体。
(2)用一个函数实现5个学生数据的输入,用另一个函数负责求每个学生三门课程的平均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。
c语言结构体知识点总结
c语言结构体知识点总结一、C语言结构体知识点总结1、什么是结构体结构体是一种自定义的类型,由多种类型的数据组成,即一种数据类型可以由多种数据类型组成,这样便可以用于描述各种复杂的数据结构。
2、结构体语法结构体的声明语句:struct 结构体名{数据类型1 成员1;数据类型2 成员2;数据类型n 成员n;};3、结构体指针结构体指针是一种指向结构体的指针,用于存储结构体地址,即把结构体的地址存储在指针变量中,可以用来访问结构体中的成员变量。
结构体指针的声明语句:struct 结构体名 *指针名;其中,“*”号前面的“struct 结构名”的主要作用是指定指针指向的数据类型,也就是说它指定了指针使用的结构体类型,而“*”表明它是一个指针变量。
4、结构体成员的访问当我们定义完一个结构体后,如果要访问结构体的成员,也就是获取结构体中成员变量的值,可以使用如下语句:将结构体变量名作为结构体,将成员变量名作为结构体中成员变量的访问方式。
比如:结构体名.成员名5、结构体数组在C语言中,也可以定义结构体数组,即一个由结构体组成的数组,结构体数组的声明语句如下:struct 结构体名数组名[数组大小];6、结构体内嵌结构体C语言支持在结构体中定义其他结构体,比如可以定义在一个结构体中定义另外一个结构体;也可以定义一个指向另外一个结构体的指针,即一个结构体可以包含多个结构体。
7、结构体的大小结构体大小指结构体中非空成员的总字节数,其大小由结构体中最大字节数成员决定,有些编译器会对字节进行对齐,即把结构体大小调整为4或8的倍数,从而提升C语言程序的运行效率。
8章 c语言程序设计 结构体,共用体与枚举类型
当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。
c语言程序设计第14章 结构体共用体和用户定义类型-海贝
float score; char addr[30];
} stu1,stu2;
3. 直接定义结构体变量
struct {
类型标识符 成员名; 类型标识符 成员名;
……………. } 变量名表列;
4. 先用typedef说明一个结构体类型名, 再用新类型名来定义变量
typedef struct {
char name[12]; char sex; struct date birthday; float sc[4]; } STREC; STREC std, pers[3], *pstd
stu[0] stu[1]
结构体数组初始化
结顺分构序行体初初数始始组化化引:: 用 stru{}例s例scssst引tttrttrruruuusu用s{}{}s{}c[{}ciccitcc3ttnntss;uthh;rrtt]ttt方uudaauu;ssasccrrest[[ntiiiccicciciitcciug式ttntunnnnnnsnunuhhhhh]]uhhedtedttttt==atdtmaaaasdaa;ex:emaaat{{rrrrrearrennnnun;n;gggn{{gnsnsnnsuuuetnsduteeet……eeeteaaa[mmmaem;;;xx;x2xmmm结mnss;;;;;;……0;;ttteeeue]u构[[[;[[}}[2222,,]体000]{{0==]]]……]{;;;{;数111{s{{……10t0111组r0011c0s}},,,p001t名“““,,u{{y,,,LWL“““[……([1LWiLisa下u]tGiin……u.auYaGg标[angY0an}}gaLen]a}}g]n+.L”i.nn;;”g成n+,”i,a‘””‘n;F,mM,,‘员”‘‘’FMM,e,‘’1’,名M,,”91’’1Z,,}9912’h,;,}902a}},0o;,}D, a”);
C语言 结构体(课堂PPT)
ห้องสมุดไป่ตู้实数组和结构体都算是数据结构的范畴了,数组就是最简单的数据结构、 结构体比 数组更复杂一些,链表、哈希表之类的比结构体又复杂一些;二叉树、图又更复杂一 些。 (2)数组有2个明显的缺陷:第一个是定义时必须明确给出大小,且这个大小在 以后不能再更改;第二个是数组要求所有的 元素的类型必须一致。更复杂的数据结构 中就致力于解决数组中的这两个缺陷。 (3)结构体是用来解决数组中第二个缺陷的, 可以将结构体理解为其中一个数组元素可以不相同的数组。结构体完全可以 取代数组, 只是在数组可用的范围内数组比结构体更简单。 4、结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式);实质 上都是指针方式访问。 (2)结构体变量中的元素的访问方式:只有一种,用.或者是 ->的方式来访问。(.或者是->访问结构体元素其实质是一样的。
C语言 结构体(课堂 PPT)
演讲人
C语言之结构体概述 1、结构体类型是一种自定义类型 (1)C语言中有2种类型:原 生类型和自定义类型。 2、结构体使用时先定义结构体类型再用类型定义变量 (1) 结构体定义时需要先定义结构体类型,再用类型来定义变量。 struct leixing { int a; double b; char c; }; struct leixing lx; (2)也可以在定义结构体类型的同时定义 结构体变量。 struct leixing { int a; double b; char c; }lx; 注:typedef struct leixing //将类型struct leixing重命名为lx,lx是一个类型名,不是变量 { int a; double b; char c; }lx; 3、从数组到结构体的进步之处 (1)结构体可以认为是从数 组发展而来的。
四川大学《c语言程序设计》课件-第8章 结构体与共用体
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员
C语言程序设计 结构体
stu1.birthday.month; stu1.birthday.day; stu1.birthday.year;
Your site here
LOGO
获取结构体变量的运算
如同对数组访问一样,对结构体变量也不能进行加减乘除四则运算、按 位与逻辑运算。但可以对结构体变量进行赋值。 例如:stu2 = stu1;
Your site here
LOGO
结构体赋值和初始化
仅仅对其中部分的成员变量进行初始化,其他没有初始化的成员 变量由系统完成初始化,为其提供缺省的初始化值。各种基本数据类 型的成员变量初始化缺省值如表9-1所示。
以下四种初始化是等价的。 struct Student {int Code; char Name[20];float Score[3]; }; / struct Student stu1={12092101, "Tom",0.0,0.0,0.0}; struct Student stu1={12092101, "Tom",0.0,0.0}; struct Student stu1={12092101, "Tom",0.0}; struct Student stu1={12092101, "Tom"};
LOGO
C语言程序设计
第9章:结构体
结构体初识
结构体是用来描述一类复杂事物的数据类型(用单一的数据类 int/float/char等描述不了)。例如:
struct student {int number; char name[20]; float score; char age;};
main() {int i,j; struct student zhangsan={20120102,”zhangsan”,89.5,22};
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语言中 结构体通常由不同数据类型的数据项(成员)组成 组成 一个结构体可包含若干成员,每个成员具有自己 一个结构体可包含若干成员 每个成员具有自己 的名字及数据类型。 的名字及数据类型。
《C语言结构体》课件
设计一个储蓄账户(Account)结构体, 包含账户名、账户号码、余额等信息, 以便更方便地管理用户的银行账户。
结构体的应用
在函数中传递结构体
可以将结构体作为参数传递给函数,以实现更复 杂的程序功能。
结构体的输入输出
4
结构体指针
结构体指针可以指向一个结构体变量,并可以通过它来操作结构体的成员。
结构体高级部分
结构体嵌套
可以在结构体中定义另一个结构体,以实现更复杂 的数据结构。
联合体(union)
联合体是一种特殊的结构体,在同一块内存中存储 多个不同类型的数据。
枚举(enum)
枚举是一种描述变量的表示方法,通过固定的名称 和数值将变量的值表示为一组符号。
可以使用标准输入输出函数对结构体进行输入输 出。
在结构体中定义函数指针
可以在结构体中定义函数指针,以实现更灵活的 程序设计。
嵌套结构体的输入输出
可以使用标准输入输出函数对嵌套结构体进行输 入输出。
总结
• 结构体是提高程序可读性和可维护性的关键概念。 • 结构体的定义和操作是理解结构体的核心。 • 结构体的高级部分包括嵌套、联合体、枚举和位域。 • 结构体的应用包括结构体在函数中的传递、在结构体中定义函数指针以及结构体的输入输出。 • 结构体的实例和练习题可以帮助读者更好地掌握结构体的概念和使用。
结构体变量的定义
结构体定义了一种数据类型,在程序中,可以根据定义的结构体创建对应的结构体变量。
结构体操作
1
结构体的初始化
在定义结构体变量时,可以使用初始化列表为其成员变量指定初始值。
2
结构体的赋值
C语言程序设计-结构体
struct student {
char name[20]; float math; float physics; float english; float aver; float count; }; … struct student s={“王军”,84,88,71,81,243};
结构体变量的引用
3. 如果是嵌套定义,用若干个
char publisher[40]; struct date pub_date; int pages; float price;
成员运算符,一级一级地找 } ebook,mbook;
到最低的一级成员
ebook.pages=200;
ebook.pub_date.month ebook.pub_date.year ebook.pub_date.day
相关的数据组织起来, {
作为一个整体(集合)。
char name[20]; float math;
• 结构体的定义:
float physics;
struct 结构体名
成员 {
列表
数据类型 成员1;
float english; float aver; float count; };
struct book {
结构体变量的引用
• 结构体整体引用
– 在程序中可以使用结构体指针或结构体名完成结构体 变量的整体引用
struct student {
char name[20]; float math; float physics; float english; float aver; float count; };
name
name
publisher
Math
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章CH9 结构体9.1 选择题
1.若有以下说明语句:
struct student
{ int num;
char name[ ];
float score;
}stu;
则下面的叙述不正确的是: ( D )
A. struct是结构体类型的关键字
B. struct student 是用户定义的结构体类型
C. num, score都是结构体成员名
D. stu是用户定义的结构体类型名
2.若有以下说明语句:
struct date
{ int year;
int month;
int day;
}brithday;
则下面的叙述不正确的是__C___.
A) struct是声明结构体类型时用的关键字
B) struct date 是用户定义的结构体类型名
C) brithday是用户定义的结构体类型名
D) year,day 都是结构体成员名
3.以下对结构变量stul中成员age的非法引用是B
struct student
{ int age;
int num;
}stu1,*p;
p=&stu1;
A) stu1.age B) student.age C) p->age D) (*p).age
4.设有以下说明语句:
typedef struct stu
{ int a;
float b;
} stutype;
则下面叙述中错误的是(D)。
A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型
C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
5.设有以下定义,值为5的枚举常量是()。
enum week{sun,mon=4,tue,wed,thu,fri,sat} w;
A tue
B sat
C fri
D thu
6.设有如下定义:
struct sk
{int a;float b;}data,*p;
若有p=&data;,则对data中的a域的正确引用是(B)。
A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a
7.根据以下定义,能输出字母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]);
struct person{char name[9];int age;};
struct person class[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16,};
8.以下程序的输出结果是(D)。
A、0
B、1
C、3
D、6
#include<stdio.h>
void main()
{
struct emplx{int x;int y;}enum[2]={1,3,2,7};
printf(“%d\n”,enum[0].y/enum[0].x*enum[1].x);
}
9.若有以下说明及语句,则值为6的表达式是(D)。
A、p++->n
B、p->n++
C、(*p).n++
D、++p->n
struct st{int n;struct st *next;};
struct 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];
10.已知字符0的ASCII码的十进制的值是48,且数组的第0个元素在低位,以下程序的输出结果是(B)。
A、39
B、9
C、38
D、8
void main()
{
union{int i[2];long k;char c[4];}r,*s=&r;
s->i[0]=0x39;s->i[1]=0x38;
printf(“%x\n”,s->c[0]);
}
11.以下程序输出的结果是(C)。
A、32
B、16
C、8
D、24 typedef union{long x[2];int y[4];char z[8];}MYTYPE;
MYTYPE them;
void main()
{
printf(“%d\n”,sizeof(them));
}
12.设有以下语句
typedef struct S
{ int g; char h;} T;
则下面叙述中正确的是(B)。
A) 可用S定义结构体变量
B)可以用T定义结构体变量
C)S是struct类型的变量
D)T是struct S类型的变量
13.有以下说明和定义语句
struct student
{ int age; char num[8];};
struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}}; struct student *p=stu;
以下选项中引用结构体变量成员的表达式错误的是(D)。
A) (p++)->num B) p->num
C) (*p).num D) stu[3].age
9.2 读程序
1.有如下程序
#include<stdio.h>
struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
main()
{
printf("%d\n",a[0].y*a [1].x);
运行结果是:
14
首先是定义结构体st,st中共有两个整型成员x,y。
然后定义一个st类型的数组a,a的长度为2,即数组中含有两个st类型的元素,分别是a[0]和a[1]. 对a进行初始化,此题是按照储存顺序进行初始化,即将5赋给a[0]中的x(即a[0].x=5); 将7赋给a[0]中的y(即a[0].y=7); 将2赋给a[1]中的x(即a[1].x=2); 将9赋给a[1]中的y(即a[1].y=9);
执行main函数,输出表达式a[0].y*a [1].x的值,即7*2的值
5 a[0].x a[0]
7 a[0].y
2 a[1].x a[1]
9a[1].y
2.有如下程序
#include<stdio.h>
main( )
{struct stu
{int num;
char a[5];
float score;
}m={1234,”wang”,89.5};
printf(“%d,%s,%f”,m.num,m.a,m.score);
}
运行结果是:
1234,wang,89.5
3.有如下程序
#include<stdio.h>
struct cmplx
{ int x;
int y;
} cnum[2]={1, 3, 2, 7};
main( )
{
printf(“%d\n”, cnum[0].y * cnum[1].x );
}
运行结果是:6
与第一题解法同
4.有如下程序
#include <stdio.h>
struct abc
{ int a, b, c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0].a+s[1].b;
printf("%d \n",t);
}
运行结果是:6。